【Python】 gurobipy 学习笔记6—— LinExpr、getVars函数

本节是gurobipy学习笔记基础讲解的最后一节,最后再介绍两个函数。

一、LinExpr函数

LinExpr用于构造表达式。

①构建一个空的线性表达式

from gurobipy import *
m = Model()
expr = LinExpr()
print(expr)
输出:

②构建表达式时写入参数 

可以通过一个常数构建一个线性表达式(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本质上就是定义线性表达式,然后可以修改,也可将其添加到约束条件中
输出:


③使用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()获取优化后的变量结果。

你可能感兴趣的:(学习,笔记,python)