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

问题描述 投票:0回答:2

我有:

var g;
var g1;
var b, binary;

我需要

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

g和g1都是有限的:0..1

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

linear-programming
2个回答
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


0
投票

g1 <= bg1 >= g - (1 - b)

编辑:此外g >= g1 - (1 - b)需要涵盖b = 1, g = 0, g1 = 1的情况。

© www.soinside.com 2019 - 2024. All rights reserved.