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

Python Gurobi中使用quicksum实现累加约束的写法问题咨询

你原代码的错误在于gp.quicksum(Git[i,t])仅传入了当期t对应的G参数,没有实现从首个时间点到当前t的前缀累加,正确实现可以参考两种方案:

方案1:直接实时计算前缀和(适合小规模问题)

需要确保time_shifts是按时间升序排列的有序序列,直接在约束中遍历当前时间点之前的所有时间步累加:

con3 = m.addConstrs(
    (wit[i,t] <= gp.quicksum(Git[i, k] for k in time_shifts[:time_shifts.index(t)+1])
    for i in NC for t in time_shifts),
    name="con3"
)

其中time_shifts.index(t)会获取当前时间t在时间序列中的索引,切片[:索引+1]就覆盖了从首个时间点到当前t的所有时间步,完成前缀累加。

方案2:预计算前缀和(适合中大规模问题,性能更优)

提前算好每个i、每个t对应的前缀G值,避免约束添加过程中重复计算索引和遍历时间序列,效率更高:

# 预计算前缀和字典
prefix_G = {}
for i in NC:
    current_cum = 0
    for t in time_shifts:
        current_cum += Git[(i, t)]
        prefix_G[(i, t)] = current_cum

# 直接用预计算的前缀和添加约束
con3 = m.addConstrs(
    (wit[i,t] <= prefix_G[(i,t)] for i in NC for t in time_shifts),
    name="con3"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:18:04