TypeError: unsupported operand type(s) for +: 'generator' and 'generator'
TypeError: unsupported operand type(s) for +: 'generator' and 'generator'
我在 objective 函数中添加三个表达式时遇到问题。我使用 quicksum
来构建每个表达式。但是,当我尝试将它们加在一起时,我收到一个错误,我无法在 class 'generator'.
上使用 +/- 操作数
这是我的代码的最后一部分:
# 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)
更新:
这是我试图解决的实际问题:
Objective Function
问题是我不知道如何在 Gurobi 中写这个表达式 Python!!
(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>
有关详细信息,请参阅 docs。
您似乎在尝试将给定列表中的单个项目传递给 quicksum
,但您却无意中创建了生成器。
要修复此错误,请直接将对象传递给 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))
我在 objective 函数中添加三个表达式时遇到问题。我使用 quicksum
来构建每个表达式。但是,当我尝试将它们加在一起时,我收到一个错误,我无法在 class 'generator'.
这是我的代码的最后一部分:
# 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)
更新:
这是我试图解决的实际问题: Objective Function 问题是我不知道如何在 Gurobi 中写这个表达式 Python!!
(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>
有关详细信息,请参阅 docs。
您似乎在尝试将给定列表中的单个项目传递给 quicksum
,但您却无意中创建了生成器。
要修复此错误,请直接将对象传递给 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))