用python创建数学规划gurobi模型

用python创建数学规划gurobi模型

配置环境

  1. 下载安装Gurobi:
  2. 申请Gurobi许可Gurobi license:
    gurobi中国官网:半年的学术许可(老师和学生都可以申请)
    gurobi英文官网:1年的学术许可
  3. 给Python安装gurobi包:
pip install gurobipy
  1. 导入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建数学规划模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值