← 返回博客首页

Gurobi 基础建模入门笔记

2025-12-15 · 预计阅读 10 分钟 运筹优化

线性规划和整数规划是运筹优化的基础工具,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 非常直观,适合快速原型开发。后续笔记会记录更复杂的调度模型和启发式算法对比。