简单入门--无约束线性模型预测控制

2023-11-27 23:20

本文主要是介绍简单入门--无约束线性模型预测控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单入门--无约束模型预测控制

  • 一、模型预测控制是什么?
    • 1. 引言
    • 2. 模型预测控制基础
    • 3. MPC数学模型
  • 二、无约束线性模型预测控制
    • 1. 无约束线性模型预测控制问题-----标准型
    • 2. 无约束线性模型预测控制问题-----紧凑型
    • 3. 无约束线性模型预测控制问题-----解析解
    • 4. MATLAB 代码示例


导读:下棋有高手和菜鸟,高手往往预测未来多步棋局发展,提前布局,而菜鸟只根据当前棋局做选择,显然前瞻不够。模型预测控制有相似的思想。根据当前棋局形势(即系统当前状态)和可能的棋局走势(基于模型预测未来发展),为赢得棋局(根据期望目标),根据自己的经验得出未来多步最优的下棋方案(根据优化方法得出多步最优策略),选择得出的多步最优策略的第一步作为当前步最优决策。并且每次下棋之前都重复上步骤做出最优决策。


一、模型预测控制是什么?

1. 引言

模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,广泛应用于工业过程、自动驾驶、机器人控制等领域。MPC通过数学模型预测未来系统行为,并优化控制输入,以最优化某些性能指标。

2. 模型预测控制基础

MPC的五要素:

在这里插入图片描述

  1. 系统建模:将被控制系统建模成离散或连续时间的状态空间模型,通常表示为状态方程和输出方程。

  2. 性能指标定义:确定性能指标,例如最小化误差、能耗或最大化系统效率等,以评估控制器的性能。

  3. 未来预测:使用系统模型进行未来状态和输出的预测,通常通过数值求解器进行。

  4. 优化问题:在每个控制步骤中,通过求解优化问题来选择控制输入,以最小化性能指标。这是MPC的关键步骤。

  5. 应用控制输入:将最优控制输入应用于系统,然后重复上述步骤。

模型预测控制具体应用步骤:
1)基于当前系统状态及模型预测系统未来走向
2)根据期望目标,通过优化的方法得出当前及未来多步最优策略
3)将得出的多步最优策略中的第一步作为当前最优决策。
4)每步决策之前,重复上述方案,随时间逐步推进。
因此模型预测控制也成后退时域控制。

3. MPC数学模型

min ⁡ u J ≜ F ( x N ) + ∑ i = 0 N − 1 L ( x k + i ∣ k , u k + i ∣ k ) 目标函数 s.t.: x k + i + 1 ∣ k = f ( x k + i ∣ k , u k + i ∣ k ) 系统模型 x k + i ∣ k ∈ X 状态约束 u k + i ∣ k ∈ U 控制约束 x k ∣ k = x k 当前系统状态 u = [ u k ∣ k , … , u k + i ∣ k , … , u k + N − 1 ∣ k ] ⊤ 待优化的控制策略 \begin{aligned} &\mathop{\min}_{u}&& \begin{aligned}J\triangleq F(x_N)+\sum_{i=0}^{N-1}L(x_{k+i|k},u_{k+i|k})\end{aligned} &&目标函数 \\ &\text{s.t.:}&& x_{k+i+1|k}=f(x_{k+i|k},u_{k+i|k}) &&系统模型\\ &&&x_{k+i|k}\in\mathcal{X}&&状态约束\\ &&&u_{k+i|k}\in\mathcal{U}&&控制约束\\ &&& x_{k|k}=x_{k}&&当前系统状态\\ &&& u = \left [ u_{k|k},\dots,u_{k+i|k},\dots,u_{k+N-1|k} \right ] ^\top&&待优化的控制策略 \end{aligned} minus.t.:JF(xN)+i=0N1L(xk+ik,uk+ik)xk+i+1∣k=f(xk+ik,uk+ik)xk+ikXuk+ikUxkk=xku=[ukk,,uk+ik,,uk+N1∣k]目标函数系统模型状态约束控制约束当前系统状态待优化的控制策略


二、无约束线性模型预测控制

当系统模型为线性,即 x k + 1 = A x k + B u k x_{k+1}=Ax_{k}+Bu_{k} xk+1=Axk+Buk, 且无状态约束和控制约束的模型预测控制为无约束线性模型预测控制。

1. 无约束线性模型预测控制问题-----标准型

标准式 P1:
min ⁡ U ˉ J ≜ F ( x N ) + ∑ i = 0 N − 1 L ( x k + i ∣ k , u k + i ∣ k ) 目标函数 s.t.: x k + i + 1 ∣ k = A x k + i ∣ k + B u k + i ∣ k 系统模型 x k ∣ k = x k 当前系统状态 U ˉ = [ u k ∣ k , … , u k + i ∣ k , … , u k + N − 1 ∣ k ] ⊤ 待优化的控制策略 \begin{aligned} &\mathop{\min}_{\bar U}&& \begin{aligned}J\triangleq F(x_N)+\sum_{i=0}^{N-1}L(x_{k+i|k},u_{k+i|k})\end{aligned} &&目标函数 \\ &\text{s.t.:}&& x_{k+i+1|k}=Ax_{k+i|k}+Bu_{k+i|k} &&系统模型\\ &&& x_{k|k}=x_{k}&&当前系统状态\\ &&& \bar U = \left [ u_{k|k},\dots,u_{k+i|k},\dots,u_{k+N-1|k} \right ] ^\top&&待优化的控制策略 \end{aligned} minUˉs.t.:JF(xN)+i=0N1L(xk+ik,uk+ik)xk+i+1∣k=Axk+ik+Buk+ikxkk=xkUˉ=[ukk,,uk+ik,,uk+N1∣k]目标函数系统模型当前系统状态待优化的控制策略
这里目标函数通常选为 J ≜ x k + N ∣ k ⊤ Q N x k + N ∣ k + ∑ i = 0 N − 1 ( x k + i ∣ k ⊤ Q x k + i ∣ k + u k + i ∣ k ⊤ R u k + i ∣ k ) J\triangleq x_{k+N|k}^\top{Q}_Nx_{k+N|k}+\sum_{i=0}^{N-1}\left(x_{k+i|k}^\top{Q}x_{k+i|k}+u_{k+i|k}^\top{R}u_{k+i|k}\right) Jxk+NkQNxk+Nk+i=0N1(xk+ikQxk+ik+uk+ikRuk+ik), 跟踪目标为系统原点; x k + N ∣ k ⊤ Q N x k + N ∣ k x_{k+N|k}^\top{Q}_Nx_{k+N|k} xk+NkQNxk+Nk终端误差指标,确保系统稳定性; x k + i ∣ k ⊤ Q x k + i ∣ k x_{k+i|k}^\top{Q}x_{k+i|k} xk+ikQxk+ik 误差积分指标,越小表示误差积分越小; u k + i ∣ k ⊤ R u k + i ∣ k u_{k+i|k}^\top{R}u_{k+i|k} uk+ikRuk+ik对控制量的指标,越小代表能量消耗越少;这里跟踪目标为系统原点。

2. 无约束线性模型预测控制问题-----紧凑型

1、动态方程转换

a) 根据系统的状态方程 x k + i + 1 ∣ k = A x k + i ∣ k + B u k + i ∣ k x_{k+i+1|k}=Ax_{k+i|k}+Bu_{k+i|k} xk+i+1∣k=Axk+ik+Buk+ik以及初值 x k ∣ k = x k x_{k|k}=x_{k} xkk=xk,递归推导得
x k + 1 ∣ k = A x k ∣ k + B u k ∣ k x k + 2 ∣ k = A x k + 1 ∣ k + B u k + 1 ∣ k = A 2 x k ∣ k + A B u k ∣ k + B u k + 1 … x k + N ∣ k = A x k + N − 1 ∣ k + B u k + N − 1 = A N x k + A N − 1 B u k + … … + A B u k + N − 2 + B u k + N − 1 \begin{aligned}&{x_{k+1|k}=Ax_{k|k}+Bu_{k|k}}\\ &{x_{k+2|k}=Ax_{k+1|k}+Bu_{k+1|k}=A^2x_{k|k}+ABu_{k|k}+Bu_{k+1}}\\ &\dots\\ &x_{k+N|k}={Ax_{k+N-1|k}+Bu_{k+N_-1}=A^{N}x_k+A^{N-1}Bu_k+\ldots\ldots+ABu_{k+N-2}+Bu_{k+N-1}}\end{aligned} xk+1∣k=Axkk+Bukkxk+2∣k=Axk+1∣k+Buk+1∣k=A2xkk+ABukk+Buk+1xk+Nk=Axk+N1∣k+Buk+N1=ANxk+AN1Buk+……+ABuk+N2+Buk+N1

b) 上述方程可以重写为以下紧凑形式
[ x k ∣ k x k + 1 ∣ k x k + 2 ∣ k ⋯ x k + N ∣ k ] ⏟ X ˉ = [ I A A 2 ⋯ A N ] ⏟ A ˉ x k + [ 0 0 . . . 0 B 0 . . . 0 A B B . . . 0 ⋯ . . . . . . . . . A N − 1 B A N − 2 B . . . B ] ⏟ B ˉ [ u k u k + 1 ⋯ ⋯ u k + N − 1 ] ⏟ U ˉ \underbrace{\begin{bmatrix}{x_{k|k}}\\{x_{k+1|k}}\\{x_{k+2|k}}\\\cdots\\{x_{k+N|k}}\end{bmatrix}}_{\bar{{X}}}=\underbrace{\begin{bmatrix}{I}\\{A}\\{A^2}\\\cdots\\A^{N}\end{bmatrix}}_{\bar{A}}{x_k}+\underbrace{\begin{bmatrix}{0}&0&...&0\\{B}&0&...&0\\{AB}&{B}&...&0\\\cdots&...&...&...\\{A^{N-1B}}&{A^{N-2}B}&...&{B}\end{bmatrix}}_{\bar B}\underbrace{\begin{bmatrix}{u_k}\\{u_{k+1}}\\\cdots\\\cdots\\{u_{k+N-1}}\end{bmatrix}}_{\bar U} Xˉ xkkxk+1∣kxk+2∣kxk+Nk =Aˉ IAA2AN xk+Bˉ 0BABAN1B00B...AN2B...............000...B Uˉ ukuk+1uk+N1
即:
X ˉ = A ˉ x k + B ˉ U ˉ \begin{align} {\bar X} = {\bar A}x_{k}+ {\bar B} {\bar U} \end{align} Xˉ=Aˉxk+BˉUˉ
2. 目标函数转换
J = X ˉ ⊤ [ Q ⋱ Q Q N ] ⏟ Q ˉ ( N + 1 ) × ( N + 1 ) X ˉ + U ˉ ⊤ [ R ⋱ R ] ⏟ R ˉ N × N U ˉ = X ˉ ⊤ Q ˉ X ˉ + U ˉ ⊤ R ˉ U ˉ \begin{align} J =& {\bar X}^\top\underbrace{\begin{bmatrix} Q& & & \\ & \ddots & & \\ & & Q& \\ & & &Q_N \end{bmatrix} }_{\bar Q_{(N+1) \times (N+1)}}{\bar X}+{\bar U}^\top\underbrace{\begin{bmatrix} R& & \\ & \ddots& \\ & &R \end{bmatrix}}_{\bar R_{N\times N}} {\bar U} \notag\\ =& {\bar X}^\top{\bar Q}{\bar X}+{\bar U}^\top{\bar R}{\bar U} \end{align} J==XˉQˉ(N+1)×(N+1) QQQN Xˉ+UˉRˉN×N RR UˉXˉQˉXˉ+UˉRˉUˉ

根据标准式 P1,(1)和(2),可以得到无约束线性模型预测控制问题----紧凑型:
min ⁡ U ˉ J = 1 2 U ˉ ⊤ H U ˉ + f ⊤ U ˉ + c 目标函数 s.t.: X ˉ = A ˉ x k + B ˉ U ˉ 系统模型 U ˉ = [ u k ∣ k , … , u k + i ∣ k , … , u k + N − 1 ∣ k ] ⊤ 待优化的控制策略 \begin{aligned} &\mathop{\min}_{\bar U}&& \begin{aligned}J=\frac{1}{2}{\bar U}^\top H{\bar U}+{f^\top}{\bar U}+c\end{aligned} &&目标函数 \\ &\text{s.t.:}&&{\bar X} = {\bar A}x_{k}+ {\bar B} {\bar U} &&系统模型\\ &&& \bar U = \left [ u_{k|k},\dots,u_{k+i|k},\dots,u_{k+N-1|k} \right ] ^\top&&待优化的控制策略 \end{aligned} minUˉs.t.:J=21UˉHUˉ+fUˉ+cXˉ=Aˉxk+BˉUˉUˉ=[ukk,,uk+ik,,uk+N1∣k]目标函数系统模型待优化的控制策略

3. 无约束线性模型预测控制问题-----解析解

将等式约束(1)带入目标函数, 将含等式约束的QP问题转换为无约束的QP问题
J = X ˉ ⊤ Q ˉ X ˉ + U ˉ ⊤ R ˉ U ˉ = x k ⊤ A ˉ ⊤ Q ˉ A ˉ x k + 2 x k ⊤ A ˉ ⊤ Q ˉ B ˉ U ˉ + U ˉ ⊤ B ˉ ⊤ Q ˉ B ˉ U ˉ + U ˉ ⊤ R ˉ U ˉ = 1 2 U ˉ ⊤ 2 ( B ˉ ⊤ Q ˉ B ˉ + R ˉ ) ⏟ H U ˉ + 2 x k ⊤ A ˉ ⊤ Q ˉ B ˉ ⏟ f ⊤ U ˉ + x k ⊤ A ˉ ⊤ Q ˉ A ˉ x k ⏟ c = 1 2 U ˉ ⊤ H U ˉ + f ⊤ U ˉ + c \begin{align} J =& {\bar X}^\top{\bar Q}{\bar X}+{\bar U}^\top{\bar R}{\bar U}\notag\\ =&{x}_k^\top{\bar A}^\top{\bar Q}{\bar A}{x}_k+2{x}_k^\top{\bar A}^\top{\bar Q}{\bar B}{\bar U}+{\bar U}^\top{\bar B}^\top{\bar Q}{\bar B}{\bar U}+{\bar U}^\top{\bar R}{\bar U}\notag\\ =&\frac{1}{2}{\bar U}^\top \underbrace{2\left({\bar B}^\top{\bar Q}{\bar B}+{\bar R}\right)}_{H} {\bar U}+ \underbrace{2{x}_k^\top{\bar A}^\top{\bar Q}{\bar B}}_{f^\top}{\bar U}+ \underbrace{{x}_k^\top{\bar A}^\top{\bar Q}{\bar A}{x}_k}_{c}\notag\\ =&\frac{1}{2}{\bar U}^\top H{\bar U}+{f^\top}{\bar U}+c\notag \end{align} J====XˉQˉXˉ+UˉRˉUˉxkAˉQˉAˉxk+2xkAˉQˉBˉUˉ+UˉBˉQˉBˉUˉ+UˉRˉUˉ21UˉH 2(BˉQˉBˉ+Rˉ)Uˉ+f 2xkAˉQˉBˉUˉ+c xkAˉQˉAˉxk21UˉHUˉ+fUˉ+c
其中
H = 2 ( B ˉ ⊤ Q ˉ B ˉ + R ˉ ) , f = B ˉ ⊤ Q ˉ A ˉ x k = G x k H=2\left({\bar B}^\top{\bar Q}{\bar B}+{\bar R}\right),f={\bar B}^\top{\bar Q}{\bar A}{x}_k=G{x}_k H=2(BˉQˉBˉ+Rˉ),f=BˉQˉAˉxk=Gxk
根据函数的极值条件, U ˉ ∗ {\bar U}^* Uˉ ∇ J ( U ˉ ∗ ) = 0 \nabla{J}({\bar U}*)=0 J(Uˉ)=0;目标函数为二次函数(凸函数), U ˉ ∗ {\bar U}^* Uˉ为最优解。
根据目标函数 J J J的表达式以及极值条件,我们得出 无约束线性模型预测控制问题-----解析解
U ˉ ∗ = − H − 1 f = − H − 1 G x k {\bar U}^* =- H^{-1}f=- H^{-1}G{x}_k Uˉ=H1f=H1Gxk

4. MATLAB 代码示例

代码如下(示例):

clear; clc; close all;
% 线性系统系数矩阵
A=[1 0 1 0; 0 1 0 1;0 0 1 0; 0 0 0 1]; 
B=[0 0;0 0;1 0;0 1];
% 初始状态量-如果不能在下一步回到约束范围内,则会造成无解
x0=[8; -4; -0.2;-0.1];
% 预测步长
N=5;
% 优化目标参数,加权矩阵
Q=[10 0  0 0;0 20 0 0; 0 0  100 0 ;0 0  0 100 ];
R=eye(size(B,2));% 紧凑形式矩阵
At=zeros(size(A,1)*N,size(A,1));
Bt = zeros(size(A,1)*N,size(B,2)*N);    
for i=1:1:NAt(size(A,1)*(i-1)+1:size(A,1)*i,:) = A^i;for j=1:1:iBt(size(A,1)*(i-1)+1:size(A,1)*i,size(B,2)*(j-1)+1:size(B,2)*j)=A^(i-j)*B;end
endQ_bar = kron(eye(N),Q);
R_bar = kron(eye(N),R);H=2*(Bt'*Q_bar*Bt + R_bar);
G = Bt'*Q_bar*At;%初始值
x=x0;
xk=x0;for k=1:100%最优解U = -H\G*xk;% 采用优化得到的控制量的第一个元素作为实际作用的控制量,代入到原系统中得到下一个时刻的状态量u(:,k) = U(1:size(B,2));%动态方程更新x(:, k+1) = A*x(:, k) + B*u(:,k);xk = x(:, k+1);
end%状态图
figure('Color','w');
plot(x(1,:),'c-','LineWidth',1.5);hold on
plot(x(2,:),'g-','LineWidth',1.5);hold on
plot(x(3,:),'b-','LineWidth',1.5);hold on
plot(x(4,:),'m-','LineWidth',1.5);hold on
legend('$x_1$','$x_2$','$x_3$','$x_4$','Interpreter','latex');
set(gca,'FontSize',20,'FontName','Times New Roman');%控制量图
figure('Color','w');
plot(u(1,:),'c-','LineWidth',1.5);hold on
plot(u(2,:),'g-','LineWidth',1.5);hold on
legend('$u_1$','$u_2$','Interpreter','latex');
set(gca,'FontSize',20,'FontName','Times New Roman');

这篇关于简单入门--无约束线性模型预测控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/428655

相关文章

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、