给定二维变量的一维数组,例如
x = [0,1,0,0,1]
我想创建一个新变量y
,以便y <= max(x)
。换句话说
当且仅当sum(x)= 0时,y = 0。
当且仅当sum(x)> 0时,y = 1 0
如何将其转换为一组线性约束?
我知道这一定是可能的,因为IBM CP Optimizer Suite可以自动处理,但我无法访问它。
答案 0 :(得分:2)
尝试像y&lt; = sum(x)这样简单的东西,如果所有x都为零,则会强制y为零。
然后,为了将y强制为1,您有几个选择。您可以简单地为x中的每个变量添加y> = x的约束,或者使用大的M约束,例如My&gt; = sum(x)其中M是某个常量,这是x中可以的最大变量数同时等于1.添加单独的约束可能会产生更严格的线性松弛,特别是如果有许多x变量。