我在目标函数中添加三个表达式时遇到问题。我使用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中编写这个表达式!!
答案 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))