我试图线性化这种形式的约束:如果a == b,则c = 1其中a和b是正整数,c是二进制变量。我在寻找这样的解决方案https://math.stackexchange.com/questions/2792360/how-to-linearize-if-then-constraint在这种情况下是行不通的。感谢所有能帮助我的人。
含义
a = b => c = 1
(a,b: integer variables, c: a binary variable)
可以重新表述为:
c = 0 => a >= b + 1
or
a <= b - 1
(使用a,b是整数)。一个"or"需要一个额外的二进制变量。所以我们可以写:
a >= b + 1 - M δ - M c
a <= b - 1 + M (1-δ) + M c
δ ∈ {0,1}
这里M
是一个足够大的常数(需要谨慎选择)。