MPC模型预测控制理论与实践

news2024/11/26 6:20:49

一、基本概念

最有控制的动机是在约束条件下达到最优的系统表现。

模型预测控制(MPC,Model Predictive Control)是通过模型来预测系统在某一未来时间段内的表现来进行优化控制,多用于数位控制,通常用离散型状态空间表达。主要有三个主要部分构成,1模型;2预测;3控制(做决策)。模型,模型可以是机理模型,也可以是一个基于数据的模型。(例如深度学习训练得到的模型)预测,建立一个模型目的主要是用来做预测。控制(做决策),控制就是需要做出动作了,控制就是采取行动执行动作。

MPC主要有三步:

在k时刻:

1、估计/测量读取当前系统状态;

2、基于u_k,u_{k+1},...,u_{k+N}来进行最优化,离散系统代价函数为

J=\sum_k^{N-1}(E_k^TQE_k+u_k^TRu_k)+E_N^TFE_N

3、只取u_k作为控制输入施加在系统上。

在下一时刻重复以上三步,在下一步进行预测时使用的就是下一步的状态值,即滚动优化控制。

二、理论原理

1、二次规划的一般形式:

\begin{aligned}\min_x&&q(x)=z^TQz+C^Tz\\s.t.&&a_i^Tz\geq b_i,\quad i\in\tau\end{aligned}

二次规划问题目前的优化理论提供了较完整的求解方法,可以利用诸多工具进行求解。这里的MPC问题最后能够归结为求解一个二次规划问题,即最小化代价函数。

2、MPC代价函数

对于一个离散系统

x(k+1)=Ax(k)+Bu(k)

在k时刻进行观测,预测从k到N时刻的状态X_k为:

X_k=\begin{pmatrix}x(k|k)\\x(k+1|k)\\x(k+2|k)\\\cdots\\x(k+N|k)\end{pmatrix}

输入U_k为:

U_k=\begin{pmatrix}u(k|k)\\u(k+1|k)\\u(k+2|k)\\\cdots\\u(k+N-1|k)\end{pmatrix}

离散系统的代价函数为:

J=\sum_{i=0}^{N1}\left(x(k+i|k)\right.^TQx(k+i|k)+u(k+i|k)^TRu(k+i|k))\\ +x(k+N)^TFx(k+N)

我们需要求解的是系统的输入u(k+i|k),这就需要我们把状态项x(k+i|k)给消除掉。可以通过传感器或者状态估计得到系统当前的状态值,利用系统初始条件x(k|k)=x_k,以及上述离散状态方程,可以得到所有状态量用输入和初始值表达的形式:

X_k=\begin{pmatrix}I\\A\\A^2\\\cdots\\A^N\end{pmatrix}x(k)+\begin{pmatrix}0&0&\ldots&0\\B&0&\ldots&0\\AB&B&\ldots&0\\\ldots&\ldots&\ldots&\ldots\\A^{N-1}B&A^{N-2}B&\ldots&B\end{pmatrix}U_k

M=\begin{bmatrix} I_{​{n\times n}} \\A_{​{n\times n}} \\A_{​{n\times n}}^2 \\. \\. \\A^N\ \end{bmatrix}$C=\begin{bmatrix}0&0&...&0\\\vdots&\vdots&...&\vdots\\0&0&&0\\B&0&...&0\\AB&B&...&0\\\vdots&\vdots&\ddots&0\\A^{N-1}B&A^{N-2}B&...&B\end{bmatrix}$,则有

{X_k}={Mx_k}+{CU_k}

代价函数可以化简为:

$\begin{aligned} &J=\sum_{i=0}^{N-1}\left(x(k+i|k)^TQx(k+i|k)\right.+u(k+i|k)^TRu(k+i|k)+x(k+N)^TFx(k+N)) \\ &\left.=\left(\begin{array}{c}x(k|k)\\x(k+1|k)\\x(k+2|k)\\\cdots\\x(k+N|k)\end{array}\right.\right)\left(\begin{array}{ccccc}Q&&&\\&Q&&\\&&Q&\\&&\cdots&\cdots&\cdots\\\cdots&\cdots&\cdots&\cdots&\cdots\\&&&&F\end{array}\right)\left(\begin{array}{c}x(k|k)\\x(k+1|k)\\x(k+2|k)\\\cdots\\\cdots\\x(k+N|k)\end{array}\right)^T \\ &\left.+U_k^T\left(\begin{array}{rrrrr}R&&&&\\&R&&&\\&&R&&\\\cdots&\cdots&\cdots&\cdots&\cdots\\&&&&R\end{array}\right.\right)U_k \end{aligned}$

$J=X_k^T\overline{Q}X_k+U_k^T\overline{R}U_k$

进一步可以化简为

J=x{_k}^TGx{_k}+U_k^THU_k+2x{_k}^TEU_k

其中$M^T\overline{Q}M=G,M^T\overline{Q}C=E,C^T\overline{Q}C+\overline{R}=H$

该代价函数可以利用二次规划进行优化。

三、代码实践

问题:

1、MPC_Test.m

%% 清屏

clear ; 

close all; 

clc;

%% 加载 optim package,若使用matlab,则注释掉此行

pkg load optim;

%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 第一步,定义状态空间矩阵

%% 定义状态矩阵 A, n x n 矩阵

A = [1 0.1; -1 2];

n= size (A,1);

%% 定义输入矩阵 B, n x p 矩阵

B = [ 0.2 1; 0.5 2];

p = size(B,2);

%% 定义Q矩阵,n x n 矩阵

Q=[100 0;0 1];

%% 定义F矩阵,n x n 矩阵

F=[100 0;0 1];

%% 定义R矩阵,p x p 矩阵

R=[1 0 ;0 .1];

%% 定义step数量k

k_steps=100; 

%% 定义矩阵 X_K, n x k 矩 阵

X_K = zeros(n,k_steps);

%% 初始状态变量值, n x 1 向量

X_K(:,1) =[20;-20];

%% 定义输入矩阵 U_K, p x k 矩阵

U_K=zeros(p,k_steps);



%% 定义预测区间K

N=5;

%% Call MPC_Matrices 函数 求得 E,H矩阵 

[E,H]=MPC_Matrices(A,B,Q,R,F,N);



%% 计算每一步的状态变量的值

for k = 1 : k_steps 

%% 求得U_K(:,k)

U_K(:,k) = Prediction(X_K(:,k),E,H,N,p);

%% 计算第k+1步时状态变量的值

X_K(:,k+1)=(A*X_K(:,k)+B*U_K(:,k));

end



%% 绘制状态变量和输入的变化

subplot  (2, 1, 1);

hold;

for i =1 :size (X_K,1)

plot (X_K(i,:));

end

legend("x1","x2")

hold off;

subplot (2, 1, 2);

hold;

for i =1 : size (U_K,1)

plot (U_K(i,:));

end

legend("u1","u2")

2、MPC_Matrices.m


function  [E , H]=MPC_Matrices(A,B,Q,R,F,N)



n=size(A,1);   % A 是 n x n 矩阵, 得到 n

p=size(B,2);   % B 是 n x p 矩阵, 得到 p

%%%%%%%%%%%%

M=[eye(n);zeros(N*n,n)]; % 初始化 M 矩阵. M 矩阵是 (N+1)n x n的, 

                         % 它上面是 n x n 个 "I", 这一步先把下半部

                         % 分写成 0 

C=zeros((N+1)*n,N*p); % 初始化 C 矩阵, 这一步令它有 (N+1)n x NP 个 0

% 定义M 和 C 

tmp=eye(n);  %定义一个n x n 的 I 矩阵

% 更新M和C

for i=1:N % 循环,i 从 1到 N

    rows =i*n+(1:n); %定义当前行数,从i x n开始,共n行 

    C(rows,:)=[tmp*B,C(rows-n, 1:end-p)]; %将c矩阵填满

    tmp= A*tmp; %每一次将tmp左乘一次A

    M(rows,:)=tmp; %将M矩阵写满

end 



% 定义Q_bar和R_bar

Q_bar = kron(eye(N),Q);

Q_bar = blkdiag(Q_bar,F);

R_bar = kron(eye(N),R); 



% 计算G, E, H

G=M'*Q_bar*M; % G: n x n

E=C'*Q_bar*M; % E: NP x n

H=C'*Q_bar*C+R_bar; % NP x NP 



end

3、Prediction.m


function u_k= Prediction(x_k,E,H,N,p)

U_k = zeros(N*p,1); % NP x 1

U_k = quadprog(H,E*x_k);

u_k = U_k(1:p,1); % 取第一个结果

end

四、应用总结

模型预测控制(Model Predictive Control, MPC)是一种先进的闭环控制算法,它通过建立系统的数学模型,预测未来一定时间内的系统状态,并基于优化算法计算出最优控制信号。MPC具有以下优缺点:

优点:

  1. 高精度控制:除了考虑当前系统状态外,还能预测未来一段时间的系统状态,因此可以更精确地控制系统;

  2. 鲁棒性强:MPC可以通过修改控制器优化问题的约束来应对外部干扰和不确定性,提高控制系统的鲁棒性;

  3. 可处理复杂系统:MPC可以建立各种复杂系统的数学模型,并通过计算机算法进行优化,适用于多变量、非线性系统等;

  4. 可满足控制要求:MPC可以将多个控制要求统一优化,因此可以满足多个控制目标同时达到。

缺点:

  1. 计算复杂:MPC优化问题通常是一个非凸、非线性的问题,要求大量的计算资源和高效的算法,导致计算复杂度很高;

  2. 运行速度慢:由于计算复杂度高,MPC的运行速度相比其他控制算法要慢很多,因此只能应用于响应速度要求不高的稳态控制系统;

  3. 受模型误差影响:MPC算法是基于系统模型来进行优化的,因此系统模型误差会直接影响算法控制效果。因此,建立准确的系统模型是MPC算法应用的关键。

MPC主要还是应用在控制领域,在自动驾驶、无人机飞行控制、平衡车的控制、四足控制中有着广泛的应用。MPC这种将优化与控制结合的思想也许可以用在更多领域

参考资料:

【【MPC模型预测控制器】1_最优化控制和基本概念】 https://www.bilibili.com/video/BV1cL411n7KV/?share_source=copy_web&vd_source=24db73a73cddacddda48febd1ffc28ef

网络资料等。

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

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

相关文章

随机链表的复制[中等]

优质博文:IT-BLOG-CN 一、题目 给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由n个全新节点组成,其中每个新节点的值都设为…

【论文笔记】A Transformer-based Approach for Source Code Summarization

A Transformer-based Approach for Source Code Summarization 1. Introduction2. Approach2.1 ArchitectureSelf-AttentionCopy Attention 2.2 Position Representations编码绝对位置编码成对关系 1. Introduction 生成描述程序功能的可读摘要称为源代码摘要。在此任务中&…

C++ day55 判断子序列 不同的子序列

题目1:392 判断子序列 题目链接:判断子序列 对题目的理解 判断字符串s是否为t的子序列 字符串s和字符串t的长度大于等于0,字符串s的长度小于等于字符串t的长度,本题其实和最长公共子序列的那道题很相似,相当于找两…

面试就是这么简单,offer拿到手软(四)—— 常见java152道基础面试题

面试就是这么简单,offer拿到手软(一)—— 常见非技术问题回答思路 面试就是这么简单,offer拿到手软(二)—— 常见65道非技术面试问题 面试就是这么简单,offer拿到手软(三&#xff…

【数据结构(七)】查找算法

文章目录 查找算法介绍1. 线性查找算法2. 二分查找算法2.1. 思路分析2.2. 代码实现2.3. 功能拓展 3. 插值查找算法3.1. 前言3.2. 相关概念3.3. 实例应用 4. 斐波那契(黄金分割法)查找算法4.1. 斐波那契(黄金分割法)原理4.2. 实例应用 查找算法介绍 在 java 中,我们…

【Midjourney实战】| 新年礼盒元素设计

文章目录 1 初步提示词2 润色提示词3 提示词发散联想 这期实践任务,我们想去做一个新年礼盒的效果,最后我们想把不同元素拼在一起,方便后期进行新年的相关设计 1 初步提示词 提示词初步我们乍一想,肯定要包括主体元素礼盒 新年礼…

APOLLO自动驾驶技术沙龙:未来已来,共创智能交通新时代

在这次Apollo会议上,我深刻地感受到了人工智能自动驾驶技术领域的最新进展和未来趋势。作为一名从事软件开发工作的人员,我深感荣幸能够参加这次盛会。 前言 本次活动是百度Apollo社区工程师齐聚首钢Park,带来现场实操与技术分享。主要围绕Ap…

好用的挂耳式蓝牙耳机有哪些?四款好用高性价比的耳机推荐

随着生活节奏的加快,挂耳式蓝牙耳机真的是越来越不可或缺了,不管是坐地铁、步行还是运动,一副好用的挂耳式蓝牙耳机都能让你感觉自己像是生活里的主角。但市面上的选择实在是太多了,简直让人眼花缭乱,不过我找了四款真…

仓库管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址: 更多系统资源库地址:更多Java课设系统 更多系统运行效果展示…

很全面 影响无人机自动返航的因素总结

在无人机技术不断成熟的今天,自主返航技术成为保障飞行安全的一种重要工具。无人机在多种情况下能够智能判断,主动实施返航动作,为用户提供更加可靠的飞行保障。以下是一些常见的无人机自动返航场景,让我们深入了解这项技术背后的…

玩转数据8:数据质量管理与数据清洗的实践

引言 在当今数字化时代,数据质量管理和数据清洗对于企业和组织来说变得至关重要。随着大数据的快速增长和数据驱动决策的普及,确保数据的准确性、一致性和完整性成为保证业务成功的关键因素。本文将探讨数据质量管理和数据清洗的概念、目标以及其在Java…

U-Net网络模型改进(添加通道与空间注意力机制)---亲测有效,指标提升

U-Net网络模型(注意力改进版本) 这一段时间做项目用到了U-Net网络模型,但是原始的U-Net网络还有很大的改良空间,在卷积下采样的过程中加入了通道注意力和空间注意力 。 常规的U-net模型如下图: 红色箭头为可以添加的…

电表峰谷平是怎么分时间的?

电表的峰谷平时间是指电力公司根据电力需求的不同,将一天的时间划分为不同的时段,以此来确定不同时间段内的电费价格。这种不同时段对应不同电费价格的制度,旨在更好地平衡电力供需,促进能源的高效利用。 首先,我们来了…

记录一下Mac配置SpringBoot开发环境

由于很多项目喜欢使用传统的 Java 8 进行开发,而且 Java 8 的稳定性也是经过长久考验的,我们接下来就尝试一下,在一台新的 Mac 中配置 Java 环境,并且开始创建 SpringBoot 项目。 首先,去 Oracle 官网下载 java8 JDK …

springboot详解Mybatis-Plus中分页插件PaginationInterceptor标红

1.问题描述 在springboot项目中,类中引用PaginationInterceptor,标红,如下图所示: 2.问题分析 可能是因为pom.xml中的配置原因,导致不支持PaginationInterceptor 3.解决问题 更换版本后 更换后,记得Rel…

开发的客户收到样品表示质量不如原供应商如何应对

有小伙伴问,在开发客户的过程当中,给客户寄了样品,客户说他的样品没有原来供应商的好怎么办? 这个问题我们来想一下,客户既然愿意把地址给我们,愿意去接你的样品,说明什么?说明客户…

【剑指offer|图解|位运算】训练计划VI+撞色搭配

🌈个人主页:聆风吟 🔥系列专栏:数据结构、剑指offer每日一练 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️训练计划VI(题目难度:中等)1.1 题目1.2 示例1.3 …

2024年猫罐头排行榜前十名有哪些?分享2024年猫罐头排行榜前10名

很多人家里的哈基米是不是吃猫粮吃腻了,或者猫猫平时不喜欢喝水,又或者看猫猫太瘦了想入手几款猫罐头但是又愁于不会选择。而且现在猫罐头风这么大不知道选什么好~ 作为从业5年的宠物医生,给你说猫罐头行业内幕。我告诫大家,选择…

Python网络爬虫环境的安装指南

网络爬虫是一种自动化的网页数据抓取技术,广泛用于数据挖掘、信息搜集和互联网研究等领域。Python作为一种强大的编程语言,拥有丰富的库支持网络爬虫的开发。本文将为你详细介绍如何在你的计算机上安装Python网络爬虫环境。 一、安装python开发环境 进…

SIT75179B,5V 供电, 10Mbps,全双工差分芯片/全双工 RS485/RS422 收发器

SIT75179B 是一款 4.5V~5.5V 供电全双工差分芯片,可完全满足 TIA/EIA-485/422 标准要求 的收发器。 SIT75179B 包括一个驱动器和一个接收器,两者均可独立传输信号。 SIT75179B 具有 1/8 负 载,允许 256 个 SIT75179B 收发器并…