本节是gurobipy学习笔记基础讲解的最后一节,最后再介绍两个函数。
一、LinExpr函数
LinExpr用于构造表达式。
①构建一个空的线性表达式
from gurobipy import *
m = Model()
expr = LinExpr()
print(expr)
输出:
<gurobi.LinExpr: 0.0>
②构建表达式时写入参数
可以通过一个常数构建一个线性表达式(LinExpr(2.0))、一个变量创建一个(LinExpr(x))、一个表达式(LinExpr(2*x)),也可以通过一对包含系数和变量的列表addTerms(coeffs,vars),例如(LinExpr[1.0,2.0],[x,y]),或者一个参数-变量 tuples(LinExpr[(1.0,x),(2.0,y),(1.0,z)])
m = Model()
x = m.addVar(name="x")
y = m.addVar(name="y")
z = m.addVar(name="z")
expr1 = LinExpr(2*y)
expr2 = LinExpr([5,6,9],[x,y,z])
m.addConstr(expr1>=9,name="cn")
m.addConstr(expr2<=6,name="cm")
m.update()
print(expr1)
print(expr2)
m.write("LinExpr_practice.lp")
#LinExpr本质上就是定义线性表达式,然后可以修改,也可将其添加到约束条件中
输出:
<gurobi.LinExpr: 2.0 y>
<gurobi.LinExpr: 5.0 x + 6.0 y + 9.0 z>
③使用LinExpr完整的优化过程演示
from gurobipy import *
m = Model()
x = m.addVar(vtype=GRB.BINARY,name="x")
y = m.addVar(vtype=GRB.BINARY,name="y")
z = m.addVar(vtype=GRB.BINARY,name="z")
m.setObjective(x + y + 2 * z, GRB.MAXIMIZE)
expr1 = LinExpr(2*y)
expr2 = LinExpr([5,6,9],[x,y,z])
m.addConstr(expr1<=9,name="cn")
m.addConstr(expr2<=6,name="cm")
m.update()
m.write("LinExpr_practice.lp")
m.optimize()
#获取模型优化结果
for v in m.getVars():
print(v.varName, v.x)
print("obj:%g" % m.objval)#目标值
m.write("LinExpr_practice.lp")
输出:
x 1.0
y 0.0
z 0.0
obj:1
这段代码中还涉及到了,在模型构建完毕,优化完毕后,可以通过Model.getVars()获取优化后的变量结果。