Pyomo 优化建模

  • 1. Pyomo
  • 2. 安装
  • 3. 简例
    • 3.1. 具体模型
    • 3.2. 抽象模型

1. Pyomo

Pyomo 是一种基于Python的开源优化建模语言,具有多种优化功能

在Python中的MPC运动控制求解中经常使用到


2. 安装

在Python环境比较简单,以Python3环境为例:

$ pip3 install pyomo

如果是关于解算器的安装:
官方推荐使用 glpk,但没有找到比较简单的安装方式
所以这边采用了另外一种解算器 Gurobi,使用时再指向Python就好了

$ pip3 install gurobipy

3. 简例


3.1. 具体模型


官网的一个具体模型简单示例,首先定义模型和决策变量:

import pyomo.environ as pyo# 创建具体模型
model = pyo.ConcreteModel()# 声明决策变量
model.x1 = pyo.Var(domain=pyo.NonNegativeReals)  # NonNegativeReals代表非负实数
model.x2 = pyo.Var(domain=pyo.NonNegativeReals)
# x是变量组成的向量,维度是2,非负实数
# model.x = pyo.Var([1, 2], domain=pyo.NonNegativeReals)

然后按要求描述目标和约束条件:

# 定义目标函数
def ObjRule(model):return 2 * model.x1 + 3 * model.x2# 生成目标函数
model.Obj = pyo.Objective(expr=ObjRule(model), sense=pyo.minimize)# 定义约束条件
model.Constraint1 = pyo.Constraint(expr=3 * model.x1 + 4 * model.x2 >= 1)# 显示模型信息
# model.pprint()

最后设置求解和显示结果

# 求解
pyo.SolverFactory('gurobi', solver_io="python").solve(model).write()print('\nObj = ', model.Obj())print('\nDecision Variables')
print('x1 = ', model.x1())
print('x2 = ', model.x2())print('\nConstraints')
print('Constraint1  = ', model.Constraint1())# ----------------------------------------------------------
#   Solution Information
# ----------------------------------------------------------
# Solution:
# - number of solutions: 0
#   number of solutions displayed: 0# Obj =  0.6666666666666666# Decision Variables
# x1 =  0.3333333333333333
# x2 =  0.0# Constraints
# Constraint1  =  1.0

3.2. 抽象模型

把上述问题抽象化:

from __future__ import division
import pyomo.environ as pyo# 创建抽象模型
model = pyo.AbstractModel()# 声明变量
model.m = pyo.Param(within=pyo.NonNegativeIntegers)
model.n = pyo.Param(within=pyo.NonNegativeIntegers)model.I = pyo.RangeSet(1, model.m)
model.J = pyo.RangeSet(1, model.n)model.a = pyo.Param(model.I, model.J)
model.b = pyo.Param(model.I)
model.c = pyo.Param(model.J)# 声明决策变量
model.x = pyo.Var(model.J, domain=pyo.NonNegativeReals)# 定义目标函数
def ObjRule(model):return pyo.summation(model.c, model.x)# 生成目标函数
model.Obj = pyo.Objective(rule=ObjRule)# 定义约束条件
def AxbConstraintRule(model, i):return sum(model.a[i,j] * model.x[j] for j in model.J) >= model.b[i]# 生成约束条件
model.AxbConstraint1 = pyo.Constraint(model.I, rule=AxbConstraintRule)

为了使用这个模型,必须给出参数值的数据
下面是一个提供数据的文件(以AMPL“.dat”格式)

# one way to input the data in AMPL format
# for indexed parameters, the indexes are given before the valueparam m := 1 ;
param n := 2 ;param a :=
1 1 3
1 2 4
;param c:=
1 2
2 3
;param b := 1 1 ;

然后执行求解

pyomo solve mpc.py mpc.dat --solver=gurobi --solver-io=python# [    1.47] Processing results
#     Number of solutions: 1
#     Solution Information
#       Gap: 0.0
#       Status: optimal
#       Function Value: 0.6666666666666666
#     Solver results file: results.yml
# [    1.47] Applying Pyomo postprocessing actions
# [    1.48] Pyomo Finished

结果都储存在results.yml文件中

# ==========================================================
# = Solver Results                                         =
# ==========================================================
# ----------------------------------------------------------
#   Problem Information
# ----------------------------------------------------------
Problem:
- Name: unknownLower bound: 0.6666666666666666Upper bound: 0.6666666666666666Number of objectives: 1Number of constraints: 1Number of variables: 2Number of binary variables: 0Number of integer variables: 0Number of continuous variables: 2Number of nonzeros: 2Sense: 1Number of solutions: 1
# ----------------------------------------------------------
#   Solver Information
# ----------------------------------------------------------
Solver:
- Name: Gurobi 9.51Status: okWallclock time: 0.0009975433349609375Termination condition: optimalTermination message: Model was solved to optimality (subject to tolerances), and an optimal solution is available.
# ----------------------------------------------------------
#   Solution Information
# ----------------------------------------------------------
Solution:
- number of solutions: 1number of solutions displayed: 1
- Gap: 0.0Status: optimalMessage: NoneObjective:Obj:Value: 0.6666666666666666Variable:x[1]:Value: 0.3333333333333333Constraint: No values

谢谢

Pyomo 优化建模相关推荐

  1. UA SIE545 优化理论基础0 优化建模7 二值变量的应用

    UA SIE545 优化理论基础0 优化建模7 二值变量的应用 包含决策变量的绝对值的约束 包含决策变量的最值的约束 包含决策变量的任意分位点的约束 应用:Least Median Squared E ...

  2. UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题

    UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题 OLS Least Absolute Deviation (LAD) Least Max Deviation (LMD) Lea ...

  3. UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计

    UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计 我们的目标是设计一种罐头,这种罐头产品按件出售,一件12个罐头,按3行一行四个的形式排列,同时有以下信息: V0V_0V0​:罐头的最小 ...

  4. 电气论文:梯级水电站调度优化建模(文末有程序下载链接)

    系列文章目录 个人电气博文传送门:学好电气全靠它,个人电气博文目录(持续更新中-)     本文针对梯级水电站调度优化进行建模,简单文字描述加程序共22页.matlab 和python双语言编写. 作 ...

  5. (最优化理论与方法)第三章优化建模-第一节:优化建模和常见建模技术

    文章目录 一:优化建模概述 二:目标函数的设计 (1)最小二乘法 (2)正则化 (3)最大似然估计 (4)代价.损失.收益函数 (5)泛函.变分 (6)松弛 三:约束的设计 (1)问题本身的物理性质 ...

  6. UA SIE545 优化理论基础0 优化建模1 优化问题的基本形式

    UA SIE545 优化理论基础0 优化建模1 优化问题的基本形式 优化问题的基本形式 确定性优化问题 随机优化问题 Stochastic Programming(SP) Robust Optimiz ...

  7. 2021华为杯数学建模D题解题-抗乳腺癌候选药物的优化建模

    2021华为杯数学建模D题解题-抗乳腺癌候选药物的优化建模 赛题 1. 问题一解题:特征选择 1.1. 赛题分析 1.2. 解题:特征选择方法对比 1.3. 模型评估 2. 问题二解题:预测模型 2. ...

  8. “华为杯”第十八届中国研究生数学建模竞赛D题:抗乳腺癌候选药物的优化建模(一等奖)

    更新20220921:参加数模之旅需要哪些准备?(转自中国研究生数学建模竞赛公众号) ● 前期知识储备 公众号.博客.知乎.纸质书籍等 ● 熟悉题型 华为题(A题):与电子信息专业相关度高 大数据类: ...

  9. 抗乳腺癌候选药物的优化建模

    抗乳腺癌候选药物的优化建模 一.背景介绍 乳腺癌是目前世界上最常见,致死率较高的癌症之一.乳腺癌的发展与雌激素受体密切相关,有研究发现,雌激素受体α亚型(Estrogen receptors alph ...

最新文章

  1. 有趣的计算机课的作文,有趣的电脑课作文500字
  2. Linux内核中锁机制之完成量、互斥量
  3. 计算机英语unit,计算机专业英语Unit 7
  4. 《俄罗斯方块》正版授权手游开启预约:支持QQ、微信双平台
  5. @前端工程师,节约网站流量用这一招就够了!
  6. Vue-cli proxyTable 解决开发环境的跨域问题(转)
  7. acs712电流检测怎么用_工程师都用这个巧妙廉价的电流检测电路!
  8. iOS申请真机调试证书-图文详解
  9. activemq 下载以及安装、应用
  10. RS485转HART协议转换模块 MODBUS转HART转换器
  11. android 微信授权失败,安卓端微信授权失败,返回code=-1
  12. 公寓上网新认证方式破解研究
  13. 全民wa矿小程序源码
  14. chrome安装js插件
  15. esp8266保存html文件,八,ESP8266 文件保存数据(基于Lua脚本语言)
  16. HTTP协议(深入http请求)
  17. 校园网页设计成品 学校班级网页制作模板 dreamweaver网页作业 简单网页课程成品 大学生静态HTML网页源码
  18. python实现低通滤波_python中的低通滤波器
  19. Sumo入门和Traci接口使用
  20. ns-3构建简单点对点网络

热门文章

  1. 暴力/图论 hihoCoder 1179 永恒游戏
  2. mysql授权远程访问
  3. 各种一维卷积(Full卷积、Same卷积、Valid卷积、带深度的一维卷积)
  4. countdownlatch的使用详解(好懂!!)
  5. Android实现自定义曲线截屏,Android实现价格走势自定义曲线图
  6. mysql 搜索不等于_Mysql索引分类
  7. dataframe scala 修改值_【Spark学习笔记】 Scala DataFrame操作大全
  8. java B2B2C源码电子商务平台 --zuul跨域访问问题
  9. Swift多线程:GCD进阶,单例、信号量、任务组
  10. 使用saltstack编译安装nginx