【问题标题】:Selecting optimal combinations选择最佳组合
【发布时间】:2013-12-16 08:13:42
【问题描述】:

我目前正在通过蛮力解决一个问题,但正在寻找更优雅的解决方案。我有一个跨多个节点运行各种功能的系统。每个功能都由一个“角色”定义。每个“角色”都可以定义为允许一个或多个客户端持有它。此外,可能会优先考虑特定客户(或多个客户)而不是其他客户。

复杂性在于“角色”也可能相互关联。例如,如果客户不持有“RoleB”,则他们可能只能持有“RoleA”,或者如果他们持有“RoleD”,客户可能只能持有“RoleC”。此外,可以优先关联角色(即,持有“RoleE”的客户最好持有“RoleF”,但这不是强制性的)。

客户可以宣传其担任任意数量角色的意愿,但并非必须这样做。即“client1”可以为角色“A”、“B”和“C”做广告,而“client2”只能为角色“A”和“B”做广告。

我已经以蛮力的方式解决了这个问题,但显然,随着相关角色数量的增加,解决它需要的时间呈指数级增长。

目前,我的算法是: 为宣传给定角色的客户找出所有可能的组合,然后单独评估该角色以生成按偏好排序的合法组合列表。

为上一步中生成的列表生成所有可能的组合,并对其进行迭代,根据围绕角色组的强制性、非法、有利和不利关系的启发式方法确定哪个是“最佳”组合。这是随着相关角色数量的增加而呈指数增长的部分。

我尝试了一些“提前退出”的方法,根据角色关系确定理论上可能的最大“分数”,并且一旦我们遇到具有“分数”的组合 >= 我们就停止处理,但我想知道是否有更多的数学解决方案。任何解决方案都可能是最佳组合的近似值,但这很好。

理想情况下,我需要可以运行亚秒级的东西。

希望我的解释不是太含糊,有人可以指出我正确的方向! 提前致谢。 凸轮

【问题讨论】:

    标签: math optimization combinations permutation


    【解决方案1】:

    听起来像Boolean satisfiability problem,但有点复杂。 BSP 是一个 NP 完全问题,因此没有算法可以在小于指数的时间内解决它,但是有一些算法(在链接中提到)可以比蛮力做得更好。

    【讨论】:

    • 谢谢 Saposhiente,我看过 BSP 的东西,但我认为它不太适合这种情况。如果我错了,请纠正我,但是对于 BSP 问题,您有一个“方程式”,您需要确定是否有解决方案。就我而言,我有很多解决方案,需要找到一个最佳的(或接近最佳的)。所以,我认为 BSP 在这种情况下不会起作用。不过读起来很有趣!
    • 除了“偏好”部分,您的问题简化为 BSP。 NP 完全问题的问题在于,虽然它们很难解决,但它们的解决方案很容易验证;在这种情况下,BSP 的解是返回方程的可能解之一。运行其中一种可用算法可以保证为您提供解决方案(如果存在),但不一定是偏好最佳的解决方案。
    • 是的,我同意它可以提供解决方案,但不能保证最佳解决方案。不幸的是,这对我的应用程序没有多大用处,因为我需要一些近似于最佳解决方案的东西。不过感谢您的建议,非常感谢。
    • 看起来加权 Max-SAT 可能是一种可能性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多