线性规划中的约束逻辑
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。即这种方法是正确的(如果不正确,我的很多模型都会失败)。
我正在尝试为生产单元构建线性优化模型。我有决策变量(二进制变量)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。即这种方法是正确的(如果不正确,我的很多模型都会失败)。