Pyomo 中文导航¶
原文: Pyomo Optimization Modeling Language
分类: 运筹优化
大小: 74 MB
语言: Python
📚 仓库简介¶
Pyomo 是 Python 优化建模语言,支持定义线性规划、整数规划、非线性规划和混合整数非线性规划问题。它提供了强大的建模能力,可以表达复杂的优化模型,并支持多种求解器。
GitHub: https://github.com/Pyomo/pyomo
🔧 核心功能¶
| 功能 | 描述 | 特点 |
|---|---|---|
| 代数建模 | 类似数学表达式的建模语法 | 直观易读 |
| 非线性规划 | 支持非线性目标函数和约束 | 复杂问题建模 |
| 混合整数规划 | 支持连续和整数变量混合 | 实际应用广泛 |
| 动态优化 | 微分代数方程优化 | 控制系统应用 |
| 多求解器支持 | 50+ 求解器接口 | 灵活选择 |
| 分布式求解 | 支持并行和分布式计算 | 大规模问题 |
📁 目录结构¶
pyomo/
├── examples/ # 示例代码
│ ├── mip/ # 混合整数规划
│ ├── nlp/ # 非线性规划
│ ├── dae/ # 微分代数方程
│ ├── pyomo/ # Pyomo 基础
│ └── mpec/ # 均衡约束规划
├── pyomo/ # 核心库
│ ├── core/ # 核心功能
│ ├── environ/ # 环境配置
│ ├── common/ # 通用工具
│ ├── repn/ # 表达式表示
│ └── solver/ # 求解器接口
├── doc/ # 文档
├── tests/ # 测试用例
└── README.md # 主文档
🚀 快速开始¶
安装¶
# 基础安装
pip install pyomo
# 安装求解器 (推荐 GLPK 或 CBC)
# GLPK: sudo apt-get install glpk-utils
# CBC: sudo apt-get install coinor-cbc
# 验证安装
python -c "import pyomo; print('Pyomo 安装成功')"
第一个示例:简单线性规划¶
from pyomo.environ import *
# 创建模型
model = ConcreteModel()
# 创建变量
model.x = Var(bounds=(0, None))
model.y = Var(bounds=(0, None))
# 目标函数:最大化 3x + 2y
model.obj = Objective(expr=3*model.x + 2*model.y, sense=maximize)
# 约束条件
model.con1 = Constraint(expr=model.x + 2*model.y <= 14)
model.con2 = Constraint(expr=3*model.x - model.y >= 0)
model.con3 = Constraint(expr=model.x - model.y <= 2)
# 求解
solver = SolverFactory('glpk')
results = solver.solve(model)
# 输出结果
print(f"x = {model.x.value}")
print(f"y = {model.y.value}")
print(f"目标值 = {model.obj()}")
混合整数规划示例¶
from pyomo.environ import *
# 创建模型
model = ConcreteModel()
# 创建集合
model.ITEMS = Set(initialize=['A', 'B', 'C', 'D'])
# 数据
values = {'A': 10, 'B': 20, 'C': 30, 'D': 40}
weights = {'A': 2, 'B': 3, 'C': 5, 'D': 7}
capacity = 8
# 0-1 决策变量
model.x = Var(model.ITEMS, within=Binary)
# 目标:最大化总价值
model.obj = Objective(
expr=sum(values[i]*model.x[i] for i in model.ITEMS),
sense=maximize
)
# 约束:总重量限制
model.weight_con = Constraint(
expr=sum(weights[i]*model.x[i] for i in model.ITEMS) <= capacity
)
# 求解
solver = SolverFactory('glpk')
results = solver.solve(model)
# 输出结果
print("选择的物品:")
for i in model.ITEMS:
if model.x[i].value > 0.5:
print(f" - {i} (价值={values[i]})")
非线性规划示例¶
from pyomo.environ import *
import math
# 创建模型
model = ConcreteModel()
# 变量
model.x = Var(initialize=1.0)
model.y = Var(initialize=1.0)
# 非线性目标:最小化 (x-1)^2 + (y-2.5)^2
model.obj = Objective(
expr=(model.x-1)**2 + (model.y-2.5)**2,
sense=minimize
)
# 非线性约束
model.con1 = Constraint(expr=model.x**2 - model.y <= 0)
model.con2 = Constraint(expr=model.x + model.y <= 5)
# 求解 (需要 IPOPT 求解器)
solver = SolverFactory('ipopt')
results = solver.solve(model)
print(f"x = {model.x.value}")
print(f"y = {model.y.value}")
运行示例¶
📖 关键文档¶
| 文档 | 链接 | 说明 |
|---|---|---|
| 官方文档 | pyomo.readthedocs.io | 完整教程 |
| 示例集合 | examples/ | 100+ 示例 |
| 求解器列表 | supported_solvers.html | 支持的求解器 |
💡 典型应用场景¶
1. 化工过程优化¶
2. 电力系统调度¶
3. 供应链优化¶
4. 金融工程¶
🎓 学习路径¶
1. Pyomo 基础 → examples/pyomo/
2. 线性/整数规划 → examples/mip/
3. 非线性规划 → examples/nlp/
4. 动态优化 → examples/dae/
5. 实际项目 → 参考 doc/ 中的案例研究
📊 PuLP vs Pyomo vs OR-Tools¶
| 特性 | PuLP | Pyomo | OR-Tools |
|---|---|---|---|
| 建模语法 | 简单直观 | 代数化 | 面向对象 |
| 非线性支持 | ❌ | ✅ | 有限 |
| 动态优化 | ❌ | ✅ | ❌ |
| 求解器数量 | ~10 个 | 50+ 个 | ~5 个 |
| 学习曲线 | 平缓 | 中等 | 陡峭 |
| 适用场景 | 线性问题 | 通用优化 | 组合优化 |
🔗 相关资源¶
🛠️ 常见问题¶
Q1: 如何安装 IPOPT 求解器?¶
# Ubuntu/Debian
sudo apt-get install coinor-libipopt-dev
# Conda
conda install -c conda-forge ipopt
# 验证安装
ipyopt --version
Q2: 如何选择求解器?¶
# 线性/整数规划:CBC 或 GLPK
solver = SolverFactory('cbc')
# 非线性规划:IPOPT
solver = SolverFactory('ipopt')
# 大规模问题:Gurobi 或 CPLEX
solver = SolverFactory('gurobi')
Q3: 如何调试模型?¶
# 打印模型
model.pprint()
# 检查约束可行性
for c in model.component_objects(Constraint):
print(f"约束 {c.name}: {c()}")
本地路径: /workspace/code-examples/pyomo/
创建时间: 2026-06-01
难度: ⭐⭐⭐ (中等)
**Pyomo 中文导航 | 通用优化建模语言**
[返回代码索引](../../README_UPDATED.md) | [决策科学资源](../../docs/resources/decision-science-comprehensive-resources.md)