Pyomo 优化建模
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 优化建模相关推荐
- UA SIE545 优化理论基础0 优化建模7 二值变量的应用
UA SIE545 优化理论基础0 优化建模7 二值变量的应用 包含决策变量的绝对值的约束 包含决策变量的最值的约束 包含决策变量的任意分位点的约束 应用:Least Median Squared E ...
- UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题
UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题 OLS Least Absolute Deviation (LAD) Least Max Deviation (LMD) Lea ...
- UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计
UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计 我们的目标是设计一种罐头,这种罐头产品按件出售,一件12个罐头,按3行一行四个的形式排列,同时有以下信息: V0V_0V0:罐头的最小 ...
- 电气论文:梯级水电站调度优化建模(文末有程序下载链接)
系列文章目录 个人电气博文传送门:学好电气全靠它,个人电气博文目录(持续更新中-) 本文针对梯级水电站调度优化进行建模,简单文字描述加程序共22页.matlab 和python双语言编写. 作 ...
- (最优化理论与方法)第三章优化建模-第一节:优化建模和常见建模技术
文章目录 一:优化建模概述 二:目标函数的设计 (1)最小二乘法 (2)正则化 (3)最大似然估计 (4)代价.损失.收益函数 (5)泛函.变分 (6)松弛 三:约束的设计 (1)问题本身的物理性质 ...
- UA SIE545 优化理论基础0 优化建模1 优化问题的基本形式
UA SIE545 优化理论基础0 优化建模1 优化问题的基本形式 优化问题的基本形式 确定性优化问题 随机优化问题 Stochastic Programming(SP) Robust Optimiz ...
- 2021华为杯数学建模D题解题-抗乳腺癌候选药物的优化建模
2021华为杯数学建模D题解题-抗乳腺癌候选药物的优化建模 赛题 1. 问题一解题:特征选择 1.1. 赛题分析 1.2. 解题:特征选择方法对比 1.3. 模型评估 2. 问题二解题:预测模型 2. ...
- “华为杯”第十八届中国研究生数学建模竞赛D题:抗乳腺癌候选药物的优化建模(一等奖)
更新20220921:参加数模之旅需要哪些准备?(转自中国研究生数学建模竞赛公众号) ● 前期知识储备 公众号.博客.知乎.纸质书籍等 ● 熟悉题型 华为题(A题):与电子信息专业相关度高 大数据类: ...
- 抗乳腺癌候选药物的优化建模
抗乳腺癌候选药物的优化建模 一.背景介绍 乳腺癌是目前世界上最常见,致死率较高的癌症之一.乳腺癌的发展与雌激素受体密切相关,有研究发现,雌激素受体α亚型(Estrogen receptors alph ...
最新文章
- 有趣的计算机课的作文,有趣的电脑课作文500字
- Linux内核中锁机制之完成量、互斥量
- 计算机英语unit,计算机专业英语Unit 7
- 《俄罗斯方块》正版授权手游开启预约:支持QQ、微信双平台
- @前端工程师,节约网站流量用这一招就够了!
- Vue-cli proxyTable 解决开发环境的跨域问题(转)
- acs712电流检测怎么用_工程师都用这个巧妙廉价的电流检测电路!
- iOS申请真机调试证书-图文详解
- activemq 下载以及安装、应用
- RS485转HART协议转换模块 MODBUS转HART转换器
- android 微信授权失败,安卓端微信授权失败,返回code=-1
- 公寓上网新认证方式破解研究
- 全民wa矿小程序源码
- chrome安装js插件
- esp8266保存html文件,八,ESP8266 文件保存数据(基于Lua脚本语言)
- HTTP协议(深入http请求)
- 校园网页设计成品 学校班级网页制作模板 dreamweaver网页作业 简单网页课程成品 大学生静态HTML网页源码
- python实现低通滤波_python中的低通滤波器
- Sumo入门和Traci接口使用
- ns-3构建简单点对点网络
热门文章
- 暴力/图论 hihoCoder 1179 永恒游戏
- mysql授权远程访问
- 各种一维卷积(Full卷积、Same卷积、Valid卷积、带深度的一维卷积)
- countdownlatch的使用详解(好懂!!)
- Android实现自定义曲线截屏,Android实现价格走势自定义曲线图
- mysql 搜索不等于_Mysql索引分类
- dataframe scala 修改值_【Spark学习笔记】 Scala DataFrame操作大全
- java B2B2C源码电子商务平台 --zuul跨域访问问题
- Swift多线程:GCD进阶,单例、信号量、任务组
- 使用saltstack编译安装nginx