模型预测控制(MPC)的公式推导与理解

  • Post author:
  • Post category:其他


在本文中,主要是针对线性无约束系统,设计模型预测控制算法。首先给出一个离散的数学模型,再根据模型预测控制“三步走”战略,实现控制器的设计。

“三步走”战略:

  1. 预测系统未来动态
  2. 求解优化问题
  3. 解第一个元素作用于系统

模型:

我们引入离散时间的状态空间模型,如下

\left\{ {\begin{array}{*{20}{c}} x(k+1)=Ax(k)+B_uu(k)+B_dd(k)\\ y(k)=Cx(k) \end{array}} \right.

其中
x(k)\in\mathbb{R}^{n_x}
为系统内部状态变量;
A\in\mathbb{R}^{n_x\times n_x}
为系统矩阵;
B_u\in\mathbb{R}^{n_x\times n_u}
为控制输入矩阵;
u(k)\in \mathbb{R}^{n_u}
为控制输入变量;
B_d\in\mathbb{R}^{n_x\times n_d}
为外部干扰输入矩阵;
d(k)\in\mathbb{R}^{n_d}
为可测外部干扰变量。

预测方程:

将模型改成增量模型

x(k+1)=Ax(k)+B_uu(k)+B_dd(k)

x(k)=Ax(k-1)+B_uu(k-1)+B_dd(k-1)

相减之后为

\Delta x(k+1)=A\Delta x(k)+B_u\Delta u(k)+B_d \Delta d(k)

其中
\Delta x(k+1)=x(k+1)-x(k)

\Delta u(k+1)=u(k+1)-u(k)

\Delta d(k)=d(k)-d(k-1)

另外

y(k)=Cx(k)

x(k)=x(k-1)+\Delta x(k)

合并之后为

y(k)=C\Delta x(k)+y_c(k-1)

以最新测量值为初始条件,预测时域为p,控制时域为m,并且有以下两个假设:

  1. \Delta u(k+i)=0,i=m,m+1,...,p-1
  2. \Delta d(k+i)=0,i=1,2,...,p-1

\Delta x(k+1|k)=A\Delta x(k)+B_u\Delta u(k)+B_d \Delta d(k)

其中
\Delta x(k+1|k)
表示第k个时刻对第k+1个时刻的状态预测。

\begin{align*} \Delta x(k+2|k)&=A\Delta x(k+1|k)+B_u\Delta u(k+1)+B_d \Delta d(k+1)\\ &=A^2\Delta x(k)+AB_u\Delta u(k)+B_u\Delta u(k)+AB_d\Delta d(k) \end{align*}

\vdots

\begin{align*} \Delta x(k+m|k)=A^m\Delta x(k)+A^{m-1}B_u\Delta u(k)+A^{m-2}B_u\Delta u(k+1)+\cdots +B_u\Delta u(k+m-1)+A^{m-1}B_dd(k) \end{align*}

\vdots

\Delta x(k+p|k)=A^p \Delta x(k)+A^{p-1}B_u\Delta u(k)+A^{p-2}B_u\Delta u(k+1)+\cdots+A^{p-m}B_u\Delta u(k+m-1)+A^{p-1}B_d\Delta d(k)

进一步输出方程可以为

\begin{aligned} y(k+1 | k) &=C \Delta x(k+1 | k)+y(k) \\ &=C A \Delta x(k)+C B_{u} \Delta u(k)+C B_{d} \Delta d(k)+y(k) \end{aligned}

\begin{align*} y(k+2 | k) =&\left(CA^{2}+C A\right) \Delta x(k)+\left(C A B_{u}+C B_{u}\right) \Delta u(k) \\ &+C B \Delta u(k+1)+\left(C A B_{d}+C B_{d}\right) \Delta d(k)+y(k) \end{align*}

\vdots

\vdots
\begin{aligned} y(k+m | k) =&\sum_{i=1}^{m} C A^{i} \Delta x(k)+\sum_{i=1}^{m} C A^{i-1} B_{u} \Delta u(k) +\sum_{i=1}^{m-1} C A^{i-1} B_{u} \Delta u(k+1)+\cdots \\ &+C B_{u} \Delta u(k+m-1) +\sum_{i=1}^{m} C A^{i-1} B_{d} \Delta d(k)+y(k) \end{aligned}

\begin{aligned} y(k+p | k) =&\sum_{i=1}^{p} A^{i} \Delta x(k)+\sum_{i=1}^{p} CA^{i-1} B_{u} \Delta u(k)+\sum_{i=1}^{p-1} CA^{i-1} B_{u} \Delta u(k+1)+\cdots \\ &+\sum_{i=1}^{p-m+1} C A^{i-1} B_{u} \Delta u(k+m-1) +\sum_{i=1}^{p} C A^{i-1} B_{d} \Delta d(k)+y(k) \end{aligned}

定义以下向量

\begin{aligned} Y_{p}(k+1 | k) \stackrel{\text { def }}{=}\left[\begin{array}{c} y(k+1 | k) \\ y(k+2 | k) \\ \vdots \\ y(k+p | k) \end{array}\right] \\ \Delta U(k) \stackrel{\text { def }}{=}\left[\begin{array}{c} \Delta u(k) \\ \Delta u(k+1) \\ \vdots \\ \Delta u(k+m-1) \end{array}\right] \end{aligned}

那么,对系统未来
p
步预测的输出

Y_p(k+1|k)=S_x\Delta x(k)+\mathcal {I} y_c(k)+S_d\Delta d(k)+S_u\Delta U(k)

其中

\mathcal{S}_{x}=\left[\begin{array}{c} C A \\ \sum_{i=1}^{2} C A^{i} \\ \vdots \\ \sum_{i=1}^{p} C A^{i} \end{array}\right] \quad I=\left[\begin{array}{c} I_{n_{e} \times n_{e}} \\ I_{n_{e} \times n_{e}} \\ \vdots \\ I_{n_{e} \times n_{e}} \end{array}\right] \quad S_{d}=\left[\begin{array}{c} C B_{d} \\ \sum_{i=1}^{2} C A^{i-1} B_{d} \\ \vdots \\ \sum_{i=1}^{p} C A^{i-1} B_{d} \end{array}\right]

\mathcal{S}_{u}=\left[\begin{array}{cccccc} C B_{u} & \mathbf{0} & \mathbf{0} & \cdots & \mathbf{0} \\ \sum_{i=1}^{2} C A^{i-1} B_{u} & C B_{u} & \mathbf{0} & \cdots & \mathbf{0} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \sum_{i=1}^{m} C A^{i-1} B_{u} & \sum_{i=1}^{m-1} C A^{i-1} B_{u} & \cdots & \cdots & C B_{u} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \sum_{i=1}^{p} C A^{i-1} B_{u} & \sum_{i=1}^{p-1} C A^{i-1} B_{u} & \cdots & \cdots & \sum_{i=1}^{p-m+1} C A^{i-1} B_{u} \end{array}\right]

优化问题描述:

对于此优化问题考虑两个方面,一是输出跟踪上参考输入;二是尽可能减少控制幅度。目标函数选择如下:

J=\sum_{i=1}^{p}\left\|\Gamma_{y, i}\left(y(k+i | k)-r(k+i)\right)\right\|^{2}+\sum_{i=1}^{m}\left\|\Gamma_{u, i} \Delta u(k+i-1)\right\|^{2}

其中
\Gamma_{y,i}\stackrel{\text { def }}{=}diag(\Gamma_{y_1,i},\Gamma_{y_2,i},\cdots,\Gamma_{y_{n_c},i})

\Gamma_{u,i}\stackrel{\text { def }}{=}diag(\Gamma_{u_1,i},\Gamma_{u_2,i},\cdots,\Gamma_{u_{n_u},i})

\Gamma_{y_j,i}
是第i步预测的第j个输出的误差的加权因子,
\Gamma_{u_j,i}
是第i步预测对控制增量第j个分量的加权因子。改写为矩阵形式:

J(x(k), \Delta U(k), m, p)=\left\|\Gamma_{y}\left(Y_{p}(k+1 | k)-R(k+1)\right)\right\|^{2}+\left\|\Gamma_{u} \Delta U(k)\right\|^{2}

其中:
\Gamma_y=diag(\Gamma_{y,1},\Gamma_{y,2},\cdots,\Gamma_{y,p})

\Gamma_u=diag(\Gamma_{u,1},\Gamma_{u,2},\cdots,\Gamma_{u,p})
,参考输入序列为

R(k+1)=\left[\begin{array}{c} r(k+1) \\ r(k+2) \\ \vdots \\ r(k+p) \end{array}\right]

问题可以被描述为:
\min _{\Delta U(k)} J(x(k), \Delta U(k), m, p)

满足动力学模型:
Y_p(k+1|k)=S_x\Delta x(k)+\mathcal {I} y_c(k)+S_d\Delta d(k)+S_u\Delta U(k)

定义一个辅助变量

\rho=\left[\begin{array}{c} \Gamma_{y}\left(Y_{p}(k+1 | k)-R(k+1)\right) \\ \Gamma_{u} \Delta U(k) \end{array}\right]

将预测方程带入可得

\begin{aligned} \rho =&\left[\begin{array}{c} \Gamma_{y}\left(\mathcal{S}_{x} \Delta x(k)+\mathcal{I} y_{c}(k)+\mathcal{S}_{d} \Delta d(k)+\mathcal{S}_{u} \Delta U(k)-R(k+1)\right) \\ \Gamma_{u} \Delta U(k) \end{array}\right] \\ =&\left[\begin{array}{c} \Gamma_{y} \mathcal{S}_{u} \\ \Gamma_{u} \end{array}\right] \Delta U(k) \\ &-\left[\begin{array}{c} \Gamma_{y} {\left(R(k+1)-\mathcal{S}_{x} \Delta x(k)-\mathcal{I} y_{c}(k)-\mathcal{S}_{d} \Delta d(k)\right)} \\ \mathbf{0} \end{array}\right] \\ =&\mathcal{A}z-b \end{aligned}

其中

\begin{array}{l} z=\Delta U(k), \quad \mathcal{A}=\left[\begin{array}{c} \Gamma_{y} \mathcal{S}_{u} \\ \Gamma_{u} \end{array}\right], \quad b=\left[\begin{array}{c} \Gamma_{y} E_{p}(k+1 | k) \\ \mathbf{0} \end{array}\right] \end{array}

E_{p}(k+1 | k)=R(k+1)-\mathcal{S}_{x} \Delta x(k)-\mathcal{I} y_{c}(k)-\mathcal{S}_{d} \Delta d(k)

因此
\min _{z} \rho^{\mathrm{T}} \rho=(\mathcal{A}z-b)^T(\mathcal {A}z-b)
的极值解为
z^*=(\mathcal A^T\mathcal A)^{-1}\mathcal A^Tb
。(充要条件自证)

最优控制序列为:

\Delta U^{*}(k)=\left(\mathcal{S}_{u}^{\mathrm{T}} \Gamma_{y}^{\mathrm{T}} \Gamma_{y} \mathcal{S}_{u}+\Gamma_{u}^{\mathrm{T}} \Gamma_{u}\right)^{-1} \mathcal{S}_{u}^{\mathrm{T}} \Gamma_{y}^{\mathrm{T}} \Gamma_{y} E_{p}(k+1 | k)

解第一个元素

\Delta u(k)=\left[\begin{array}{cccc} I_{n_{u} \times n_{u}} & \mathbf{0} & \cdots & \mathbf{0} \end{array}\right]_{1 \times m} \Delta U^{*}(k)

定义
K_{\mathrm{mpc}}=\left[\begin{array}{cccc} I_{n_{u} \times n_{u}} & \mathbf{0} & \cdots & \mathbf{0} \end{array}\right]_{1 \times m}\left(\mathcal{S}_{u}^{\mathrm{T}} \Gamma_{y}^{\mathrm{T}} \Gamma_{y} \mathcal{S}_{u}+\Gamma_{u}^{\mathrm{T}} \Gamma_{u}\right)^{-1} \mathcal{S}_{u}^{\mathrm{T}} \Gamma_{y}^{\mathrm{T}} \Gamma_{y}
,因此控制增量可以写为

\Delta u(k)=K_{\mathrm{mpc}} E_{p}(k+1 | k)

理解:


E_{p}(k+1 | k)=R(k+1)-\mathcal{S}_{x} \Delta x(k)-\mathcal{I} y_{c}(k)-\mathcal{S}_{d} \Delta d(k)
带入
\Delta u(k)=K_{\mathrm{mpc}} E_{p}(k+1 | k)
,可得

\begin{aligned} \Delta u(k)=& K_{\mathrm{mpc}} R(k+1)-K_{\mathrm{mpc}}\left(\mathcal{S}_{x}+\mathcal{I} C_{c}\right) \Delta \hat{x}(k) -K_{\mathrm{mpc}} \mathcal{I} \hat{y}_{c}(k-1)-K_{\mathrm{mpc}} \mathcal{S}_{d} \Delta d(k) \end{aligned}

  1. K_{\mathrm{mpc}} R(k+1)
    相当于未来参考输入的前馈补偿;
  2. -K_{\mathrm{mpc}} \mathcal{S}_{d} \Delta d(k)
    相当于可预测扰动的前馈补偿;
  3. -K_{\mathrm{mpc}}\left(\mathcal{S}_{x}+\mathcal{I} C_{c}\right) \Delta \hat{x}(k) -K_{\mathrm{mpc}} \mathcal{I} \hat{y}_{c}(k-1)
    相当于状态反馈补偿。



版权声明:本文为qq_40241332原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。