【MPC学习笔记】02:MPC详细简介(Lecture 1_1 Unconstrained MPC)

本笔记来自北航诸兵老师的课程
课程地址:模型预测控制(2022春)lecture 1-1 Unconstrained MPC
接上一篇:【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)

文章目录

1 详细介绍

1.1 状态方程

对 LTI 离散系统:
x ( k + 1 ) = A x ( k ) + B u ( k ) x ∈ R n , u ∈ R p x(k+1) = Ax(k) + Bu(k)\quad x\in\R^n, u\in R^p x(k+1)=Ax(k)+Bu(k)xRn,uRp

对传统控制系统,连续系统是好处理的,离散系统是要额外考虑其他因素的
对MPC,则是反过来,离散系统是好处理的,连续系统是要额外考虑其他因素的

假设:

  • A , B A,B A,B 可控(Stablizable)
  • 状态和控制输入不存在约束(本节讨论无约束MPC)

Define:
x ( i ∣ k ) , u ( i ∣ k ) x(i|k), u(i|k) x(ik),u(ik): Prediction of i i isteps ahead from time k k k (比如,在时刻 k k k 预测下一时刻的状态,记为 x ( 1 ∣ k ) x(1|k) x(1∣k),当前时刻的输入,记为 u ( 0 ∣ k ) u(0|k) u(0∣k))
预测:
x ( 1 ∣ k ) = A x ( 0 ∣ k ) + B u ( 0 ∣ k ) x ( 2 ∣ k ) = A x ( 1 ∣ k ) + B u ( 1 ∣ k ) = A [ A x ( 0 ∣ k ) + B u ( 0 ∣ k ) ] + B u ( 1 ∣ k ) = A 2 x ( 0 ∣ k ) + A B u ( 0 ∣ k ) + B u ( 1 ∣ k ) ⋮ ⋮ ⋮ x ( i ∣ k ) = A i x ( 0 ∣ k ) + A i − 1 B u ( 0 ∣ k ) + A i − 2 B 2 u ( 1 ∣ k ) + ⋯ + B u ( i − 1 ∣ k ) \begin{aligned} x(1|k) &= Ax(0|k) + Bu(0|k) \\ x(2|k) &= Ax(1|k) + Bu(1|k)=A[Ax(0|k) + Bu(0|k)] + Bu(1|k) \\ &=A^2x(0|k) + ABu(0|k) + Bu(1|k) \\ \quad&\quad \quad \quad \quad \quad \vdots\quad \quad \quad \vdots\quad \quad \quad \vdots \\ x(i|k) &= A^ix(0|k) + A^{i-1}Bu(0|k) + A^{i-2}B^2u(1|k) + \cdots + Bu(i-1|k) \end{aligned} x(1∣k)x(2∣k)x(ik)=Ax(0∣k)+Bu(0∣k)=Ax(1∣k)+Bu(1∣k)=A[Ax(0∣k)+Bu(0∣k)]+Bu(1∣k)=A2x(0∣k)+ABu(0∣k)+Bu(1∣k)=Aix(0∣k)+Ai1Bu(0∣k)+Ai2B2u(1∣k)++Bu(i1∣k)

In compact form:
X ( k ) = F x ( k ) + Φ U ( k ) X(k) = Fx(k) + \Phi U(k) X(k)=Fx(k)+ΦU(k)
X ( k ) ≜ [ x ( 1 ∣ k ) x ( 2 ∣ k ) ⋮ x ( N ∣ k ) ] U ( k ) ≜ [ u ( 0 ∣ k ) u ( 1 ∣ k ) ⋮ u ( N − 1 ∣ k ) ] X(k)\triangleq \begin{bmatrix} x(1|k)\\ x(2|k)\\ \vdots\\ x(N|k) \end{bmatrix} \quad\quad U(k)\triangleq \begin{bmatrix} u(0|k)\\ u(1|k)\\ \vdots\\ u(N-1|k) \end{bmatrix} X(k) x(1∣k)x(2∣k)x(Nk) U(k) u(0∣k)u(1∣k)u(N1∣k)

X ( k ) X(k) X(k) 式中的 x ( k ) x(k) x(k) 也即 x ( 0 ∣ k ) x(0|k) x(0∣k)
≜ \triangleq : 表示定义为
N N N : Control/Predictive horizon,实际上二者有区别,但这里不做区分

1.2 Cost Function

这里cost function 的控制/预测时域是一个有限的数
J ( k ) = ∑ i = 1 N ∣ ∣ x ( i ∣ k ) ∣ ∣ Q 2 + ∣ ∣ u ( i − 1 ∣ k ) ∣ ∣ R 2 = X T ( k ) Q X ( k ) + U T ( k ) R U ( k ) \begin{aligned} J(k) &= \sum^{N}_{i=1}||x(i|k)||_Q^2 + ||u(i-1|k)||_R^2 \\ &= X^T(k)\mathcal{Q}X(k) + U^T(k)\mathcal{R}U(k) \end{aligned} J(k)=i=1N∣∣x(ik)Q2+∣∣u(i1∣k)R2=XT(k)QX(k)+UT(k)RU(k)
假设 Q Q Q R R R是正定的,是权重
Q = [ Q Q ⋱ Q ] R = [ R R ⋱ R ] \mathcal{Q} = \begin{bmatrix} Q\\ &Q\\ &&\ddots\\ &&&Q \end{bmatrix} \quad\quad \mathcal{R} = \begin{bmatrix} R\\ &R\\ &&\ddots\\ &&&R \end{bmatrix} Q= QQQ R= RRR
X ( k ) = F x ( k ) + Φ U ( k ) X(k) = Fx(k) + \Phi U(k) X(k)=Fx(k)+ΦU(k) 代入 J ( k ) J(k) J(k)
J ( k ) = ( F x ( k ) + Φ U ( k ) ) T Q ( F x ( k ) + Φ U ( k ) ) + U T ( k ) R U ( k ) = ( x ( k ) T F T + U ( k ) T Φ T ) ( Q F x ( k ) + Q Φ U ( k ) ) + U T ( k ) R U ( k ) = x ( k ) T F T Q F x ( k ) + U ( k ) T Φ T Q F x ( k ) + x ( k ) T F T Q Φ U ( k ) + U ( k ) T Φ T Q Φ U ( k ) + U T ( k ) R U ( k ) = x ( k ) T F T Q F x ( k ) + 2 x ( k ) T F T Q Φ U ( k ) + U ( k ) T ( Φ T Q Φ + R ) U ( k ) \begin{equation*} \begin{aligned} J(k) &= (Fx(k) + \Phi U(k))^{T} \mathcal{Q} (Fx(k) + \Phi U(k)) + U^T(k)\mathcal{R}U(k) \\ &= (x(k)^TF^T + U(k)^T\Phi^T)(\mathcal{Q}Fx(k) + \mathcal{Q}\Phi U(k))+ U^T(k)\mathcal{R}U(k) \\ &= \textcolor{green}{x(k)^TF^T\mathcal{Q}Fx(k)}+ \textcolor{red}{U(k)^T\Phi^T\mathcal{Q}Fx(k) + x(k)^TF^T\mathcal{Q}\Phi U(k)} + \textcolor{blue}{U(k)^T\Phi^T\mathcal{Q}\Phi U(k)+ U^T(k)\mathcal{R}U(k)} \\ &=\textcolor{green}{x(k)^TF^T\mathcal{Q}Fx(k)}+ \textcolor{red}{2x(k)^TF^T\mathcal{Q}\Phi U(k)} +\textcolor{blue}{U(k)^T(\Phi^T\mathcal{Q}\Phi+\mathcal{R})U(k)} \end{aligned} \end{equation*} J(k)=(Fx(k)+ΦU(k))TQ(Fx(k)+ΦU(k))+UT(k)RU(k)=(x(k)TFT+U(k)TΦT)(QFx(k)+QΦU(k))+UT(k)RU(k)=x(k)TFTQFx(k)+U(k)TΦTQFx(k)+x(k)TFTQΦU(k)+U(k)TΦTQΦU(k)+UT(k)RU(k)=x(k)TFTQFx(k)+2x(k)TFTQΦU(k)+U(k)T(ΦTQΦ+R)U(k)

F x ( k ) Fx(k) Fx(k) Φ U ( k ) \Phi U(k) ΦU(k) 维数相同(是系统状态的维数*N),而 Q \mathcal{Q} Q是一个对角方阵,故 U ( k ) T Φ T Q F x ( k ) = x ( k ) T F T Q Φ U ( k ) = 一个标量 {U(k)^T\Phi^T\mathcal{Q}Fx(k) = x(k)^TF^T\mathcal{Q}\Phi U(k)}=一个标量 U(k)TΦTQFx(k)=x(k)TFTQΦU(k)=一个标量,故红色部分相加相当于其中一个乘2

1.3 状态变量 u ( k ) u(k) u(k) 的求解

Minimize the control function by predictive control series:
(可以不严谨地理解为:让 J J J最小,相当于求 J J J J J J U U U导数为0 点的值)
∇ U ∣ U = U ∗ = ∂ J ∂ U ∣ U = U ∗ = 0 \nabla_U{|}_{U=U^*}=\frac{\partial{J}}{\partial U}{|}_{U=U^*}=0 UU=U=UJU=U=0
∂ J ∂ U = 0 + 2 x ( k ) T F T Q Φ + 2 U ( k ) T ( Φ T Q Φ + R ) \frac{\partial{J}}{\partial U}=\textcolor{green}{0} +\textcolor{red}{2x(k)^TF^T\mathcal{Q}\Phi}+\textcolor{blue}{2U(k)^T(\Phi^T\mathcal{Q}\Phi+\mathcal{R})} UJ=0+2x(k)TFTQΦ+2U(k)T(ΦTQΦ+R)
∂ J ∂ U = 0 \frac{\partial{J}}{\partial U}=0 UJ=0,可得:
x ( k ) T F T Q Φ + U ( k ) T ( Φ T Q Φ + R ) = 0 ( x ( k ) T F T Q Φ + U ( k ) T ( Φ T Q Φ + R ) ) T = 0 ( x ( k ) T F T Q Φ ) T + ( Φ T Q Φ + R ) T U ( k ) = 0 Φ T Q F x ( k ) + ( Φ T Q Φ + R ) U ( k ) = 0 ( Φ T Q Φ + R ) U ( k ) = − Φ T Q F x ( k ) U ( k ) = − ( Φ T Q Φ + R ) − 1 Φ T Q F x ( k ) \begin{equation*} \begin{aligned} \textcolor{red}{x(k)^T F^T \mathcal{Q} \Phi}+\textcolor{blue}{U(k)^T (\Phi^T\mathcal{Q}\Phi+\mathcal{R})}= 0 \\ (\textcolor{red}{x(k)^TF^T\mathcal{Q}\Phi}+\textcolor{blue}{U(k)^T(\Phi^T\mathcal{Q}\Phi+\mathcal{R})})^T=0 \\ \textcolor{red}{(x(k)^TF^T\mathcal{Q}\Phi)^T}+\textcolor{blue}{(\Phi^T\mathcal{Q}\Phi+\mathcal{R})^TU(k)}=0 \\ \textcolor{red}{\Phi^T \mathcal{Q} Fx(k)} + \textcolor{blue} {(\Phi^T\mathcal{Q}\Phi+\mathcal{R})U(k)}=0 \\ \textcolor{blue}{(\Phi^T\mathcal{Q}\Phi+\mathcal{R})U(k)}=-\textcolor{red}{\Phi^T\mathcal{Q}Fx(k)} \\ \textcolor{blue}{U(k)}=-\textcolor{blue}{(\Phi^T\mathcal{Q}\Phi+\mathcal{R})^{-1}}\textcolor{red}{\Phi^T\mathcal{Q}Fx(k)} \end{aligned} \end{equation*} x(k)TFTQΦ+U(k)T(ΦTQΦ+R)=0(x(k)TFTQΦ+U(k)T(ΦTQΦ+R))T=0(x(k)TFTQΦ)T+(ΦTQΦ+R)TU(k)=0ΦTQFx(k)+(ΦTQΦ+R)U(k)=0(ΦTQΦ+R)U(k)=ΦTQFx(k)U(k)=(ΦTQΦ+R)1ΦTQFx(k)
即:
U ( k ) = − ( Φ T Q Φ + R ) − 1 Φ T Q F x ( k ) ( R > 0 , Q ≥ 0 ; o r R ≥ 0 , Q > 0 , a n d Φ i s f u l l y r a n k e d ) \begin{equation*} \begin{aligned} \textcolor{blue}{U(k)}=- \textcolor{blue}{(\Phi^T\mathcal{Q}\Phi+\mathcal{R})^{-1}} \textcolor{red}{\Phi^T\mathcal{Q}Fx(k)}\\ (R>0,Q\ge0;or R\ge0,Q\gt0, and\ \Phi\ is\ fully\ ranked) \end{aligned} \end{equation*} U(k)=(ΦTQΦ+R)1ΦTQFx(k)(R>0,Q0;orR0,Q>0,and Φ is fully ranked)

满足括号里的条件, ( Φ T Q Φ + R ) (\Phi^T\mathcal{Q}\Phi+\mathcal{R}) (ΦTQΦ+R)才可逆

u ∗ ( k ) = − [ I p × p 0 ⋯ 0 ] ( Φ T Q Φ + R ) − 1 Φ T Q F x ( k ) = − K m p c x ( k ) \begin{equation*} \begin{aligned} \begin{aligned} \textcolor{blue}{u^*(k)}&=- \begin{bmatrix} I_{p\times p}&0&\cdots 0 \end{bmatrix} \textcolor{blue}{(\Phi^T\mathcal{Q}\Phi+\mathcal{R})^{-1}} \textcolor{red}{\Phi^T\mathcal{Q}Fx(k)} \\ &=-K_{mpc}x(k) \end{aligned} \end{aligned} \end{equation*} u(k)=[Ip×p00](ΦTQΦ+R)1ΦTQFx(k)=Kmpcx(k)
u ∗ ( k ) u^*(k) u(k) ,则在 U ( k ) U(k) U(k) 前乘一个分块矩阵,对角线上的第一个分块是一个单位阵,维度为控制输入的维度 p p p ,如果不是多输入而是单输入,则 p = 1 p=1 p=1
u ∗ ( k ) u^*(k) u(k) 最后化简为一个常数矩阵 K m p c K_{mpc} Kmpc (因为 Φ \Phi Φ, Q \mathcal{Q} Q, R \mathcal{R} R, F F F这些全部是已知量)乘上 k k k 时刻的状态变量,从形式上看是状态反馈。
因此,无约束线性MPC实际上是一个线性反馈控制。

1.4 举例

在这里插入图片描述
写一段matlab程序,即可求解 F F F Φ \Phi Φ u ∗ ( k ) u^*(k) u(k)。但问题是,求解出来的 u ∗ ( k ) u^*(k) u(k)是否能保证系统是稳定的?
对于有稳定性的判定,有李雅普诺夫直接法李雅普诺夫间接法,见下:
在这里插入图片描述

  1. > 0 和 < 0 >0和<0 >0<0 分别指的是正定和负定
  2. 验证稳定性的前提是 K m p c K_{mpc} Kmpc 存在
  3. 可优化性 并不决定 可稳定性(两种可能的原因见下a和b),所以这里验证稳定性的操作是必要的。
  4. 优化是在一段时间上进行的,在这段时间内, x x x不一定由大变小,也可能先变小再变大,从而不收敛
  5. 对于非最小相位系统,系统响应方向可能相反,N取得不够大时,预测不能反映真实运动趋势,那么优化的不是系统真正的性能,导致不稳定的情况发生

本例采用李雅普诺夫间接法在离散时间系统下的判据
N N N的取值越来越小,如下面这个例子所示, 特征值超出了单位圆,从而不稳定。
在这里插入图片描述
知道如何判断稳定性后,现在的问题变成了:每一次优化后,都要去验证一下系统的稳定性呢?有没有一种机制,保证每一次算出来的 K K K都保证系统的稳定性?

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

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

相关文章

jupyter 配置

# 安装 pip install --upgrade pip setuptools pip install jupyter notebook6.4.9 # 生成Jupyter默认配置文件&#xff0c;并自定义配置选项 jupyter notebook --generate-config # 修改配置文件 /root/.jupyter/jupyter_notebook_config.py 注意使用参数 c.NotebookApp.a…

用python实现调用海康SDK

海康威视&#xff08;Hikvision&#xff09;提供了Python SDK&#xff0c;用于与他们的摄像头和其他设备进行交互。为了使用这些SDK&#xff0c;首先需要在你的系统上安装海康威视的Python库。 下面是如何在Python中使用海康威视的SDK来调用摄像头的方法&#xff1a; python复…

面试算法82:包含重复元素集合的组合

题目 给定一个可能包含重复数字的整数集合&#xff0c;请找出所有元素之和等于某个给定值的所有组合。输出中不得包含重复的组合。例如&#xff0c;输入整数集合[2&#xff0c;2&#xff0c;2&#xff0c;4&#xff0c;3&#xff0c;3]&#xff0c;元素之和等于8的组合有2个&a…

BUUCTF——Reverse——Java逆向解密

1、题目 2、工具 jd-gui&#xff1a;Java反汇编器。 ​python&#xff1a;编写自动化脚本。 3、方法 下载压缩包&#xff0c;解压得到一个.class文件。 ​题目已经说了是java逆向&#xff0c;所以使用jd-gui打开该文件。 代码如下&#xff1a; import java.io.PrintStream; …

WiFi7:EMLSR 操作之二 – 打开和关闭

原文&#xff1a;non-AP MLD如果想打开EMLSR模式&#xff0c;那么 --non-AP STA必须发送EML Operating Mode Notification帧&#xff0c;EML Control域的EMLSR Mode子域设置为1。 --可选的&#xff0c;non-AP STA将EML Control 域的In-Devic Coexistence Activities子域设置为1…

大模型笔记 【1】 大模型初探

以下是Andrej Karpathy一小时讲解chatgpt的笔记。 Andrej Karpathy做自动驾驶的人应该比较熟悉&#xff0c;他是李飞飞的学生。在openAI做了一年半的科学家之后&#xff0c;去了特斯拉。在Tesla AI day讲解tesla自动驾驶方案的就是他。 这里我的主要收获是两个 大模型是一个有…

王道考研计算机组成原理——数据的表示和运算

数制转换 任意进制》十进制&#xff1a;位权*位数即可 整数部分补0是补在头部&#xff0c;小数部分补0是补在尾部 一般都是先把十进制》二进制&#xff1b;然后二进制再转换成8/16进制这样子 一种更快的方法->拼凑法&#xff1a;小数部分整数部分都可以这样求 一般都是先…

挑战Python100题(9)

100+ Python challenging programming exercises 9 Question 81 Please write a program to randomly print a integer number between 7 and 15 inclusive. Hints: Use random.randrange() to a random integer in a given range. 请编写一个程序,随机打印一个介于7和15之间…

Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

Single-Image Crowd Counting via Multi-Column Convolutional Neural Network 论文背景人群密度方法过去的发展历史早期方法基于轨迹聚类的方法基于特征回归的方法基于图像的方法 Multi-column CNN用于人群计数基于密度图的人群计数通过几何自适应核生成密度图密度图估计的多列…

Rhel8安装Postgres

前提 实际上安装数据库的过程大同小异&#xff0c;只要linux的代差和数据库代差不是大的离谱的话都是同样的操作流程 本次工作环境是RHEL8.8&#xff0c;类推RHEL7&#xff0c;8&#xff0c;9没有问题 使用postgre是13版本&#xff0c;话说中文社区只更新到12版本 安装步骤…

ChatGPT在金融财务领域的10种应用方法

1.生成报告 在金融领域中&#xff0c;最耗时的任务之一是报告生成。通过ChatGPT&#xff0c;您可以在一定程度上自动化这个过程。这款人工智能工具可以获取关于公司财务表现的结构化数据&#xff0c;并生成一份书面摘要&#xff0c;详细说明关键点、趋势和观察结果。这个功能在…

【论文+在线运行】AnyText:能准确写汉字的AI绘图工具

源码&#xff1a;https://github.com/tyxsspa/AnyText 阿里在线运行: https://modelscope.cn/studios/damo/studio_anytext/summary 论文&#xff1a;2311.AnyText: Multilingual Visual Text Generation And Editing 一、AnyTexT是什么&#xff1f; 是一个基于扩散模型的&am…

ATE自动测试设备是什么?如何帮助测试电源反复短路?

什么是电源反复短路测试? 反复短路测试是电源极限测试项目之一&#xff0c;是在各种输入和输出状态下将电源输出短路&#xff0c;反复多次短路测试&#xff0c;检测电源是否可以实现保护或回缩&#xff0c;测试结束后之后&#xff0c;电源是否可以自动恢复正常运行。反复短路测…

python初试终章

之前在单机上实现了一个Django服务器&#xff0c;现在我们可以把这个服务器推上一个云平台。这里我选择使用阿里云。 阿里云准备 在阿里云官网(aliyun.com)页面注册阿里云账号。登录后选择云服务器ECS&#xff0c;并选择“创建实例”&#xff1a; 选择操作系统Ubuntu 14.04 …

Java原生启动Tomcat

文章目录 引入依赖启动Tomcat代码示例将嵌入式 Tomcat 服务器用于已有的 WAR 文件为现有的 Java Web 应用程序嵌入 Tomcat 服务器 相关APITomcat APIContonxt API 启动错误springboot底层Tomcat的实现学习博客 引入依赖 maven: <dependency><groupId>org.apache.…

python 深度学习 记录遇到的报错问题10

本篇继python 深度学习 解决遇到的报错问题9_module d2l.torch has no attribute train_ch3-CSDN博客 一、CUDA error: no kernel image is available for execution on the device CUDA kernel errors might be asynchronously reported at some other API call,so the stackt…

数据结构【图篇】

数据结构【图篇】 文章目录 数据结构【图篇】前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、图(一)、图的存储(二)、图的基本操作(三)、最短路径问题 二、拓扑排序三、结语 前言 为什么突然想学算法了&#xff1f; > 用较为“官方…

【PHP】判断字符串是否是json类型,并判断是否是有效数组

要在 PHP 中判断给定的字符串是否是 JSON&#xff0c;可以使用 json_decode() 函数和检查返回值的类型。以下是一个示例&#xff0c;展示了如何判断给定的字符串是否是 JSON&#xff0c;以及如何判断它是数组还是字符串&#xff1a; <?phpfunction isJson($string) {json_…

金融追梦者,向着春天出发——社科院与美国杜兰大学金融管理硕士

随着时代的进步和社会的变迁&#xff0c;教育已经不再是单纯的学生时代的事情&#xff0c;而是贯穿人的一生。特别是在金融行业&#xff0c;由于其变幻莫测的特性&#xff0c;在职继续攻读硕士学位的人越来越多。他们希望通过进一步的学习和研究&#xff0c;提升自己的专业素养…

transformers Trainer自定义optimizer和scheduler

1.需求 我自定义了一个evaluate方法&#xff0c;想在每一轮训练过后都执行一次。如果只是在TrainingArguments里设置warmup_steps100&#xff0c;那么每轮都会重置学习率&#xff0c;也就是每一轮开始的时候都会按照warmup刚开始的学习率进行训练&#xff0c;这就很头疼。 2.…