首页 > 解决方案 > 生成器表达式必须在约束上加括号

问题描述

我正在尝试写:

f = model.addConstr(E["1","5"] <= x["1"] for i in I, name="f")通过在“5”上使用 for 循环。

所以我写了以下内容,其中 I 的值为 I=["1","5","4", "9","6","8","2","3","7"]

f = model.addConstr(E["1",i] <= x["1"] for i in I, name="f")

但是我不断收到错误 SyntaxError: Generator expression must be parenthesized,我不知道为什么。

另外,我正在尝试添加 if 语句,因此当 E["1","1"] 它将为零。我试着写:

f = model.addConstr(E["1",i] <= x["1"] for i in I if i != "1", name="f") 但当然它不起作用

但是在编写约束之前,我也在尝试以下方法:

for i in I:
    if i == "1":
        E[i,i]=0

如果有人可以提供一些指导,我将不胜感激。谢谢!

标签: pythongurobi

解决方案


您的表达式E["1",i] <= x["1"] for i in I if i != "1"采用列表或生成器理解的形式,但没有列表或生成器的[]包装()。尝试:

f = model.addConstr([E["1","5"] <= x["1"] for i in I], name="f")

或者

f = model.addConstr((E["1","5"] <= x["1"] for i in I), name="f")

推荐阅读