在线性规划中表达 OR 约束
Expressing an OR constraint in linear programming
我在线性程序中有一个浮点变量 x
,它应该是 0
或介于两个常量 CONSTANT_A
和 CONSTANT_B
之间:
LP.addConstraint(x == 0 OR CONSTANT_A <= x <= CONSTANT_B)
线性规划中当然没有显式OR
。有没有办法表达这种约束?
所以让我们假设您想要约束:
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
我在线性程序中有一个浮点变量 x
,它应该是 0
或介于两个常量 CONSTANT_A
和 CONSTANT_B
之间:
LP.addConstraint(x == 0 OR CONSTANT_A <= x <= CONSTANT_B)
线性规划中当然没有显式OR
。有没有办法表达这种约束?
所以让我们假设您想要约束:
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