我在线性程序中有一个浮点变量x
,该浮点变量应为0
或两个常数CONSTANT_A
和CONSTANT_B
之间:
LP.addConstraint(x == 0 OR CONSTANT_A <= x <= CONSTANT_B)
当然,线性编程中没有明确的OR
这样的东西。有没有办法表达这种约束?
答案 0 :(得分:1)
因此,假设您需要约束:
x == 0 OR 1 <= x <= 2
很明显,线性程序的可行区域不是凸的,因为x = 0和x = 1都是可行的,但是没有合适的凸组合是可行的。结果,用线性程序对此模型进行建模是不可能的。
话虽如此,如果您引入一个二进制决策变量y,就很容易对此建模,如果我们在该范围内,则取值为1;如果固定为0,则取值为0。那么您可以对以下内容进行建模:>
y <= x <= 2*y
y binary
或者,在您的一般情况下:
y*CONSTANT_A <= x <= y*CONSTANT_B
y binary