PuLP 中文导航¶
原文: PuLP - Linear Programming in Python
分类: 运筹优化
大小: 29 MB
语言: Python
📚 仓库简介¶
PuLP 是一个用 Python 编写的线性规划建模库,可以方便地定义和求解线性规划 (LP) 和整数规划 (MIP) 问题。它支持多种求解器后端,包括 CBC (默认)、GLPK、CPLEX、Gurobi 等。
GitHub: https://github.com/coin-or/pulp
🔧 核心功能¶
| 功能 | 描述 | 特点 |
|---|---|---|
| 线性规划建模 | Pythonic 的建模语法 | 简洁易读 |
| 整数规划 | 支持 0-1 和整数变量 | 组合优化 |
| 多求解器支持 | CBC/GLPK/CPLEX/Gurobi | 灵活选择 |
| 问题导入 | 支持 MPS/LP 格式 | 兼容标准格式 |
| 求解器链 | 自动尝试多个求解器 | 提高成功率 |
📁 目录结构¶
pulp/
├── examples/ # 示例代码
│ ├── test1.py # 简单示例
│ ├── test2.py # 整数规划
│ ├── test3.py # 运输问题
│ └── ... # 更多示例
├── pulp/ # 核心库
│ ├── apis/ # 求解器接口
│ ├── constants.py # 常量定义
│ ├── pulp.py # 主模块
│ └── sparse.py # 稀疏矩阵
├── tests/ # 测试用例
├── requirements.txt # 依赖
└── README.md # 主文档
🚀 快速开始¶
安装¶
第一个示例:简单线性规划¶
import pulp
# 创建问题
prob = pulp.LpProblem("生产优化", pulp.LpMaximize)
# 创建决策变量
x = pulp.LpVariable('产品 A', lowBound=0, cat='Continuous')
y = pulp.LpVariable('产品 B', lowBound=0, cat='Continuous')
# 目标函数:最大化利润
prob += 3*x + 2*y, "总利润"
# 约束条件
prob += x + 2*y <= 14, "资源 1 限制"
prob += 3*x - y >= 0, "技术要求"
prob += x - y <= 2, "市场约束"
# 求解
prob.solve()
# 输出结果
print(f"状态:{pulp.LpStatus[prob.status]}")
print(f"生产产品 A: {x.var_value}")
print(f"生产产品 B: {y.var_value}")
print(f"最大利润:{pulp.value(prob.objective)}")
整数规划示例¶
import pulp
# 0-1 整数规划
prob = pulp.LpProblem("背包问题", pulp.LpMaximize)
# 决策变量:是否选择物品 i
items = ['A', 'B', 'C', 'D']
values = [10, 20, 30, 40] # 价值
weights = [2, 3, 5, 7] # 重量
capacity = 8 # 容量限制
x = pulp.LpVariable.dicts('选择', items, cat='Binary')
# 目标:最大化总价值
prob += pulp.lpSum([values[i]*x[items[i]] for i in range(len(items))])
# 约束:总重量不超过容量
prob += pulp.lpSum([weights[i]*x[items[i]] for i in range(len(items))]) <= capacity
prob.solve()
print("选择的物品:")
for item in items:
if pulp.value(x[item]) > 0.5:
print(f" - {item}")
运行示例¶
📖 关键文档¶
| 文档 | 链接 | 说明 |
|---|---|---|
| 官方文档 | pythonhosted.org/PuLP | 完整 API |
| 示例代码 | examples/ | 50+ 示例 |
| 求解器指南 | docs/solvers.md | 求解器配置 |
💡 典型应用场景¶
1. 生产计划¶
2. 运输问题¶
3. 排班问题¶
4. 投资组合¶
🎓 学习路径¶
1. 线性规划基础 → examples/test1.py
2. 整数规划入门 → examples/test2.py
3. 运输问题 → examples/test3.py
4. 实际项目 → 参考 docs/ 中的案例
📊 求解器对比¶
| 求解器 | 类型 | 速度 | 适用问题 | PuLP 支持 |
|---|---|---|---|---|
| CBC | 开源 | 中等 | MIP | ✅ 默认 |
| GLPK | 开源 | 较慢 | LP/MIP | ✅ 支持 |
| CPLEX | 商业 | 很快 | LP/MIP/QP | ✅ 支持 |
| Gurobi | 商业 | 最快 | LP/MIP/QP | ✅ 支持 |
| SCIP | 学术 | 快 | MIP | ✅ 支持 |
🔗 相关资源¶
🛠️ 常见问题¶
Q1: 如何安装商业求解器?¶
Q2: 如何选择求解器?¶
# 使用 Gurobi
prob.solve(pulp.GUROBI())
# 使用 CPLEX
prob.solve(pulp.CPLEX())
# 使用 CBC (默认)
prob.solve()
Q3: 如何处理大规模问题?¶
- 使用商业求解器 (Gurobi/CPLEX)
- 利用问题结构 (分解、启发式)
- 增加计算资源 (并行、分布式)
本地路径: /workspace/code-examples/pulp/
创建时间: 2026-06-01
难度: ⭐⭐ (入门级)
**PuLP 中文导航 | 线性规划建模利器**
[返回代码索引](../../README_UPDATED.md) | [决策科学资源](../../docs/resources/decision-science-comprehensive-resources.md)