我需要通过以下if-else语句构建MILP(混合整数线性规划)约束: Beta是一个常数。
if (a > b) then c = beta else c = 0
如何构建对MILP约束的语句。是否有解决此问题的技术。谢谢。
答案 0 :(得分:1)
我假设a
,b
和c
在这里都是决策变量。要建立约束,您需要添加一个新的二进制变量(我们称之为x
),如果a > b
等于1,否则等于0。您还需要一个大的常量M
。然后添加以下约束:
Mx >= a - b
M(1-x) >= b - a
x in {0,1}
逻辑是:如果a > b
,则x
必须等于第一个约束的1(而x
可以必须等于第二个约束的1)。如果b > a
,则1-x
必须等于第二个约束,即x
必须等于0(而x
可以等于0第一约束)。
接下来,我们需要一个约束条件,如果为x = 1
,则为c = beta
,否则为c = 0
:
c = beta * x
注意:以上逻辑允许c
等于0或beta(如果a = b
;求解器将决定。如果c
是否需要a = b
等于0?
另一注:在像这样的“大M
”型公式中,最好始终保持M
尽可能小,同时保持其有效性。约束。在这种情况下,这意味着将M
设置为a
和b
之间的最大可能差值。如果您的模型很小,那就没关系了,但是,如果您有很多这样的决策变量,那么那就很重要了。