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

本节是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()获取优化后的变量结果。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值