0

我正在尝试线性化这种形式的约束:如果 a == b 然后 c = 1 其中 a 和 b 是正整数,c 是二进制变量。我正在寻找像这样的解决方案https://math.stackexchange.com/questions/2792360/how-to-linearize-if-then-constraint 在这种情况下不起作用。感谢任何可以帮助我的人。

4

1 回答 1

3

含义

 a = b => c = 1

 (a,b: integer variables, c: a binary variable)

可以重新表述为:

 c = 0 => a >= b + 1 
          or
          a <= b - 1

(使用 a,b 是整数)。“或”需要一个额外的二进制变量。所以我们可以写:

 a >= b + 1 - M δ - M c
 a <= b - 1 + M (1-δ) + M c
 δ ∈ {0,1}

M是一个足够大的常数(要谨慎选择)。

于 2021-08-19T19:01:20.337 回答