TypeError:+不支持的操作数类型:“ generator”和“ generator” [英] TypeError: unsupported operand type(s) for +: 'generator' and 'generator'

查看:231
本文介绍了TypeError:+不支持的操作数类型:“ generator”和“ 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆