(quicksum(item_rev) for item_rev in expr_rev)
计算结果为生成器表达式。
如果一行for
循环位于括号内 -(...)
- 你得到一个生成器对象。这是一个小例子来说明我的意思:
>>> (x for x in range(5)) # shorthand for creating generators
<generator object <genexpr> at 0xb74308ec>
See docs https://docs.python.org/3/howto/functional.html?highlight=generator%20express#generator-expressions-and-list-comprehensions了解更多信息。
看来您正在尝试将给定列表中的单个项目传递给quicksum
,但是您却无意中创建了生成器。
要修复此错误,请直接将对象传递给quicksum
:
m.setObjective(
quicksum(expr_rev) - (quicksum(expr_pc) + quicksum(expr_sc)),
GRB.MAXIMIZE
)
UPDATE:
似乎也有一个问题
expr_sc.append(quicksum(r_jk[(j, k)]*x[(i, j, k)]) for i in I)
像这样更改该行:
expr_sc.append(quicksum(r_jk[(j, k)] * x[(i, j, k)] for i in I))