用python创建数学规划gurobi模型
配置环境
- 下载安装Gurobi:
- 申请Gurobi许可Gurobi license:
gurobi中国官网:半年的学术许可(老师和学生都可以申请)
gurobi英文官网:1年的学术许可 - 给Python安装gurobi包:
pip install gurobipy- 导入gurobi包:
fromgurobipyimport*# 在Python中调用gurobi求解包importnumpyasnp# 一般会用到numpy库importscipyassp# 也可能用到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 >= 0y=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 <= 8model.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建数学规划模型