线性规划和整数规划是运筹优化的基础工具,Gurobi 是目前最强大的商业求解器之一。本文记录使用 Gurobi Python API 进行基础建模的常用操作。
环境配置
pip install gurobipy
需要学术许可(免费),在 Gurobi 官网注册后获取 license key。
线性规划示例
考虑一个简单的生产计划问题:
$$ \min z = 3x_1 + 2x_2 $$
约束条件:
$$ x_1 + x_2 \geq 10 $$ $$ 2x_1 + x_2 \leq 30 $$ $$ x_1, x_2 \geq 0 $$
使用 Gurobi 求解:
from gurobipy import Model, GRB
# 创建模型
m = Model("production")
# 添加变量
x1 = m.addVar(name="x1", lb=0)
x2 = m.addVar(name="x2", lb=0)
# 设置目标函数
m.setObjective(3*x1 + 2*x2, GRB.MINIMIZE)
# 添加约束
m.addConstr(x1 + x2 >= 10, "c1")
m.addConstr(2*x1 + x2 <= 30, "c2")
# 求解
m.optimize()
# 输出结果
print(f"x1 = {x1.X}, x2 = {x2.X}")
print(f"Optimal value = {m.ObjVal}")
整数规划
当变量必须取整数值时,将变量类型设为 GRB.INTEGER:
x1 = m.addVar(name="x1", lb=0, vtype=GRB.INTEGER)
常用操作
| 操作 | 代码 |
|---|---|
| 设置求解时间限制 | m.setParam("TimeLimit", 60) |
| 设置 MIP Gap | m.setParam("MIPGap", 0.01) |
| 获取求解状态 | m.Status |
| 导出 LP 文件 | m.write("model.lp") |
总结
Gurobi 的 Python API 非常直观,适合快速原型开发。后续笔记会记录更复杂的调度模型和启发式算法对比。