TypeError:+:'generator'和'generator'的不支持的操作数类型

时间:2017-09-28 18:37:21

标签: python class gurobi

我在目标函数中添加三个表达式时遇到问题。我使用quicksum来构建每个表达式。但是,当我尝试将它们添加到一起时,我得到一个错误,我不能在类'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中编写这个表达式!!

1 个答案:

答案 0 :(得分:1)

(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))