学习随笔#13 模型预测控制(MPC)

2023-05-16

MPC基本概念

  模型预测控制(MPC)是指通过模型来预测系统在某一未来时间段内的表现来进行优化控制。MPC多用于数位控制,因此使用系统的离散型状态空间表达形式,即 x k + 1 = A x k + B u k x_{k+1}=Ax_k+Bu_k xk+1=Axk+Buk。MPC一般分为3步:

  1. 估计/测量读取当前的系统状态;
  2. 基于 u k u_k uk u k + 1 u_{k+1} uk+1、……、 u k + n u_{k+n} uk+n来进行最优化;
  3. 只取 k k k时刻的系统输入 u k u_k uk,在 k + 1 k+1 k+1时刻,将控制区间(Control Horizon)和预测区间(Predictive Horizon)右移,重新执行前两步。

  这个过程被称为滚动优化控制(Receding Horizon Control)。代价函数(Cost Function)为
J = ∑ k N − 1 ( E k T Q E k + u k T R u k + E N T F E N ) J=\sum^{N-1}_k(E^T_kQE_k+u_k^TRu_k+E_N^TFE_N) J=kN1(EkTQEk+ukTRuk+ENTFEN)
其中 E N E_N EN为最终误差(Terminal Error)。MPC在求解时会考虑系统的约束(Constrains)。

最优化建模

  对于MPC,有很多方法可以对其最优化,这里介绍二次规划(Quadratic Programming)方法。二次规划的一般形式为求 Z T Q Z + C T Z Z^TQZ+C^TZ ZTQZ+CTZ的最小值,在这个式子里,第一项是二次型,第二项是线性的。如果 Q Q Q是一个对角阵,这个式子就变成了一个最小二乘的问题。

建立二次规划模型

  对于一个系统 x ( k + 1 ) = A x ( k ) + B u ( k ) x(k+1)=Ax(k)+Bu(k) x(k+1)=Ax(k)+Bu(k),其中 X X X为状态向量, U U U为系统输入。在 k k k时刻估计的系统在 k k k时刻的输入为 u ( k ∣ k ) u(k|k) u(kk),在k时刻估计的系统在 k + i k+i k+i时刻的输入为 u ( k + i ∣ k ) u(k+i|k) u(k+ik),直到 u ( k + N − 1 ∣ k ) u(k+N-1|k) u(k+N1k) k k k k + N − 1 k+N-1 k+N1为预测区间。对于系统状态也是同样,从 x ( k ∣ k ) x(k|k) x(kk) x ( k + N ∣ k ) x(k+N|k) x(k+Nk),控制区间比预测区间多一个周期。定义
X k = [ x ( k ∣ k ) x ( k + 1 ∣ k ) x ( k + 2 ∣ k ) ⋮ x ( k + N ∣ k ) ] , U k = [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + N ∣ k ) ] X_k=\left[\begin{matrix}x(k|k)\\x(k+1|k)\\x(k+2|k)\\\vdots\\x(k+N|k)\end{matrix}\right], U_k=\left[\begin{matrix}u(k|k)\\u(k+1|k)\\u(k+2|k)\\\vdots\\u(k+N|k)\end{matrix}\right] Xk=x(kk)x(k+1k)x(k+2k)x(k+Nk)Uk=u(kk)u(k+1k)u(k+2k)u(k+Nk)
  假设系统输出 y = x y=x y=x,系统参考 r = 0 r=0 r=0,则系统误差 e = y − r = x e=y-r=x e=yr=x,则系统的代价函数为
J = ∑ i = 0 N − 1 [ x ( k + i ∣ k ) T Q x ( k + i ∣ k ) + u ( k + i ∣ k ) T R u ( k + i ∣ k ) + x ( k + N ) T F x ( k + N ) ] J=\sum^{N-1}_{i=0}[x(k+i|k)^TQx(k+i|k)+u(k+i|k)^TRu(k+i|k)+x(k+N)^TFx(k+N)] J=i=0N1[x(k+ik)TQx(k+ik)+u(k+ik)TRu(k+ik)+x(k+N)TFx(k+N)]为了简化计算, Q Q Q R R R均设为对角矩阵。其中第一项为误差加权和,第二项为输入加权和,第三项为终端误差。
  为了将代价函数与二次规划统一,需要将系统状态 x x x转换为系统输入 u u u的函数。
x ( k ∣ k ) = x k x ( k + 1 ∣ k ) = A x ( k ∣ k ) + B u ( k ∣ k ) = A x k + B u ( k ∣ k ) x ( k + 2 ∣ k ) = A x ( k + 1 ∣ k ) + B u ( k + 1 ∣ k ) = A 2 x k + A B u ( k ∣ k ) + B u ( k + 1 ∣ k ) ⋮ x ( k + N ∣ k ) = A N x k + A N − 1 B u ( k ∣ k ) + ⋯ + B u ( k + N − 1 ∣ k ) \begin{aligned} x(k|k) =& x_k\\x(k+1|k) =&Ax(k|k)+Bu(k|k)\\=&Ax_k+Bu(k|k)\\x(k+2|k)=&Ax(k+1|k)+Bu(k+1|k)\\=&A^2x_k+ABu(k|k)+Bu(k+1|k)\\\vdots\\x(k+N|k)=&A^Nx_k+A^{N-1}Bu(k|k)+\dots+Bu(k+N-1|k) \end{aligned} x(kk)=x(k+1k)==x(k+2k)==x(k+Nk)=xkAx(kk)+Bu(kk)Axk+Bu(kk)Ax(k+1k)+Bu(k+1k)A2xk+ABu(kk)+Bu(k+1k)ANxk+AN1Bu(kk)++Bu(k+N1k)
所以
X k = [ I A A 2 ⋮ A N ] x k + [ 0 0 0 … 0 B 0 0 … 0 A B B 0 … 0 ⋮ ⋮ ⋮ ⋱ ⋮ A N − 1 B A N − 2 B A N − 3 B … B ] [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + N − 1 ∣ k ) ] X_k=\left[\begin{matrix}I\\A\\A^2\\\vdots\\A^N\end{matrix}\right]x_k+\left[\begin{matrix}0&0&0&\dots&0\\B&0&0&\dots&0\\AB&B&0&\dots&0\\\vdots&\vdots&\vdots&\ddots&\vdots\\A^{N-1}B&A^{N-2}B&A^{N-3}B&\dots&B\end{matrix}\right]\left[\begin{matrix}u(k|k)\\u(k+1|k)\\u(k+2|k)\\\vdots\\u(k+N-1|k)\end{matrix}\right] Xk=IAA2ANxk+0BABAN1B00BAN2B000AN3B000Bu(kk)u(k+1k)u(k+2k)u(k+N1k)

X k = M x k + C U k X_k=Mx_k+CU_k Xk=Mxk+CUk
  回到上面的代价函数,如果我们把第一项和第三项展开,就有
x ( k ∣ k ) T Q x ( k ∣ k ) + x ( k + 1 ∣ k ) T Q x ( k + 1 ∣ k ) + ⋯ + x ( k + N − 1 ∣ k ) T Q x ( k + N − 1 ∣ k ) + x ( k + N ∣ k ) T F x ( k + N ∣ k ) x(k|k)^TQx(k|k)+x(k+1|k)^TQx(k+1|k)+\dots+x(k+N-1|k)^TQx(k+N-1|k)+x(k+N|k)^TFx(k+N|k) x(kk)TQx(kk)+x(k+1k)TQx(k+1k)++x(k+N1k)TQx(k+N1k)+x(k+Nk)TFx(k+Nk)
将上式改写为矩阵形式有
原 式 = [ x ( k ∣ k ) x ( k + 1 ∣ k ) x ( k + 2 ∣ k ) ⋮ x ( k + N ∣ k ) ] T [ Q Q Q ⋱ F ] [ x ( k ∣ k ) x ( k + 1 ∣ k ) x ( k + 2 ∣ k ) ⋮ x ( k + N ∣ k ) ] = X T Q ‾ X \begin{aligned} 原式=&\left[\begin{matrix}x(k|k)\\x(k+1|k)\\x(k+2|k)\\\vdots\\x(k+N|k)\end{matrix}\right]^T\left[\begin{matrix}Q&&&&\\&Q&&&\\&&Q&&\\&&&\ddots&\\&&&&F\end{matrix}\right]\left[\begin{matrix}x(k|k)\\x(k+1|k)\\x(k+2|k)\\\vdots\\x(k+N|k)\end{matrix}\right]\\=&X^T\overline{Q}X \end{aligned} ==x(kk)x(k+1k)x(k+2k)x(k+Nk)TQQQFx(kk)x(k+1k)x(k+2k)x(k+Nk)XTQX
同理代价函数的第二项可以化为
原 式 = [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + N ∣ k ) ] T [ R R R ⋱ R ] [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + N ∣ k ) ] = U T R ‾ U \begin{aligned} 原式=&\left[\begin{matrix}u(k|k)\\u(k+1|k)\\u(k+2|k)\\\vdots\\u(k+N|k)\end{matrix}\right]^T\left[\begin{matrix}R&&&&\\&R&&&\\&&R&&\\&&&\ddots&\\&&&&R\end{matrix}\right]\left[\begin{matrix}u(k|k)\\u(k+1|k)\\u(k+2|k)\\\vdots\\u(k+N|k)\end{matrix}\right]\\=&U^T\overline{R}U \end{aligned} ==u(kk)u(k+1k)u(k+2k)u(k+Nk)TRRRRu(kk)u(k+1k)u(k+2k)u(k+Nk)UTRU
代价函数可改写为
J = X k T Q ‾ X k + U k T R ‾ U k = ( M x k + C U k ) T Q ‾ ( M x k + C U k ) + U k T R ‾ U k = ( x k T M T + U k T C T ) Q ‾ ( M x k + C U k ) + U k T R ‾ U k = x k T M T Q ‾ M x k + x k T M T Q ‾ C U k + U k T C T Q ‾ M x k + U k T C T Q ‾ C U k + U k T R ‾ U k = x k T G x k + 2 x k T E U k + U k T H U k \begin{aligned} J=&X^T_k\overline{Q}X_k+U^T_k\overline{R}U_k\\=&(Mx_k+CU_k)^T\overline{Q}(Mx_k+CU_k)+U^T_k\overline{R}U_k\\=&(x^T_kM^T+U^T_kC^T)\overline{Q}(Mx_k+CU_k)+U^T_k\overline{R}U_k\\=&x^T_kM^T\overline{Q}Mx_k+x_k^TM^T\overline{Q}CU_k+U_k^TC^T\overline{Q}Mx_k+U_k^TC^T\overline{Q}CU_k+U_k^T\overline{R}U_k\\=&x_k^TGx_k+2x_k^TEU_k+U_k^THU_k \end{aligned} J=====XkTQXk+UkTRUk(Mxk+CUk)TQ(Mxk+CUk)+UkTRUk(xkTMT+UkTCT)Q(Mxk+CUk)+UkTRUkxkTMTQMxk+xkTMTQCUk+UkTCTQMxk+UkTCTQCUk+UkTRUkxkTGxk+2xkTEUk+UkTHUk
其中 M T Q ‾ M = G M^T\overline{Q}M=G MTQM=G M T Q ‾ C = E M^T\overline{Q}C=E MTQC=E C T Q ‾ C + R ‾ = H C^T\overline{Q}C+\overline{R}=H CTQC+R=H。上式中第一项只与系统的初始状态有关,是标量;第二项是线性项;第三项是二次项。
  本文整理自【MPC模型预测控制器】1_最优化控制和基本概念和MPC模型预测控制器】2_最优化数学建模推导,欢迎大家去关注DR_CAN,他真的好强QAQ。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习随笔#13 模型预测控制(MPC) 的相关文章

  • 2021-01-16 SONiC系统管理9 TPID配置

    SONiC系统管理9 TPID配置 SONiC TPID配置 从SONiC VLAN YANG里面没有看到有TPID的配置能力 xff0c VLAN Range在SONiC VLAN YANG里面也没有 xff0c 二层转发功能的增强让SO
  • 2021-01-17 SONiC系统管理12 零接触部署ZTP

    2021 01 16 SONiC系统管理12 零接触部署ZTP SONiC系统管理12 零接触部署ZTP SONiC系统支持基于DHCP协议Option 67的ZTP零接触部署 SONiC系统启动以后 xff0c 系统自动在所有UP起来的端
  • 2021-02-02 SONiC系统管理 18配置文件格式

    SONiC系统管理 18 配置文件格式 前面说到了SONiC系统启动时通过读取初始配置文件的内容来配置系统 xff0c SONiC系统默认初始配置文件的位置在 etc sonic startup config 文件内容再进一步指示各种不同类
  • 2021-02-06 SONiC SAI结构 Adapter&Adapter Host

    SONiC SAI SAI 结构 SAI是SONiC系统最精华的部分 xff0c SAI spec对SAI如何定义的以及SAI如何被SONiC系统初始化和调用有一些具体的介绍 首先还是一个High Level Design的图 xff1a
  • 2021-02-07 SONiC SAI结构2 1D Bridge

    SONiC SAI结构2 1D Bridge 以太网交换流水线结构 SONiC SAI对交换机 路由器的报文处理流程建立了标准化的行为模型 即使不同的交换芯片内部实现报文处理的方式各不相同 xff0c 由于行为模型是报文处理过程的抽象描述
  • 2021-02-21 SONiC SAI结构5 VXLAN

    SONiC SAI结构5 VXLAN VXLAN报文处理模型流水线结构 SONiC SAI支持VXLAN协议 xff0c 具备支持VTEP的能力 根据报文处理功能模型的特点 xff0c 不同的功能块可以好像搭积木一样组合在一起形成新的功能
  • 2021-02-27 SONiC系统管理 21系统运行平台管理

    2021 02 27 SONiC系统管理 21 系统运行平台管理 SONiC系统通过SAI统一了交换芯片的管理 xff0c 为不同厂家的芯片提供了统一的编程接口 虽然交换芯片提供了系统的最关键的报文处理功能 xff0c 但是作为一个需要在实
  • 2021-03-03 SONiC系统管理 23 SONiC与ONIE

    SONiC系统管理 23 SONiC与ONIE 在开发解耦的白盒交换机设备中 xff0c 在硬件开源的基础上 xff0c 控制软件除SONiC以外也有其它NOS的选择 xff0c 如Cumulus Linux Open Network Li
  • 2021-03-20 SONiC 系统管理 28 静态路由配置

    2021 03 20 SONiC 系统管理 28 静态路由配置 SONiC系统支持通过多种方式配置静态路由 xff0c 包括CLI接口 xff0c 基于RESTCONF YANG方式或者gNMI接口的方式 SONiC静态路由支持IPv4和I
  • 2021-04-26 SONiC: 转发和管理平面接口SAI模型

    2021 04 26 SONiC 转发和管理平面接口SAI模型 SAI模型中转发平面和管理平面接口 转发平面和管理平面之间的接口是控制报文从转发平面传递到控制平面CPU处理的接口 对于各种类型的交换机而言 xff0c 大量不同种类的控制报文
  • 阅读qt贪吃蛇代码、学习

    学qt只有两天而已 xff0c 感觉qt真的很好入门 比mfc容易的很多 学习qt短短时间 xff0c 感觉自己可以仿照别人的代码来写些自己的桌面东西了 不过 xff0c 没有驱动 xff0c 只是兴趣的学习下 可能到此为止了 主要收获 x
  • 2021-05-18 SONiC 系统Loopback地址和管理地址配置

    SONiC 系统管理 37 系统Loopback地址和管理地址配置 SONiC系统可以通过CLI和Config DB来配置Loopback地址 CLI的配置命令和Linux系统配置网口的命令相同 admin 64 switch span c
  • 2021-05-22 SONiC 系统配置命令

    2021 05 20 SONiC 系统管理 39 SONiC系统配置命令 config help This command lists all the possible configuration commands at the top l
  • 2021-05-27 SONiC 系统配置显示命令

    2021 05 27 SONiC 系统管理 40 SONiC系统配置显示命令 show help This command displays the full list of show commands available in the s
  • 2021-06-07 SONiC 系统基于优先级的流控PFC配置命令

    2021 06 07 SONiC 系统管理 42 SONiC 系统基于优先级的流控PFC配置命令 IEEE 802 1Qbb定义的基于优先级的流控Asymmetric Priority Flow Control功能可以在端口上为每个不同的优
  • 2021-06-25 SONiC 系统BGP配置命令

    2021 06 25 SONiC 系统BGP配置命令 SONiC系统BGP配置 SONiC系统所默认包含的BGP模块在201811版的SONiC之前是开源的Quagga软件 xff0c 之后改成了更流行的FRR FRR中的Show命令是以
  • 2021年8月14日 七夕节的相遇 SONiC+P4实现

    2021年8月14日 七夕节的相遇 SONiC 43 P4实现 ONF启动了PINS项目 xff0c P4 integrated network stack
  • 2021-08-20 SONiC中的FRR和Zebra

    2021 08 20 SONiC中的FRR和Zebra SONiC中采用FRR和Zebra处理路由协议 以前写过SONiC系统所默认包含的BGP模块在201811版的SONiC之前是开源的Quagga软件 xff0c 之后改成了更流行的FR
  • 2021-08-29 SONiC中基于策略的哈希配置

    SONiC中基于策略的哈希配置 SONiC可以支持对不同类型的报文采取不同的Hash算法 对于多通道 多链路连接的情况 xff0c 如LAG和ECMP的接口上 xff0c 交换机和路由器采用Hash算法对报文中指定的字段进行Hash计算 x
  • 2021-09-19 当SONiC遇到P4之二

    当SONiC遇到P4之二 P4描述SAI 在当SONiC遇到P4中介绍了用P4来实现SAI Model的方式 xff0c 这种方式利用了P4数据平面编程的功能实现了SAI模型 xff0c 将P4和SONiC这两个分别位于网络数据平面和控制平

随机推荐

  • Cmake 模板和语法

    开始一直犹豫是不是要学cmake对于一个没有项目驱动的人来数 xff0c 感觉用不用都可以 我大可用一个简单的Makefile模板来做一些简单的工程阿 或者我还可以用autotools等 不过既然已经看了一个晚上了 xff0c 还是把它弄懂
  • 2021-09-25 SONiC系统管理32 IFA

    SONiC系统管理32 IFA Inband flow analyzer SONiC系统支持Telemetry的功能 xff0c 在INT中介绍了带内遥测In band Network Telemetry INT 对于遥测的结果 xff0c
  • 自动驾驶网络

    自动驾驶网络 网络为啥要自动驾驶 网络为啥要自动驾驶 自动驾驶网络首先要解决网络测量的问题 有测量才能完成闭环的控制
  • 怎样为SONiC社区做贡献

    64 TOC 2023继续前行 怎样为SONiC社区做贡献 SONiC在社区参与者的贡献下不断成长 xff0c 已经取得了网络操作系统事实上一统江湖的地位 同时SONiC也在不断扩大应用范围 xff0c 国内知名大厂最近在SONiC社区申请
  • cnblog上写了几个PR的内容解读

    cnblog上写了几个PR的内容解读 xff0c 欢迎参观 SONiC系统利用YANG来描述配置文件的格式 基于Radius的认证方式把登录用户的安全认证放在一个集中的Radius服务器上 xff0c 被登录设备在需要进行登录用户认证的时候
  • 无人机基础知识

    刚玩无人机或者想玩无人机的朋友 xff0c 想和圈内人交流交流get新技能 xff0c 却总有点张不开口 xff0c 怕问题一说出来就被鄙视得体无完肤 xff0c 没法继续交流了 不过 xff0c 不了解一些基本常识 xff0c 不记住几个
  • tensorflow解决keras报错 “AlreadyExistsError: Another metric with the same name already exists.“

    tensorflow解决keras报错 34 AlreadyExistsError Another metric with the same name already exists 34 最近要用到keras的一些API xff0c 用co
  • 一、Docker安装及初始化配置(Linux版)

    Docker安装及初始化配置 xff08 Linux版 xff09 1 安装前准备2 docker安装3 docker配置 1 安装前准备 1 切换root用户 xff1a sudo su 2 配置网络源 xff1a vi etc apt
  • 三、Docker常用命令和部署实例(Linux和Windows通用)

    Docker常用命令和部署实例 xff08 Linux和Windows通用 xff09 一 Docker组件和常用命令二 Docker服务命令三 Docker镜像命令四 Docker容器命令五 Docker实例练习1 MySQL容器部署2
  • 四、Dockerfile应用案例教程(将一个或多个jar包部署到docker容器中运行)

    Dockerfile应用案例教程 1 现有环境2 部署方式方式一 xff1a 直接部署jar包为容器 xff08 单个jar包 xff09 方式二 xff1a 以启动jar包打包镜像 xff0c 部署容器 xff08 单个和多个jar包均可
  • Ubuntu虚拟机设置网络桥接模式

    Ubuntu虚拟机设置网络桥接模式 1 虚拟机网络模式介绍1 1 bridged 桥接模式 1 2 host only 主机模式 1 3 NAT 网络地址转换模式 2 设置网络桥接模式2 1 Windows网络适配器设置2 2 Window
  • 完美洗牌算法

    输入 xff0c 如何在O n 的时间 xff0c 用O 1 的空间 xff0c 将这个序列顺序改为 输入 xff1a 1234567dbcdefg 则输出1a2b3c4d5e6f7g 公式 xff1a y 61 2x mod xff08
  • Windows系统安装及初始化设置

    Windows系统安装激活及初始化设置 1 系统安装1 1 iso镜像下载1 2 系统启动盘制作1 3 BIOS设置1 4 常见问题及解决方式问题1 xff1a 引导方式错误 xff08 ERROR BIOS LEGACY BOOT OF
  • E: Problem executing scripts APT和E: Sub-process returned an error code问题修复

    E Problem executing scripts APT Update Post Invoke Success和E Sub process returned an error code问题修复 问题描述原因分析和解决方案 问题描述 在
  • 解决Docker拉取镜像报Error response from daemon: error parsing HTTP 408 response body的问题

    解决Docker拉取镜像报Error response from daemon error parsing HTTP 408 response body的问题 问题描述原因分析和解决方案 xff1a xff1a 问题解决验证 问题描述 Do
  • ROS下运行ORB-SLAM2双目Stereo(官方数据集)

    写在前面 xff1a Ubuntu版本 ROS版本 opencv版本一定要对应 xff01 xff01 xff01 否则后边编译和运行过程中会有许多问题 xff0c 配环境配到怀疑人生 xff01 我的实验环境为 xff1a ubuntu1
  • Arduino学习总结(未完待续)

    文章目录 Arduino 学习硬件认识Arduino UNO 主要元器件Arduino 端口 软件认识Arduino IDEArduino 程序架构程序基础内容简述数据类型时间控制 计时函数延时函数 串口通信 x1f4de 端口间通信的类型
  • rosdep update 超时问题解决

    span class token operator lt span br span class token operator gt span reading span class token keyword in span sources
  • gRPC学习入门

    grpc框架 参考资料 xff1a 官方文档教学grpc go入门https www cnblogs com hongjijun p 13724738 html GRPC是Google公司基于Protobuf开发的跨语言的 高性能的 通用的
  • 学习随笔#13 模型预测控制(MPC)

    MPC基本概念 模型预测控制 xff08 MPC xff09 是指通过模型来预测系统在某一未来时间段内的表现来进行优化控制 MPC多用于数位控制 xff0c 因此使用系统的离散型状态空间表达形式 xff0c 即 x k 43 1