如何将线性表达式与常数相乘?我已经编写了代码,但它总是返回0.0
。在
在用线性表达式乘以常数时需要帮助。在
from gurobipy import LinExpr , GRB, Model, quicksum
TimePeriod = [1]
model = Model()
Vars = dict()
def creatingvarriables():
for t in TimePeriod:
Vars["y_" + str(t)] = model.addVar(vtype=GRB.BINARY,name="y_" + str(t))
lhs = Vars["y_" + str(t)]
lhs = LinExpr()
model.update()
#expr1 = LinExpr(2.0*x)
expr = LinExpr(2.0)
model.update()
#print lhs
#print type(lhs1)
Vars["y_" + str(t)] = lhs*expr
model.update()
#print lhs
#print lhs1
#print (Vars["y_"+ str(t)]*expr)
print (Vars["y_"+ str(t)])
creatingvarriables()
DR—这不是gurobi的使用方式,请参阅底部的代码示例
我们先看看代码行-
^{pr2}$model.addVar
方法添加了一个名为y_1的新变量,该变量存储在字典Vars
中。在这将创建一个新的(python)变量
lhs
,并将其指向之前创建的gurobi变量(y\u0)。请注意,由于您还没有调用model.update()
,所以此时不能在任何表达式中使用y_1。在我假设您想要创建线性表达式
1*y_1 + 0
,但是这行不能做到。在LinExpr()
创建一个新的空线性表达式,相当于0*y_1 + 0
。这是因为您没有为LinExpr对象的构造函数(构造函数here的文档)提供任何参数,因此gurobi不知道您想要哪个表达式,并且默认为零。在相反,您可以调用
LinExp(lhs)
,这将创建所需的表达式。然后,可以通过键入lhs = 2 * lhs
将其乘以2,甚至可以直接使用LinExp([2], [Vars["y_" + str(t)]])
创建结束表达式——这里第一个参数是一个系数列表,第二个参数是gurobi变量列表。在但是,gurobi有一个非常方便的语法来创建表达式(使用operator overloading),因此您通常不应该自己显式调用LinExpr的构造函数,而是直接在数学表达式中使用gurobi变量。在
这里有一个简单的工作代码-
哪个指纹
相关问题 更多 >
编程相关推荐