繁体   English   中英

线性编程中的约束逻辑

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM