一、概述
Pyomo是一个基于python的开源软件包,它支持多种优化功能,用于制定和分析优化模型。Pyomo可用于定义符号问题、创建具体的问题实例,并使用标准解决程序解决这些实例。Pyomo支持多种问题类型,包括:
- 线性规划
- 二次规划
- 非线性规划
- 整数线性规划
- 混合整数二次规划
- 混合整数非线性规划
- 整数随机规划
- 广义分隔编程
- 微分代数方程
- 具有平衡约束的数学规划
Pyomo支持全功能编程语言中的分析和脚本编制。此外,Pyomo还证明了开发高级优化和分析工具的有效框架。例如,PySP包提供了随机规划的通用求解程序。PySP利用了Pyomo的建模对象嵌入在功能全面的高级编程语言中的事实,这种语言允许使用Python并行通信库透明地并行化子问题。
二、安装pyomo和GLPK
安装pyomo:
!pip install -q pyomo
GLPK是一个开源的GNU线性编程工具包,可在GNU通用公共许可证3下使用。GLPK是一个单线程单形解算器,通常适用于中小型线性整数规划问题。它是用C语言编写的,依赖性很小,因此在计算机和操作系统之间具有很高的可移植性。对于许多示例来说,GLPK通常“足够好”。对于较大的问题,用户应该考虑高性能的解决方案,如COIN-OR CBC,它们可以利用多线程处理器。
!apt-get install -y -qq glpk-utils
三、一个简单的例子
1、定义模型

from pyomo.environ import *
# create a model
model = ConcreteModel()
# declare decision variables
model.x = Var(domain=NonNegativeReals) # NonNegativeReals代表非0实数
model.y = Var(domain=NonNegativeReals)
# declare objective
model.profit = Objective(expr = 40*model.x + 30*model.y, sense=maximize)
# declare constraints
model.demand = Constraint(expr = model.x <= 40)
model.laborA = Constraint(expr = model.x + model.y <= 80)
model.laborB = Constraint(expr = 2*model.x + model.y <= 100)
model.pprint()

2、求解模型
SolverFactory('glpk', executable='/usr/bin/glpsol').solve(model).write()
# display solution
print('\nProfit = ', model.profit())
print('\nDecision Variables')
print('x = ', model.x())
print('y = ', model.y())
print('\nConstraints')
print('Demand = ', model.demand())
print('Labor A = ', model.laborA())
print('Labor B = ', model.laborB())

