【发布时间】:2013-12-16 08:13:42
【问题描述】:
我目前正在通过蛮力解决一个问题,但正在寻找更优雅的解决方案。我有一个跨多个节点运行各种功能的系统。每个功能都由一个“角色”定义。每个“角色”都可以定义为允许一个或多个客户端持有它。此外,可能会优先考虑特定客户(或多个客户)而不是其他客户。
复杂性在于“角色”也可能相互关联。例如,如果客户不持有“RoleB”,则他们可能只能持有“RoleA”,或者如果他们持有“RoleD”,客户可能只能持有“RoleC”。此外,可以优先关联角色(即,持有“RoleE”的客户最好持有“RoleF”,但这不是强制性的)。
客户可以宣传其担任任意数量角色的意愿,但并非必须这样做。即“client1”可以为角色“A”、“B”和“C”做广告,而“client2”只能为角色“A”和“B”做广告。
我已经以蛮力的方式解决了这个问题,但显然,随着相关角色数量的增加,解决它需要的时间呈指数级增长。
目前,我的算法是: 为宣传给定角色的客户找出所有可能的组合,然后单独评估该角色以生成按偏好排序的合法组合列表。
为上一步中生成的列表生成所有可能的组合,并对其进行迭代,根据围绕角色组的强制性、非法、有利和不利关系的启发式方法确定哪个是“最佳”组合。这是随着相关角色数量的增加而呈指数增长的部分。
我尝试了一些“提前退出”的方法,根据角色关系确定理论上可能的最大“分数”,并且一旦我们遇到具有“分数”的组合 >= 我们就停止处理,但我想知道是否有更多的数学解决方案。任何解决方案都可能是最佳组合的近似值,但这很好。
理想情况下,我需要可以运行亚秒级的东西。
希望我的解释不是太含糊,有人可以指出我正确的方向! 提前致谢。 凸轮
【问题讨论】:
标签: math optimization combinations permutation