如何为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
相关产品推荐
相关产品推荐

