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

如何对PuLP二维求解结果按时间步i维度汇总各设备总功耗

报错原因

触发IndexError: list assignment index out of range的核心原因是列表初始化逻辑错误,Python列表不支持对不存在的索引直接赋值:

  • 你初始化的result = [[]]仅包含1个空列表,总长度为1,当外层循环i取1~29时,访问result[i]直接超出列表现有长度
  • 就算i=0时,内层的空列表长度为0,当j取0~87时,访问result[i][j]同样会超出内层列表的长度
  • 额外提一句:你代码里print语句把i、j的值写死成了3,打印的日志完全无法反映实际循环的索引情况,属于额外的逻辑bug。
实现逐时间步总功耗汇总的最优方案

不需要提前构造全量二维结果表再二次求和,直接在遍历变量值的时候按时间步i累加即可,内存占用更低、逻辑更简单,也不会出现索引越界问题:

# 初始化逐时间步总功耗数组,长度和时间步总数一致,初始值为0
total_power_per_timestep = [0.0 for _ in a]

for i in a:
    for j in b:
        # 取变量值,加or 0做兜底,避免求解异常时varValue为None触发计算错误
        power_val = Power_consumption[i][j].varValue or 0.0
        # 累加到对应时间步的总功耗中
        total_power_per_timestep[i] += power_val
        # 调试打印时不要写死i、j,直接取循环变量值
        # print(f"i:{i}, j:{j} = {power_val}")

如果你确实需要留存所有设备逐时间步的功耗明细二维表,要提前按维度初始化列表,不能用[[]]的错误写法:

# 初始化30个时间步 * 88个设备的二维结果数组,初始值为0
result = [[0.0 for _ in b] for _ in a]
for i in a:
    for j in b:
        val = Power_consumption[i][j].varValue or 0.0
        result[i][j] = val

# 逐行求和即可得到每个时间步的总功耗
total_power_per_timestep = [sum(row) for row in result]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:54:15