基于arx模型的MPC预测控制器simulink建模与仿真实现

news2024/11/27 10:32:18

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

MPC的优点
模型预测控制善于处理多输入多输出系统
       对于MIMO系统,PID需要为每个子系统单独设计PID控制器,由于存在耦合对于较大的系统难以实现
1.MPC控制器可以较好控制MIMO系统

2.模型预测控制可以处理约束,安全性约束,上下阈值
3.模型预测控制是有向前考虑未来时间步的有限时域优化(一定的预测能力)最优控制要求在整个时间优化实际上模型预测控制采用了一个折中的策略,既不是像最优控制那样考虑这个时域,也不是完全的贪婪控制仅仅考虑当前,而是考虑未来的有限时间域。

     在当今过程控制中,PID当然是用的最多的控制方法,但MPC也超过了10%的占有率。MPC是一个总称,有着各种各样的算法。其动态矩阵控制(DMC)是代表作。DMC采用的是系统的阶跃响应曲线,其突出的特点是解决了约束控制问题。那么是DMC是怎么解决约束的呢?在这里只给出宏观的解释,而不做详细的说明。DMC把线性规划和控制问题结合起来,用线性规划解决输出约束的问题,同时解决了静态最优的问题,一石二鸟,在工业界取得了极大的成功。

2.作用机理
  MPC作用机理描述为:在每一个采用时刻,根据获得的当前测量信息,在线求解一个有限时间开环优化问题,并将得到的控制序列的第一个元素作用于被控对象。在下一个采样时刻,重复上述过程:用新的测量值作为此时预测系统未来动态的初始条件,刷新优化问题并重新求解 。
即MPC算法包括三个步骤:
(1)预测系统未来动态;
(2)(数值)求解开环优化问题;
(3)将优化解的第一个元素(或者说第一部分)作用于系统
  这三步是在每个采样时刻重复进行的,且无论采用什么样的模型,每个采样时刻得到的测量值都作为当前时刻预测系统未来动态的初始条件

大致的模型建立如下所示:

 其中MPC预测控制器,采用ARX模型进行设计。其内部结构框图如下所示:

这里虚线部分,就是MPC预测控制器,使用S函数进行设计。

相关公式如下所示:

二、核心程序

下面,就根据上面的结构框图进行系统的simulink建模以及相关S函数的编程实现。

主要是MPC预测控制器的设计,根据论文的结构框图,MPC由三个部分构成,即

优化计算,

ARX模型

预测输出

function Output = mpc_pcontroller(A_state,...
                                  B_state,...
                                  C_state,...
                                  D_state,...
                                  p_cs,...
                                  m_cs,...
                                  Q_cs,...
                                  R_cs)

[Rm,Cn] = size(D_state);

%MPC优化计算
[ak,bk] = Predict_mpc(A_state,...
                      B_state,...
                      C_state,...
                      D_state,...
                      Cn,...
                      p_cs,...
                      m_cs,...
                      Q_cs,...
                      R_cs);
 
x0 = zeros(size(A_state,1),1);
u0 = zeros(Cn,1);
 

%预测输出
Output = @MPC_pred;

function Output = MPC_pred(din,Ref)
    %状态更新
    x0 = A_state * x0 + B_state * u0;

    if size(Ref,2) < p_cs
       ref = [Ref Ref(:,end + zeros(p_cs-size(Ref,2),1))];
    else
       ref = Ref(:,1:p_cs);
    end

    %计算误差
    Error  = abs(din(:) - C_state*x0);

    %ARX模型
    y1     = -x0;
    u1     =  reshape(ref-Error(:,ones(p_cs,1)),[],1);
    
    %第一路的输出
    ua     = sum(ak(1,:) * y1) + sum(bk(1,:) * u1);
    %第二路的输出
    ub     = sum(ak(2,:) * y1) + sum(bk(2,:) * u1);
    
    u0     =[ua;ub];
    %控制器输出 
    Output = u0;
end

end
%MPC优化计算
function [Ak,Bk] = Predict_mpc(A_state,...
                               B_state,...
                               C_state,...
                               D_state,...
                               Ls2,...
                               p_cs,...
                               m_cs,...
                               Q_cs,...
                               R_cs);
 
[R1,C1]      = size(B_state);
R2           = size(C_state,1);
%根据状态值,获得公式中的G变量
[G1,G2]      = func_G_cal(A_state,B_state,C_state,D_state,R1,R2,C1,m_cs,p_cs);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%定义预测矩阵
[P1,P2,P3,L] = func_predict_Matrix(R1,R2,C1,p_cs,A_state,B_state,C_state);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%计算控制系数
[K1,K2]      = func_K_cal(G2,P2,P3,L,R2,C1,p_cs,m_cs,Q_cs,R_cs);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出a和b系数
Ak       = K1(1:Ls2,:);
Bk       = K2(1:Ls2,:);
end

三、测试结果

仿真结果如下所示:

 上述的仿真结果,表面本文所研究的MPC预测控制器具有更好的控制性能。

A08-46

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查题校园公众号题库系统

查题校园公众号题库系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

深度学习入门(二十五)卷积神经网络——多输入多输出通道

深度学习入门&#xff08;二十五&#xff09;卷积神经网络——多输入多输出通道前言卷积神经网络——填充和步幅课件多个输入通道多个输出通道多个输入和输出通道11卷积层二维卷积层总结教材1 多输入通道2 多输出通道3 11卷积层4 小结前言 核心内容来自博客链接1博客连接2希望…

【Linux】腾讯云服务器Linux环境搭载

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Linux》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 Linux介绍&#xff1a; 我们本篇博客以腾讯云的Linux系统搭载为例&#xf…

SSM详解6:请求转发和请求重定向的区别

1、定义不同 请求转发&#xff08;forward&#xff09;&#xff1a; 是发生在服务器内部程序&#xff0c;当服务端程序收到一个请求&#xff0c;会将该请求转发给另一个服务端&#xff08;目的地址&#xff09;&#xff0c;再将目的地址的响应返回给客户端。而客户端对该过程…

前端如何锁定项目的node和pnpm版本

前端如何锁定项目的node和pnpm版本背景如何锁定Node版本的管理背景 项目组成员Node.js、npm、yarn、pnpm等版本不统一。造成编译出错&#xff0c;开发不方便&#xff0c;工作效率低下等问题。 如何锁定 通过修改package.json&#xff0c;指定engines字段&#xff0c;锁定前端所…

初始C++(一)---命名空间、输入输出、缺省参数

目录 1.命名空间 定义命名空间 using 指令 命名空间的嵌套 2、C输入输出 标准输出流&#xff08;cout&#xff09; 标准输入流&#xff08;cin&#xff09; 3.缺省参数 1.命名空间 定义命名空间 假设这样一种情况&#xff0c;当一个班上有两个名叫张三 的学生时&…

零基础入门网络安全,收藏这篇不迷茫【2022最新】

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白了&#xff0c;网络安全就是指…

网络面试-ox07http中的keep-alive以及长/短连接

非Keep-Alive: 早起HTTP1.0, 浏览器发起http请求需要与服务器建立新的TCP连接&#xff0c;请求处理后连接立即关闭。 缺点&#xff1a;每个这样的连接&#xff0c;客户端与服务器都要分配TCP的缓冲区和变量&#xff0c;这给服务器带来严重的负担。 Keep-Alive: 默认持久连接&am…

成为Linux大神——必须要具备的基本技能!

要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累&#xff0c;都需要过程&#xff01; 目录 1.Linux软件包管理器yum 2.Linux编辑器—vim的使用 2.1vim的基本概念&#xff1a; 2.2vim的基本操作&#xff1a; 2.3vim正常模式命令集&#xff1a; 2.4vim底行…

vue3 + ts: layout布局

一、理解&#xff1a;layout layout&#xff0c;语义&#xff1a;布局&#xff0c;设计&#xff0c;结合前端vue项目&#xff0c;我理解为这样的定义&#xff1a;页面级别的组件&#xff0c;框架级别的组件&#xff0c;基础布局组件&#xff0c;基础设计 关键词&#xff1a;组…

SEO外链专员,SEO专员,SEO编辑,每天工作量给他们怎么安排?

企业想要做好网站排名&#xff0c;想要让网站在搜索引擎中获得更高的曝光度&#xff0c;就需要对网站进行整体优化&#xff0c;而整体优化就包括站内优化&#xff0c;以及站外优化&#xff0c;只有这样才能让网站关键词获得的更多的排名&#xff0c;从而也就能够获得更多的流量…

堪称经典,一个非常适合初学者的机器学习实战案例

大家好&#xff0c;今天我给大家介绍一个非常适合新手的机器学习实战案例。 这是一个房价预测的案例&#xff0c;来源于 Kaggle 网站&#xff0c;是很多算法初学者的第一道竞赛题目。 该案例有着解机器学习问题的完整流程&#xff0c;包含EDA、特征工程、模型训练、模型融合等…

轻量级简约仪表板Dasherr

什么 Dasherr &#xff1f; 这是老苏在逛 reddit 时偶然发现的&#xff0c;作者刚发布&#xff0c;这是一款全新的轻量级仪表板。 官方目前没有提供 docker&#xff0c;但本身的安装方法并不复杂&#xff0c;只要将代码下载后&#xff0c;将 www 目录中的文件放入到 Web 服务器…

蓝桥杯入门即劝退(五)跑断腿的小蓝

九层之台&#xff0c;起于垒土&#xff0c;你我皆是垒土人✔ 愿我的文章对你有所帮助&#xff01; 欢迎关注点赞评论&#xff0c;共同学习&#xff0c;共同进步&#xff01; 一、题目&#xff08;填空题&#xff09; 小蓝每天都锻炼身体。 正常情况下&#xff0c;小蓝每天跑 …

阿里测试8年,从5K到40K,这178天的心酸只有我自己知道···

从事测试工作已8年有余了&#xff0c;今天想聊一下自己刚入门时和现在的今昔对比&#xff0c;虽然现在也没什么大成就&#xff0c;只能说笑谈一下自己的测试生涯。 技术栈的变化 刚开始是做的开发&#xff0c;也是做了好几年的开发&#xff0c;后面软件测试的风潮开始了&…

前端工程师的摸鱼日常(17)

声明&#xff1a;全文纯属个人想法&#xff0c;无论提到什么&#xff0c;都无贬低和抬高之意&#xff0c;也没有对当今直正者感到不满。如果有部分内容与我思想不一&#xff0c;或戳于谁之痛处&#xff0c;可以跳过浏览&#xff0c;就当我在讲故事或者笑话。如果内容侵犯到XXX的…

CH34X linux驱动安装,参考代码例程

想用USB转I2C工具调试个I2C接口芯片未果。 驱动安装参考下面内容&#xff1a; 1. 使用的系统环境 本文使用Ubuntu 20.04 LTS版本Linux系统为测试环境。 2. 使用到的工具软件介绍 Linux系统下编译CH365/CH367的驱动使用到的工具主要有gcc和make&#xff0c;版本如下所示&…

“清华女神”回国,赤子之心,如愿以偿

目录1、女神科学家颜宁是谁2、颜宁在深圳人才论坛最新演讲&#xff0c;以及招聘邮箱3、颜宁微博回应4、结论与展望最近女神科学家颜宁回国了&#xff0c;整个科学界和中国都沸腾了&#xff0c;也上了热搜&#xff0c;成了热门话题&#xff0c;越来越多的海归精英选择回国 1、…

LeetCode 每日一题——816. 模糊坐标

1.题目描述 816. 模糊坐标 我们有一些二维坐标&#xff0c;如 “(1, 3)” 或 “(2, 0.5)”&#xff0c;然后我们移除所有逗号&#xff0c;小数点和空格&#xff0c;得到一个字符串S。返回所有可能的原始字符串到一个列表中。 原始的坐标表示法不会存在多余的零&#xff0c;所…

5_会话管理实现登录功能

一 会话管理登录功能 前置了解 初识cookie 如下图,浏览器初次访问服务器时,服务器生成数据将数据存放在浏览器的cookie中,当浏览器再次访问服务器时将会携带该cookie,此时服务器就可以确定该浏览器的身份了。 session的使用 如下图,session的实现需要借助cookie,不同cookie的是…