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

如何为Gurobi quicksum()添加条件?代码报错j未定义求解

问题解决:Python代码中"j未定义"错误修复

错误原因

你代码里的quicksum生成器表达式写法存在语法错误:*for j in range(self.noCells) and j!=i*不符合Python生成器的语法规则,and无法将迭代范围和条件正确结合,导致解释器无法识别j的定义,最终抛出"j未定义"的错误。

正确代码实现

将生成器里的条件改为if j != i的形式,放在循环迭代器之后即可解决问题:

# 3.9
for i in range(self.noCells):
    for t in range(self.noHours - 1):
        self.model.addConstr(
            self.alpha * self.SoH[i, t] * self.soc[i, t] +
            quicksum(self.gcrPower[l] * self.g[i, t, l] for l in range(self.noL)) / self.noCells +
            quicksum(self.solPower[m] * self.r[i, t, m] for m in range(self.noM)) / self.noCells -
            quicksum(self.dcrPower[n] * self.d[i, t, n] for n in range(self.noN)) / self.noCells +
            quicksum(self.b_plus[j, i, t] for j in range(self.noCells) if j != i) -
            quicksum(self.b_minus[i, j, t] for j in range(self.noCells) if j != i) -
            self.SoH[i, t+1] * self.soc[i, t+1] == 0
        )

说明

Python生成器表达式中,过滤迭代元素的条件需要用if子句放在循环语句末尾,而非用and连接范围与条件。修改后代码会正确遍历所有满足j≠i的单元格索引,同时避免变量未定义的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:07:07