MIP / LP - 建模“如果b = 1则x = y”约束

时间:2017-10-27 13:26:34

标签: constraints mathematical-optimization linear-programming mixed-integer-programming

我有一个混合整数编程(MIP)问题,目前在Python的PuLP库中建模。然而,我的问题非常通用,语法在这里不起作用。

我想为我的模型添加一个约束:

if b=1 then x=y

变量b是一个二进制变量,取值为0或1. xy是表示当前库存水平的变量。 x作为连续变量,y作为整数变量。

我知道约束只能用以下格式建模:

a*x+c <= y    # a, c are constants, x, y variables

我希望有一些解决方法可以模拟上述if b then x equals y约束。

到目前为止,这是我的方法:

b*y <= x
y >= x*b   # works in theory, but multiplication of 2 variables is not allowed

对于2个二进制变量x和y,以下情况属实:

M*y > x    # represents: if x then y (M is a sufficient large constant)

我想这个解决方案涉及一个很大的M常数,甚至可能是更多的辅助变量。

一点背景:我想建立一个库存问题,连续库存水平。但是,订单决策只能以整数形式进行。因此,我需要用浮点数建模库存水平。在顺序点(b == 1)但是在整数。

我希望有人可以在这里提供帮助,即使这是相当理论而不是直接编码相关的。提供更多可能有用的资源的提示也受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

b=1 => x=y

可以建模为:

y-M(1-b) <= x <= y+M(1-b)