制定线性整数规划约束

Formulating Linear Integer Programming Constraint

我正在尝试为优化问题制定一个约束条件,该约束条件强制解决方案(产品组合,用二进制数字表示以表示它们是否被选中)具有特定的 属性订单。

假设选择了产品 1、2 和 5,则该解决方案由 [1, 1, 0, 0, 1] 表示。这些产品还有一个必须按顺序排列的 属性(位置)。用于检查的 Python 函数为:

def products_in_order(products_selected):
    locations = [p.location for p in products_selected]
    # locations = [80, 79, 81] (for instance) 
    return max(locations) - min(locations) <= 2

(这是有效的,因为它们永远不会在同一个位置)

但是,它变得更难了。最大位置是 99,环绕:所以 [98, 99, 0] 也是一个有效的解决方案。

始终恰好选择了三个产品。

感谢您提供的任何帮助,我已经为此苦苦挣扎了很长一段时间。现在我正在枚举所有可能的配置,产生 100 个约束(这让事情变得很慢)。

JR

您要找的条件是

return abs( mod( max(locations) - min(locations) +50,100)-50) <=2

或一般形式:

abs(mod( distance + range/2,range)-range/2)

这给出了圆形中的最小距离 space。常用于计算圆内2个给定点的angular距离,范围为2*pi,距离为angle2-angle1

我最终用我的一个朋友提出的元解决方案解决了这个问题。

由于选择位置 X 的产品会推断出其他允许的选择(即 X+1 和 X+2),因此优化产品组而不是单个产品是有意义的。我已经构建了这个并且它工作得很漂亮。

感谢您的回复!