本文以求解整数规划为案例讲解gurobi基本使用逻辑,用作备忘录,也可帮助初学者理解。
有误请于评论区指出,谢谢大家!
整体思路:
- 导入包
- 定义一个模型/问题
- 定义模型变量
- 添加模型约束/边界
- 添加模型目标函数
- 求解输出
导入包:
import gurobipy as grb
定义一个模型:
也就是定义要求解的问题
model = grb.Model()
model 是定义的问题/求解的模型
在模型中添加变量:
x1 = model.addVar(vtype=grb.GRB.INTEGER, name="x1")
x2 = model.addVar(vtype=grb.GRB.INTEGER, name="x2")
vtype 是变量类型
grb.GRB.INTEGER 是整型
name 是变量名称
在模型中添加数学约束:
model.addConstr(2*x1+3*x2 <= 14)
model.addConstr(4*x1+2*x2 <= 18)
model.addConstr(x1 >= 0)
model.addConstr(x2 >= 0)
model.addConstr()括号中就是数学约束,对不等号方向没有限制
在模型中添加目标函数:
model.setObjective(3*x1+2*x2, sense=grb.GRB.MAXIMIZE)
sense=grb.GRB>MAXIMIZE是指要找3*x1+2*x2的最大值
求解输出:
model.setParam('outPutFlag', 0)# 不显示求解日志
model.optimize()
print("目标函数:".model.objVal)
for i in model.getVars():
print("参数", i.varName, "="i.x)
分别print目标函数的结果和x1、x2的取值
完整代码:
import gurobipy as grb
model = grb.Model()
x1 = model.addVar(vtype=grb.GRB.INTEGER, name="x1")
x2 = model.addVar(vtype=grb.GRB.INTEGER, name="x2")
model.addConstr(2*x1+3*x2 <= 14)
model.addConstr(4*x1+2*x2 <= 18)
model.addConstr(x1 >= 0)
model.addConstr(x2 >= 0)
model.setObjective(3*x1+2*x2, sense=grb.GRB>MAXIMIZE)
model.setParam('outPutFlag', 0)# 不显示求解日志
model.optimize()
print("目标函数:", model.objVal)
for i in model.getVars():
print("参数", i.varName, "=", i.x)
案例来源:
【只需要十分钟快速上手gurobi,解决整数规划问题】 https://www.bilibili.com/video/BV1Yc411G7xH/?share_source=copy_web&vd_source=8769f8c9b9f989e262ae8fbd5c03d660