Skip to content

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}")

运行示例

cd /workspace/code-examples/pyomo
python examples/mip/knapsack.py
python examples/nlp/rosenbrock.py

📖 关键文档

文档 链接 说明
官方文档 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)