我有:
var g;
var g1;
var b, binary;
我需要
g = g1,如果b = true
0 = g1,如果b =假
g和g1均受限制:0..1
如何在线性程序中将其编码为线性约束?
答案 0 :(得分:0)
g1 <= b
和g1 >= g - (1 - b)
编辑:另外,g >= g1 - (1 - b)
必须涵盖b = 1, g = 0, g1 = 1
的情况。
答案 1 :(得分:0)
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