只要循环运行,我想将线性表达式的先前值添加到当前值。目前它只是将当前值加两次。 1.为了达到这个目的,我应该在代码中做些什么改变? 2.是否有任何内置函数可以在线性表达式中添加/乘以所有先前的值?
它给出的输出是
<gurobi.LinExpr: y_1 + y_1>
<gurobi.LinExpr: y_2 + y_2>
虽然我想要它给予
<gurobi.LinExpr: y_2 + y_1>
以下是我的代码。
from gurobipy import LinExpr , GRB, Model
model= Model()
Vars = dict()
def creatingvarriables():
for t in range(1,3,1):
Vars["y_" + str(t)] = model.addVar(vtype=GRB.BINARY,name="y_" + str(t))
lhs = Vars["y_" + str(t)]
lhs = LinExpr(1,Vars["y_" + str(t)])
model.update()
z = lhs.add(lhs)
print lhs
creatingvarriables()
答案 0 :(得分:0)
你的lhs变量会在每个循环中被覆盖,这就是你在打印之前最终将它添加到自身的原因。使用另一个变量来存储要在每个循环中添加的LinExpr。
此外,Gurobi可以通过将列表(或多个)传递给.addVars方法来生成多个变量,如下所示:
times = range(1, 3, 1)
Vars = model.addVars(times, vtype=GRB.BINARY, name="y_")
这为您提供了生成tupledict对象的优势,可以在约束或目标函数中非常优雅地使用它。
您可以使用gurobi&#39; quicksum功能,而不是明确编写LinExpr:
lhs = quicksum(Vars[t] for t in times)
甚至更短:
lhs = Vars.sum()
可以找到关于tupledict的.sum()方法的文档here。