MPC模型预测控制及在Matlab中实现函数定义
基于b站DR_CAN老师的MPC控制视频【MPC模型预测控制器】4_数学建模推导--Matlab代码详解_哔哩哔哩_bilibili的学习分享如下:
一、研究目的
在约束条件(物理限制)下达到最优的系统表现。
1.对于单输入单输出(SISO)系统:
越小,跟踪能力越强;
越小,输入越小,能耗越低。(用平方项来衡量e、u的绝对值大小)
2.代价函数Cost Function
,通过设计u,寻找最小的J的过程为最优化
其中q,r为调节参数
①若q>>r,则误差e对于设计系统的影响权重更大
②若r>>q,则系统设计更看重输入u
3.对于多输入多输出(MIMO)系统:
状态空间:
代价函数:
具体地,例如已知系统, ,系统的参考目标,则误差矩阵
其中,Q,R为调节矩阵,,,,为系统最优时的权重系数。
二、基本概念
MPC(Model Predictive Control)模型预测控制:通过模型来预测系统在某一未来时间段内的表现来进行优化控制,多用于数位控制,用离散的状态空间表达,即
实现步骤:
Step1:估计/测量读取当前k时刻的系统状态
Step2:基于的选择进行最优化
代价函数:
其中,为k时刻的误差矩阵,为k时刻的输入矩阵,为终端(N时刻)误差,Q,R为调节矩阵,F为终端误差权重矩阵
Step3:实施一步(即从t=k运行到t=k+1即可)
下一次从t=k+1时重复Step1到3,重新预测的输入
即每一轮的预测都是预测区间和控制区间整体右移一个单位,整个过程是向右滚动的,
称为滚动优化控制(Receding Horizon Control),系统对控制器的计算能力要求高。
三、MPC最优化建模
(对于模型求解的原理是基于二次规划(Quadratic Programming)模型的求解,通过调用Matlab、Python等二次规划函数求解,下面的代码用到Matlab的quadprog函数)
1.如何建立二次规划模型
已知系统模型:X(k+1) = AX(k) + BU(k),输出Y=X,参考目标R=0
其中,X(k+1) 为k+1时刻的状态变量,X(k) 为k时刻的状态变量,U(k)为k时刻的输入变量。
在k时刻:
①设u(k+i | k)表示在k时刻预测的第k+i时刻的输入值,在预测区间N内,有,即
同理,,x(k+i | k)表示在k时刻预测的第k+i时刻的系统状态
②误差E=Y-R=X-0=X
代价方程
即(误差加权和 + 输入加权和 + 终端误差项)
③初始条件(k时刻)
预测的k+1时刻
预测的k+2时刻
预测的k+N时刻
综上,
简化为 (1)
为k时刻预测的一段时间内的所有状态值的组合向量,为已知的t=k这一个时刻的状态值,,
在t=k时刻的代价矩阵可表述为 (2)
将式(1)代入(2)得
其中,为增广矩阵,,
令
则,该简化形式可以清晰看出与初始条件及输入的关系。
四、建模实例
对于系统x(k+1) = Ax(k) + Bu(k),系统的维度为:x(k):n×1 ; A:n×n ; B:n×p ; u(k):p×1,运算过程中各矩阵的维度有:
在Matlab中定义函数:
function [M,C,Q_bar,R_bar,G,E,H,U_k] = MPC_Zero_Ref(A,B,N,x_k,Q,R,F)%%%%%%%%%%%建立一个以0为参考目标的MPC求解函数
%%%%%%%%%%%其中,状态矩阵A,输入矩阵B系统维度N,初始条件x_k,权重矩阵Q,R及终端误差矩阵F为输入
%%%%%%%%%%%输出中U_k为所求控制器,其余为简化过程中引入的中间变量n=size(A,1); %A是n×n矩阵,求n
p=size(B,2); %B是n×p矩阵,求p
M=[eye(n);zeros(N*n,n)];%初始化M矩阵,M矩阵是(N+1)n × n的,%它上面是n × n个“I”,这一步先把下半部分写成0
C=zeros((N+1)*n,N*p);%初始化C矩阵,这一步令它有(N+1)n × NP个0
%定义M和C
tmp=eye(n);%定义一个n × n的I矩阵
for i=1:N%循环,i从1到Nrows = i*n+(1:n);%定义当前行数,从i×n开始,共n行C(rows,:)=[tmp*B,C(rows-n,1:end-p)];%将C矩阵填满tmp=A*tmp;%每一次将tmp左乘一次AM(rows,:)=tmp;%将M矩阵写满
end
%定义Q_bar
S_q=size(Q,1);%找到Q的维度
S_r=size(R,1);%找到R的维度
Q_bar=zeros((N+1)*S_q,(N+1)*S_q);%初始化Q_bar为全0矩阵
for i=0:NQ_bar(i*S_q+1:(i+1)*S_q,i*S_q+1:(i+1)*S_q)=Q;%将Q写到Q_bar的对角线上
end
Q_bar(N*S_q+1:(N+1)*S_q,N*S_q+1:(N+1)*S_q)=F;%将F放在最后一个位置%定义R_bar
R_bar=zeros(N*S_r,N*S_r);%初始化R_bar为全0矩阵
for i=0:N-1R_bar(i*S_r+1:(i+1)*S_r,i*S_r+1:(i+1)*S_r)=R;
end%求解
G=M'*Q_bar*M;%G
E=C'*Q_bar*M;%E
H=C'*Q_bar*C+R_bar;%H%最优化
f=(x_k'*E')';%定义f矩阵
U_k=quadprog(H,f);%用二次规划求解最优化U_k
end
MPC模型预测控制及在Matlab中实现函数定义相关推荐
- MPC模型预测控制原理和Matlab以及Python代码实现
MPC模型预测控制原理和代码 一. 介绍模型预测控制(MPC)原理 简要解释一下最优控制最优控制的目标是在一定的约束条件下达到最优的系统表现,那么要让系统达到最优表现,一般是通过定义损失函数J,通过最 ...
- MPC(模型预测控制)_附matlab例程
写在前面: 本文为科研理论笔记的第二篇,其余笔记目录传送门: 理论笔记专栏目录 介绍结束下面开始进入正题: 1 基本概念 1.1 最优控制 最优控制(optimal control): ...
- MPC模型预测控制+matlab代码实现+simulink仿真实现
MPC模型预测控制+matlab代码实现 MPC模型预测控制 原理 步骤 matlab代码实现 程序 主程序 函数 参数调试 MPC模型预测控制 原理 步骤 matlab代码实现 程序 主程序 cle ...
- 基于MPC 模型预测控制的轨迹跟随,横向控制模型,车道保持
基于MPC 模型预测控制的轨迹跟随,横向控制模型,车道保持,simulink模型 采用二自由度车辆动力学模型,可以自定义车辆参数,自定义目标轨迹,图中为单移线目标轨迹与实际轨迹偏差 ID:485067 ...
- MPC模型预测控制学习笔记-2021.10.27
MPC模型预测控制学习笔记-点击目录就可以跳转 1. 笔者介绍 2. 参考资料 3. MPC分类 4. 数据的标准化与归一化 5. MATLAB-MPC学习笔记 5.1 获取测试信号:gensig( ...
- matlab中dmodce函数使用报错,matlab中randi函数
④矩形脉冲信号 矩形脉冲信号在 MATLAB 中用 rectpuls 函数表示,其调用形式为 ft...(1,n); >>xn3=randi(n,1,n); >>subplot ...
- 极大似然函数求解_关于极大似然估计的学习(附Matlab中mle函数的求解)
冒泡~是新的一周辣~温故而知新一下极大似然估计(真是很不容易了) 极大似然估计的基本思想 什么是极大似然?官方上的较清楚的解释是:利用已知的样本的结果,在使用某个模型的基础上,反推最有可能导致这样结果 ...
- Matlab中intlinprog函数的用法总结
Matlab中 intlinprog函数用法简介 1.简介 intlinprog是matlab中用于求解混合整数线性规划(Mixed-integer linear programming)的一个函数, ...
- Matlab中linprog函数的用法总结
Matlab中 linprog函数的用法总结 1.简介 在matlab中,linprog函数可以求解线性规划问题,用于寻找目标函数的最小值 matlab中,规划模型的标注写法如下 \[ min\ f\ ...
最新文章
- 一天超2000次,阿里如何打响音视频超时空战役?
- GetLastError 函数返回值大全
- 如何解决移动端键盘弹起将底部导航栏顶起
- 光端机的作用有哪些?
- Gated Convolution
- 周华健,歌声伴我成长(三)
- 我在华为写了13年代码的一些感悟
- 况客:Campisi债券业绩归因模型
- 基于Springboot实现汽车4S店销售管理系统
- 【计算机组成原理】CPU是什么
- PLC通过DDE通讯——基于Codesys和组态王7.5进行数据采集
- 一款智能家居APP的雏形
- 怎么linux添加guest,如何为Ubuntu 16.04安装VirtualBox Guest Additions
- DevOps 工程师需要必备哪些技能?
- 神州优车拟41亿元收购宝沃汽车67%股权
- Pythom爬虫之图虫小姐姐图片的爬取:
- MKR基于知识图谱的推荐算法
- 小米盒子为什么搜不到电视家?电视安装包解析错误解决方案
- 论文阅读_基于GCN的知识图对齐
- 4.电子计算机的分类,国际上对计算机进行分类的依据是什么
热门文章
- 计算机视觉学习——投影与三维视觉——本征矩阵和基础矩阵
- ai人工智能换脸原理_他们如何看待AI监视内部工作原理
- ABAP 负数符号在前面显示/如何将负数改为正数
- Cmake 配置 arm-oe-linux-gnueabi-gcc 交叉编译
- 独家:沪上三大律师解读“三驾马车”下的数据合规与上海数商体系创新​
- 【金猿技术展】基于数据控制三维组态的方法及装置——实现数据驱动三维模型的精准运转技术...
- 响应式织梦模板齿轮设备类网站
- 当linux reboot不成功时怎么办
- FTP协议的原理及配置
- 基于C语言实现离散时域积分算法