if-then约束的线性化



我试图线性化这种形式的约束:如果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是一个足够大的常数(需要谨慎选择)。

最新更新