如何将“ g1 = b?g:0”编码为LP约束?

时间:2019-03-21 18:21:05

标签: linear-programming

我有:

var g;
var g1;
var b, binary;

我需要

  

g = g1,如果b = true
  0 = g1,如果b =假

g和g1均受限制:0..1

如何在线性程序中将其编码为线性约束?

2 个答案:

答案 0 :(得分:0)

g1 <= bg1 >= 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 <= MM >> g)。

如果b = 1,则g1根据第一个约束可以为0或1,但是第二个约束变为 g <= g1 <= g,即g1 = g