线性规划中的约束逻辑

Constrain logic in Linear programming

我正在尝试为生产单元构建线性优化模型。我有决策变量(二进制变量)X(i)(j),其中 I 是 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 之间的时间段是一个。我可以 运行 12 小时,因为我在第 9 小时后有两个小时的间隔。我如何在线性规划/优化中强制执行此约束?

我认为您正在寻求一种建模方法:“至少连续两个 停机时间”。一个简单的公式是禁止模式:

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) 并排除 101 y(t)。换句话说:

(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。即这种方法是正确的(如果不正确,我的很多模型都会失败)。