如果容量也经过优化并且存在最小功率,如何在 MILP 中实现关闭、启动、上升和下降
How to implement shutdown, start-up, ramp-up and ramp-down in a MILP if capacity is optimized as well and minimum power exists
我目前正在尝试解决混合整数线性问题。我有一个组件,我想优化其容量和操作。该组件的操作下限为 p_low。优化可以 运行 其上限(容量)之间的组件或 p_low,但它也应该能够关闭组件。
问题从这里开始:我不知道如何实现这两种可能性,因为关机会违反最小功率限制。
我考虑过使用二进制变量进行决策 (b_status),但我对组件的容量有疑问,因为它也经过优化并将容量变量与二进制变量结合在一起:
p >= p_low * 容量 * b_status -> 如果 b_status 为 0 -> p >= 0;否则:p >= p_low * 容量
... 会导致非线性问题,因为容量和 b_status 的组合在线性模型(两个变量)中是不允许的。
有人知道实现这个的方法吗?我知道这不是这里的主要话题,但可能值得一试。
你快到了...
你是对的,你需要 2 个变量来为这个设备建模。让:
x_on = {0, 1} a binary variable to indicate whether system is on/off
x_load = {x: x >= 0 } a continuous, non-negative variable to indicate the current load
然后您需要创造性地使用 x_on
作为 指标变量 在约束范围内将 x_load 设置为零或在低-高之间限制...
High constraint: x_load <= x_on * high_limit
Low constraint: x_load >= x_on * low_limit
那些是线性的。插入一些值以确保您相信它们。 :).据推测,您正在模型中的某处最小化 x_load
,这将完成它。
=================
编辑可变容量
我误解了你的问题。根据您的评论,我认为您又走上了正确的轨道,使用大 M 约束可以做到这一点。
除了上面的变量x_on
和x_load
让
C = {x : x >=0} a continuous non-negative variable to represent the capacity of the machine
M = any reasonable upper bound on C
你有一个可行的下限解决方案。通过对 high 使用 2 个约束(总共 3 个约束),您还可以将 big-M 用于 high
Low: x_load >= low_lim * C - M * (1 - x_on)
High: x_load <= C
Off: x_load <= M * x_on
我目前正在尝试解决混合整数线性问题。我有一个组件,我想优化其容量和操作。该组件的操作下限为 p_low。优化可以 运行 其上限(容量)之间的组件或 p_low,但它也应该能够关闭组件。
问题从这里开始:我不知道如何实现这两种可能性,因为关机会违反最小功率限制。
我考虑过使用二进制变量进行决策 (b_status),但我对组件的容量有疑问,因为它也经过优化并将容量变量与二进制变量结合在一起:
p >= p_low * 容量 * b_status -> 如果 b_status 为 0 -> p >= 0;否则:p >= p_low * 容量
... 会导致非线性问题,因为容量和 b_status 的组合在线性模型(两个变量)中是不允许的。
有人知道实现这个的方法吗?我知道这不是这里的主要话题,但可能值得一试。
你快到了...
你是对的,你需要 2 个变量来为这个设备建模。让:
x_on = {0, 1} a binary variable to indicate whether system is on/off
x_load = {x: x >= 0 } a continuous, non-negative variable to indicate the current load
然后您需要创造性地使用 x_on
作为 指标变量 在约束范围内将 x_load 设置为零或在低-高之间限制...
High constraint: x_load <= x_on * high_limit
Low constraint: x_load >= x_on * low_limit
那些是线性的。插入一些值以确保您相信它们。 :).据推测,您正在模型中的某处最小化 x_load
,这将完成它。
================= 编辑可变容量
我误解了你的问题。根据您的评论,我认为您又走上了正确的轨道,使用大 M 约束可以做到这一点。
除了上面的变量x_on
和x_load
让
C = {x : x >=0} a continuous non-negative variable to represent the capacity of the machine
M = any reasonable upper bound on C
你有一个可行的下限解决方案。通过对 high 使用 2 个约束(总共 3 个约束),您还可以将 big-M 用于 high
Low: x_load >= low_lim * C - M * (1 - x_on)
High: x_load <= C
Off: x_load <= M * x_on