You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CVXPY水泵运行优化问题中添加自定义冷却期约束

水泵冷却期约束实现方案

核心逻辑

你的需求本质是带最小停机时间的布尔约束:水泵单次运行后,后续指定周期内不允许再次启动。从你的代码定义可知,selection[:, 1]为1时代表对应周期水泵运行,selection[:, 0]为1代表停机,因此我们可以基于该运行状态变量直接构造约束。

实现步骤

  1. 首先提取水泵运行状态的指示变量,设置可自定义的冷却期参数:
# 提取各周期水泵运行状态:值为1即水泵运行
pump_running = selection[:, 1]
# 自定义冷却周期:运行后需停机2个周期,可按需修改该数值
COOLING_PERIOD = 2
  1. 生成冷却约束:对于每一个运行的周期,后续COOLING_PERIOD个周期的运行状态必须为0
n_periods = cost_.shape[0]
cooling_constraints = []
for i in range(n_periods):
    # 遍历当前周期之后的冷却期
    for offset in range(1, COOLING_PERIOD + 1):
        # 避免超出周期总数边界
        if i + offset < n_periods:
            # 如果当前周期运行,后续冷却期内不能运行,两者和最大为1
            cooling_constraints.append(pump_running[i] + pump_running[i + offset] <= 1)
  1. 将冷却约束加入原有约束列表,该约束为强制生效约束,无论哪种异常分支都需要添加:
    在你原代码的constraints列表生成后,添加如下代码:
constraints.extend(cooling_constraints)

约束有效性说明

由于pump_running是布尔变量,取值只能为0或1,当某周期pump_running[i] = 1时,后续冷却期内的pump_running[i+offset]必须为0才能满足和小于等于1的约束要求,完全匹配你需要的冷却逻辑。如果后续扩展多档位水泵运行模式,只需要将pump_running修改为cp.sum(selection[:, 1:], axis=1)即可兼容多档位判定。


内容的提问来源于stack exchange,提问作者user3154966

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:27:04