[英]Constrain logic in Linear programming
我正在尝试为生产单元构建线性优化模型。 我有决策变量(二进制变量)X(i)(j),其中我是J天的小时。 我需要引入的限制是对停机时间的限制(在两次启动之间必须关闭生产单元的最短时间)。
例如:
Hours: 1 2 3 4 5 6 7 8 9 10 11 12
On/off: 0 1 0 1 1 0 1 1 1 0 0 1
我无法运行4或7小时,因为2到4/5到7之间的时间段是一个小时。 我可以在小时9之后有两个小时的间隔,因此可以运行12小时。如何在线性编程/优化中强制执行此约束?
我认为您正在寻找一种建模的方式:“ 至少连续两个停机时间 ”。 一个简单的公式就是禁止这种模式:
t t+1 t+2
1 0 1
这可以写成线性不等式:
x(t) - x(t+1) + x(t+2) <= 1
一种说服自己正确的方法是仅列举模式:
x(t) x(t+1) x(t+2) LHS
0 0 0 0
0 0 1 1
0 1 0 -1
0 1 1 0
1 0 0 1
1 0 1 2 <--- to be excluded
1 1 0 0
1 1 1 1
当x(t) - x(t+1) + x(t+2) <= 1
我们完全排除了模式101
但允许所有其他模式。
同样,可以通过排除模式来处理“ 至少两个连续的正常运行时间 ”
t t+1 t+2
0 1 0
要么
-x(t) + x(t+1) - x(t+2) <= 0
注意:从第一个约束推导第二个的一种方法是观察到禁止模式010
与说y(t)=1-x(t)
并且就y(t)
排除了101
。 换一种说法:
(1-x(t)) - (1-x(t+1)) + (1-x(t+2)) <= 1
这等同于
-x(t) + x(t+1) - x(t+2) <= 0
在评论中认为该方法无效。 这是基于对该方法的重大误解。 不允许使用模式100(即x(1)=1,x(2)=0,x(3)=0
),因为
-x(0)+x(1)-x(2) <= 0
其中x(0)
是我们开始计划阶段之前的状态。 这是历史数据。 如果x(0)=0
,则x(1)-x(2)<=0
,不允许10。即该方法正确(如果不正确,很多模型将失败)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.