1 linear-programming integer-programming mixed-integer-programming
我需要从这个 if-else 语句构建一个 MILP(混合整数线性规划)约束:其中 beta 是一个常量。
if (a > b) then c = beta else c = 0
Run Code Online (Sandbox Code Playgroud)
如何构建 MILP 约束的语句。有没有什么技术可以解决这个问题。谢谢。
我假设a
、b
、 和c
都是这里的决策变量。为了构建约束,您需要添加一个新的二进制变量(我们称之为它x
),如果是则等于 1,a > b
否则等于 0。您还需要一个大常数M
。然后添加以下约束:
Mx >= a - b
M(1-x) >= b - a
x in {0,1}
Run Code Online (Sandbox Code Playgroud)
逻辑是:如果a > b
,则x
根据第一个约束必须等于 1(并且根据第二个约束x
可能等于 1)。如果b > a
,则1-x
根据第二个约束必须等于 1,即x
必须等于 0(并且根据第一个约束x
可能等于 0)。
接下来,我们需要一个约束,表示 if x = 1
,then c = beta
,否则,c = 0
:
c = beta * x
Run Code Online (Sandbox Code Playgroud)
注意:上面的逻辑允许c
等于 0 或 beta if a = b
; 求解器将决定。if需要c
等于 0吗a = b
?
另请注意:在M
像这样的“大”型公式中,最好在M
保持约束有效性的同时保持尽可能小。在这种情况下,这意味着设置和M
之间的最大可能(或合理)差异。如果您的模型很小,那么它不会有太大影响,但如果您有很多这样的决策变量,那么它可能会很重要。a
b