我有:
var g;
var g1;
var b, binary;
我需要
g = g1,如果b =真 0 = g1,如果b =假
g和g1都是有限的:0..1
如何在线性程序中将其编码为线性约束?
g1 <= b
-M(1-b) + g <= g1 <= g + M(1-b)
M是一个任意大的常数
如果b = 0
,那么g = 0
由于第一个约束,而第二个变得多余,-M <= g1 <= M
(M >> g
)。
如果b = 1
,那么g1
,根据第一个约束,可以是0或1,但第二个约束变为g <= g1 <= g
,即g1 = g
g1 <= b
和g1 >= g - (1 - b)
编辑:此外g >= g1 - (1 - b)
需要涵盖b = 1, g = 0, g1 = 1
的情况。