【问题标题】:Constrain logic in Linear programming线性规划中的约束逻辑
【发布时间】:2019-03-12 17:15:51
【问题描述】:

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

【问题讨论】:

    标签: python optimization linear-programming pulp stochastic


    【解决方案1】:

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

    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) &lt;= 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
    

    在 cmets 中,有人认为这种方法不起作用。这是基于对这种方法的严重误解。不允许使用模式 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)&lt;=0,则不允许10。即这种方法是正确的(如果不是,我的很多模型都会失败)。

    【讨论】:

    • 谢谢。这有帮助。只是查询的扩展,很想知道您如何对“至少两个连续的跑步周期”进行建模?
    • 这可以用非常相似的方式建模。
    • 很好的解释。我认为这个答案应该被接受。也许第一个不等式背后的直觉从x(t) + (1 - x(t+1)) + x(t+2) &lt;= 2(不是全部三个)开始更清晰,然后简化为x(t) - x(t+1) + x(t+2) &lt;= 1?
    • @ErwinKalvelagen,正常运行时间的给定逻辑在 3 个状态下失败。 1 0 0, 0 0 1 and 1 0 1 在所有这些情况下 LHS 是 &lt;=0,但它们没有 两个连续的正常运行时间。
    • 边界的东西。这取决于 x(0) 和 x(T+1) 处的状态。这些情况需要相应处理。
    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多