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