如何将其转换为一组线性约束?

时间:2014-06-16 06:03:56

标签: linear linear-programming cplex ampl

给定二维变量的一维数组,例如

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可以自动处理,但我无法访问它。

1 个答案:

答案 0 :(得分:2)

尝试像y&lt; = sum(x)这样简单的东西,如果所有x都为零,则会强制y为零。

然后,为了将y强制为1,您有几个选择。您可以简单地为x中的每个变量添加y> = x的约束,或者使用大的M约束,例如My&gt; = sum(x)其中M是某个常量,这是x中可以的最大变量数同时等于1.添加单独的约束可能会产生更严格的线性松弛,特别是如果有许多x变量。

相关问题