【发布时间】:2016-06-11 14:08:38
【问题描述】:
有没有人知道如何在这种情况下在混合整数编程中编写条件约束:
if a == 0 then b = 1
else b = 0
-M <= a <= M
b={0,1}
请注意,M 可以是任何连续数。 谢谢。
问候,
【问题讨论】:
标签: if-statement optimization constraints conditional linear-programming
有没有人知道如何在这种情况下在混合整数编程中编写条件约束:
if a == 0 then b = 1
else b = 0
-M <= a <= M
b={0,1}
请注意,M 可以是任何连续数。 谢谢。
问候,
【问题讨论】:
标签: if-statement optimization constraints conditional linear-programming
我会这样处理。首先使用变量拆分方式,引入两个非负变量aplus, amin:
0 <= aplus <= d*M
0 <= amin <= (1-d)*M
a = aplus-amin
d in {0,1}
现在我们可以这样做了:
0.001*(1-b) <= aplus + amin <= M*(1-b)
在许多情况下,我们可以简化这一点,但这需要了解模型的其余部分。
【讨论】:
b=1 则0<=aplus+amin<=0 ==> aplus+amin=0。如果b=0 那么0.01 <= aplus+amin <= M。