用python创建数学规划gurobi模型
配置环境
- 下载安装Gurobi:
- 申请Gurobi许可Gurobi license:
gurobi中国官网:半年的学术许可(老师和学生都可以申请)
gurobi英文官网:1年的学术许可 - 给Python安装gurobi包:
pip install gurobipy
- 导入gurobi包:
from gurobipy import * # 在Python中调用gurobi求解包
import numpy as np # 一般会用到numpy库
import scipy as sp # 也可能用到scipy库
下面以线性规划模型为例介用python创建数学规划gurobi模型的两种方式
例子:
目标函数Objective:
Maximize 3x + 4y
约束Constraints:
x + 2y <= 8
3x + y <= 6
x >= 0, y >= 0
方法一:直接用数学表达式创建目标函数和约束
# 创建一个新的gurobi模型
model = Model("模型名字")
# 定义变量
# name: 变量名字
# vtype: 变量的数据类型
# Gurobi中常用的变量类型
# GRB.CONTINUOUS——连续变量(Gurobi默认变量类型,可以省略)
# GRB.BINARY——二进制变量(0-1)
# GRB.INTEGER——整数变量
# lb: 变量下界
# ub: 变量上界
x = model.addVar(name="x", vtype=GRB.CONTINUOUS, lb=0) # x >= 0
y = model.addVar(name="y", vtype=GRB.CONTINUOUS, lb=0) # y >= 0
# 设置目标函数
# GRB.MINIMIZE最小化
# GRB.MAXIMIZE最大化
model.setObjective(3 * x + 4 * y, GRB.MAXIMIZE)
# 添加约束
model.addConstr(x + 2 * y <= 8, "Constraint1") # x + 2y <= 8
model.addConstr(3 * x + y <= 6, "Constraint2") # 3x + y <= 6
# 求解
model.optimize()
# 结果
# 求解器求得的解:x.X和y.X
# 求解器求得的目标函数值:model.objVal
方法二:用矩阵和数组的形式创建目标函数和约束
# 创建一个新的gurobi模型
model = Model("模型名字")
# 定义变量
# name: 变量名字
# vtype: 变量的数据类型
# Gurobi中常用的变量类型
# GRB.CONTINUOUS——连续变量(Gurobi默认变量类型,可以省略)
# GRB.BINARY——二进制变量(0-1)
# GRB.INTEGER——整数变量
# lb: 变量下界
# ub: 变量上界
x = model.addMVar((2,), lb=[0, 0], vtype=[GRB.CONTINUOUS,GRB.CONTINUOUS])
# 设定目标函数
model.setMObjective(None, np.array([3, 4]), 0.0, None, None, None, GRB.MAXIMIZE)
# 添加约束
# 约束的左端项系数矩阵
A = np.array([
[1, 2], # x + 2y <= 8
[3, 1], # 3x + y <= 6
])
# 约束的右端项向量
b = np.array([8, 6])
model.addConstr(A @ x <= b, name="inequalities")
# 求解
model.optimize()
# 结果
# 求解器求得的解:x.X和y.X
# 求解器求得的目标函数值:model.objVal
以上只是简单的代码介绍,模型的详细讲解请参考Gurobi——用python建数学规划模型