TypeError:+不支持的操作数类型:“ generator”和“ generator” [英] TypeError: unsupported operand type(s) for +: 'generator' and 'generator'
问题描述
我在目标函数中添加三个表达式时遇到问题。我使用 quicksum
构建每个表达式。但是,当我尝试将它们加在一起时,出现一个错误,我无法在类'generator'上使用+/-操作数。
I have a problem with adding three expressions in my objective function. I used quicksum
to build each expression. However, when I try to add them together I get an error that I cannot use +/- operands on class 'generator'.
这是我代码的最后一部分:
Here is the last part of my code:
# the shipping cost expression
expr_sc = []
for j in J:
for k in K:
expr_sc.append(quicksum(r_jk[(j, k)]*x[(i, j, k)]) for i in I)
m.setObjective((quicksum(item_rev) for item_rev in expr_rev) -
((quicksum(item_pc) for item_pc in expr_pc) + (quicksum(item_sc) for item_sc in expr_sc)),
GRB.MAXIMIZE)
更新:
此处为实际值我要解决的问题:
目标函数
问题是我不知道如何在Gurobi Python中编写该表达式!
Update:
here is the actual problem that I am trying to solve: Objective Function The problem is I don't know how to write this expression in Gurobi Python!!
推荐答案
( expr_rev中item_rev的quicksum(item_rev)
计算为生成器expre ssion。
(quicksum(item_rev) for item_rev in expr_rev)
evaluates to a generator expression.
如果 for
循环的一行位于括号内-(...)
-您将获得一个生成器对象。这是一个小例子,说明我的意思:
If the one line for
loop is inside the parenthesis - (...)
- you get a generator object. Here's a small example to illustrate what I mean:
>>> (x for x in range(5)) # shorthand for creating generators
<generator object <genexpr> at 0xb74308ec>
请参见文档了解更多信息。
似乎您正在尝试将给定列表中的单个项目传递给 quicksum
,但您是无意中创建了生成器。
It seems you're trying to pass individual items from given lists to quicksum
, but instead you're creating generators, unintentionally.
要解决此错误,请将对象直接传递到 quicksum
:
To fix this error, directly pass the objects to quicksum
:
m.setObjective(
quicksum(expr_rev) - (quicksum(expr_pc) + quicksum(expr_sc)),
GRB.MAXIMIZE
)
更新:
似乎也有问题在
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))
这篇关于TypeError:+不支持的操作数类型:“ generator”和“ generator”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!