跳到主要内容

1.3 MPC 调节器入门

来源:James B. Rawlings、David Q. Mayne、Moritz M. Diehl,Model Predictive Control: Theory, Computation, and Design, 2nd Edition,Chapter 1,Section 1.3 Introductory MPC Regulator,教材第 11–25 页。

本节解决什么问题

考虑确定性离散线性系统:

x+=Ax+Bu,y=Cx.(1.5)x^+=Ax+Bu, \qquad y=Cx. \tag{1.5}

本节先假设完整状态可测,即 C=IC=I,目标是把状态调节到原点:

x(k)0.x(k)\to0.

核心问题是:

如何在“状态偏差要小”和“控制动作不能太大”之间折中,并证明闭环最终收敛?

1.3.1 线性二次问题

预测未来 NN 步,并把控制序列记为:

u=(u(0),u(1),,u(N1)).\mathbf{u}= (u(0),u(1),\ldots,u(N-1)).

有限时域二次代价为:

V(x(0),u)=12k=0N1[x(k)TQx(k)+u(k)TRu(k)]+12x(N)TPfx(N).V(x(0),\mathbf{u}) =\frac12\sum_{k=0}^{N-1} \left[x(k)^TQx(k)+u(k)^TRu(k)\right] +\frac12x(N)^TP_fx(N).

优化问题为:

minuV(x(0),u)\min_{\mathbf{u}}V(x(0),\mathbf{u})

满足系统动力学:

x(k+1)=Ax(k)+Bu(k).(1.6)x(k+1)=Ax(k)+Bu(k). \tag{1.6}

三种权重的作用

权重惩罚对象调大后的效果
Q0Q\succeq0预测过程中的状态偏差更积极地把状态拉回原点
R0R\succ0控制输入控制动作更保守、更平滑
Pf0P_f\succeq0终端状态 x(N)x(N)更重视预测末端的位置

R0R\succ0 使代价对控制序列严格凸,在无约束 LQ 问题中保证控制解唯一。

信息

约束是 MPC 与标准 LQ/LQR 控制的重要区别。本节先解决无约束 LQ,以便清楚看到动态规划和 Riccati 递推;约束 MPC 在 Chapter 2 展开。

为什么 Q 大会让控制更激进,而 R 大会让控制更保守?

每一步都在比较:

xTQxuTRu.x^TQx \quad\text{和}\quad u^TRu.

Q/RQ/R 很大,状态偏离原点的代价很贵,优化器愿意支付更大的输入代价来快速消除偏差。

R/QR/Q 很大,输入本身很贵,优化器宁愿让状态慢一些收敛,也不愿产生剧烈控制动作。

因此真正决定行为的是权重的相对尺度,而不是单独看某一个数字。

1.3.2 多阶段函数优化

考虑具有相邻阶段结构的目标:

f(w,x)+g(x,y)+h(y,z),f(w,x)+g(x,y)+h(y,z),

其中 ww 固定,要优化 x,y,zx,y,z

可以一次性联合求解,也可以从最后一级开始:

h0(y)=minzh(y,z),z0(y)=argminzh(y,z),h^0(y)=\min_z h(y,z), \qquad z^0(y)=\arg\min_z h(y,z),

再计算:

g0(x)=miny[g(x,y)+h0(y)],g^0(x)=\min_y[g(x,y)+h^0(y)],

最后:

f0(w)=minx[f(w,x)+g0(x)].f^0(w)=\min_x[f(w,x)+g^0(x)].

这就是 backward dynamic programming(反向动态规划)。

最后阶段 z
↓ 得到 h⁰(y)
倒数第二阶段 y
↓ 得到 g⁰(x)
第一阶段 x
↓ 得到 x⁰(w)

它有效的关键是:未来阶段对过去的全部影响,可以压缩成一个 cost-to-go value function,不必反复枚举完整未来。

前向与反向 DP

  • 调节器已知初始状态、向未来选择控制,因此适合 backward DP。
  • 状态估计已知后面的测量记录、要沿时间整合过去变量,本书后续使用 forward DP 的视角。

二次函数相加仍是二次函数

书中 Example 1.1 考虑:

V1(x)=12(xa)TA(xa),V_1(x)=\frac12(x-a)^TA(x-a), V2(x)=12(xb)TB(xb),V_2(x)=\frac12(x-b)^TB(x-b),

其中 A,B0A,B\succ0。二者之和可写成:

V(x)=12[(xv)TH(xv)+d],V(x)=\frac12\left[(x-v)^TH(x-v)+d\right],

其中:

H=A+B,H=A+B, v=H1(Aa+Bb),v=H^{-1}(Aa+Bb), d=(Aa+Bb)TH1(Aa+Bb)+aTAa+bTBb.d=-(Aa+Bb)^TH^{-1}(Aa+Bb)+a^TAa+b^TBb.

这可以理解为:两个二次“碗”相加,仍然是一个二次碗;新最低点 vv 是受曲率矩阵加权的折中位置。

1.3.3 动态规划求解 LQ

定义阶段代价与终端代价:

(x,u)=12(xTQx+uTRu),\ell(x,u)=\frac12(x^TQx+u^TRu), N(x)=12xTPfx.\ell_N(x)=\frac12x^TP_fx.

在最后一个控制阶段,给定 x(N1)x(N-1),求:

minu(N1)[(x(N1),u(N1))+N(Ax(N1)+Bu(N1))].\min_{u(N-1)} \left[ \ell(x(N-1),u(N-1)) +\ell_N(Ax(N-1)+Bu(N-1)) \right].

把二次项配方后,最优输入是状态的线性函数:

uN10(x)=K(N1)x,u^0_{N-1}(x)=K(N-1)x,

其中:

K(N1)=(BTPfB+R)1BTPfA.K(N-1)= -(B^TP_fB+R)^{-1}B^TP_fA.

最后阶段的最优 cost-to-go 仍是二次函数:

VN10(x)=12xTΠ(N1)x.V^0_{N-1}(x)=\frac12x^T\Pi(N-1)x.

由于它与终端代价形式相同,可以逐级向前重复。

反向 Riccati 递推

终端条件:

Π(N)=Pf.(1.11)\Pi(N)=P_f. \tag{1.11}

k=N1k=N-1 递推至 00

K(k)=(BTΠ(k+1)B+R)1BTΠ(k+1)A,(1.13)K(k)= -\left(B^T\Pi(k+1)B+R\right)^{-1} B^T\Pi(k+1)A, \tag{1.13} Π(k)=Q+ATΠ(k+1)AATΠ(k+1)B(BTΠ(k+1)B+R)1BTΠ(k+1)A.\Pi(k)=Q+A^T\Pi(k+1)A -A^T\Pi(k+1)B \left(B^T\Pi(k+1)B+R\right)^{-1} B^T\Pi(k+1)A.

最优策略与最优 cost-to-go 为:

uk0(x)=K(k)x,u_k^0(x)=K(k)x, Vk0(x)=12xTΠ(k)x.(1.14)V_k^0(x)=\frac12x^T\Pi(k)x. \tag{1.14}
注意

本书把控制律写成 u=Kxu=Kx,因此 KK 的公式自带负号。另一些教材写成 u=Kxu=-Kx,此时它们定义的 KK 通常为正号版本。比较代码或论文时必须先确认符号约定。

完整数值例子:两步有限时域 LQR 如何计算?

取标量系统:

x(k+1)=x(k)+u(k),x(k+1)=x(k)+u(k),

即:

A=1,B=1.A=1,\qquad B=1.

令:

Q=1,R=1,Pf=1,N=2,qquadx(0)=2.Q=1,\qquad R=1,\qquad P_f=1, \qquad N=2,qquad x(0)=2.

目标函数为:

V=12[x02+u02+x12+u12+x22].V=\frac12\left[x_0^2+u_0^2+x_1^2+u_1^2+x_2^2\right].

第一步:从终点初始化

Π(2)=Pf=1.\Pi(2)=P_f=1.

第二步:计算 k=1k=1 的增益

K(1)=BΠ(2)AB2Π(2)+R=12.K(1)= -\frac{B\Pi(2)A}{B^2\Pi(2)+R} =-\frac{1}{2}.

Riccati 矩阵:

Π(1)=Q+A2Π(2)A2B2Π(2)2B2Π(2)+R=1+112=32.\Pi(1) =Q+A^2\Pi(2) -\frac{A^2B^2\Pi(2)^2}{B^2\Pi(2)+R} =1+1-\frac12 =\frac32.

第三步:计算 k=0k=0 的增益

K(0)=Π(1)Π(1)+1=3/25/2=35.K(0)= -\frac{\Pi(1)}{\Pi(1)+1} =-\frac{3/2}{5/2} =-\frac35.Π(0)=1+32(3/2)23/2+1=85.\Pi(0) =1+\frac32- \frac{(3/2)^2}{3/2+1} =\frac85.

第四步:沿时间正向执行控制

u(0)=K(0)x(0)=35×2=65=1.2,u(0)=K(0)x(0) =-\frac35\times2 =-\frac65=-1.2,x(1)=x(0)+u(0)=21.2=0.8.x(1)=x(0)+u(0)=2-1.2=0.8.

下一步:

u(1)=K(1)x(1)=12×0.8=0.4,u(1)=K(1)x(1) =-\frac12\times0.8 =-0.4,x(2)=x(1)+u(1)=0.4.x(2)=x(1)+u(1)=0.4.

第五步:验证最优代价

逐项计算:

V=12(22+(1.2)2+0.82+(0.4)2+0.42)=3.2.V=\frac12 \left(2^2+(-1.2)^2+0.8^2+(-0.4)^2+0.4^2\right) =3.2.

由 value function 直接计算:

V00(x0)=12x02Π(0)=12×4×85=3.2.V_0^0(x_0)=\frac12x_0^2\Pi(0) =\frac12\times4\times\frac85 =3.2.

两种算法完全一致。

这个例子体现了 DP 的两个方向:

先从终端向前递推 Π 和 K

再从初始状态向后执行 u=Kx 和状态方程

1.3.4 无限时域 LQ 问题

有限时域“最优”并不自动保证把一个持续运行的系统稳定下来。若每次都只使用有限时域的第一个增益:

u(k)=K(0)x(k),u(k)=K(0)x(k),

闭环系统是:

x+=(A+BK(0))x.x^+=(A+BK(0))x.

离散系统稳定要求 A+BK(0)A+BK(0) 的全部特征值都在单位圆内。

书中给出一个含不稳定零点的二阶例子:当预测时域 N=5N=5 时,闭环特征值约为:

{1.307, 0.001},\{1.307,\ 0.001\},

因此不稳定;增大到 N=7N=7 后约为:

{0.989, 0.001},\{0.989,\ 0.001\},

才变为稳定。无限时域极限约为:

{0.664, 0.001}.\{0.664,\ 0.001\}.

因此考虑无限时域代价:

V(x(0),u)=12k=0[x(k)TQx(k)+u(k)TRu(k)].(1.15)V(x(0),\mathbf{u})= \frac12\sum_{k=0}^{\infty} \left[x(k)^TQx(k)+u(k)^TRu(k)\right]. \tag{1.15}

对持续运行的过程,无限时域是自然目标;对确实在 NN 时刻结束的批处理过程,则有限时域、时变反馈 u(k)=K(k)x(k)u(k)=K(k)x(k) 更自然。

为什么有限时域控制器可能在末端变得“短视”?

若终端代价 PfP_f 没有正确反映预测时域之后的后果,优化器只关心 00NN 之间的代价。

它可能选择一种在 NN 步内看起来便宜、但在 NN 步之后会让状态发散的动作。预测窗口之外的坏结果没有进入目标函数,因此“有限窗口最优”并不等价于“无限运行稳定”。

终端代价、终端集合、足够长的预测时域和稳定性条件,都是后续 MPC 设计要解决的问题。

1.3.5 可控性

系统 (A,B)(A,B) 可控,意味着可以用有限步输入把任意初始状态 xx 转移到任意目标状态 zz

经过 NN 步:

z=ANx+[BABAN1B][u(N1)u(N2)u(0)].z=A^Nx+ \begin{bmatrix} B&AB&\cdots&A^{N-1}B \end{bmatrix} \begin{bmatrix} u(N-1)\\u(N-2)\\\vdots\\u(0) \end{bmatrix}.

由 Cayley-Hamilton 定理,只需要检查到 n1n-1 次幂。定义可控性矩阵:

C=[BABAn1B].(1.16)\mathcal{C}= \begin{bmatrix} B&AB&\cdots&A^{n-1}B \end{bmatrix}. \tag{1.16}

系统可控当且仅当:

rank(C)=n.\operatorname{rank}(\mathcal{C})=n.

Hautus 判据为:

rank[λIAB]=n,λeig(A).(1.17)\operatorname{rank} \begin{bmatrix} \lambda I-A&B \end{bmatrix}=n, \qquad \forall\lambda\in\operatorname{eig}(A). \tag{1.17}
数值例子:如何检查一个二阶系统是否可控?

设:

A=[1101],B=[01].A= \begin{bmatrix} 1&1\\0&1 \end{bmatrix}, \qquad B= \begin{bmatrix} 0\\1 \end{bmatrix}.

先计算:

AB=[1101][01]=[11].AB= \begin{bmatrix} 1&1\\0&1 \end{bmatrix} \begin{bmatrix} 0\\1 \end{bmatrix} = \begin{bmatrix} 1\\1 \end{bmatrix}.

可控性矩阵:

C=[B AB]=[0111].\mathcal C=[B\ AB] = \begin{bmatrix} 0&1\\1&1 \end{bmatrix}.

其行列式为:

det(C)=10,\det(\mathcal C)=-1\ne0,

所以秩为 2,系统完全可控。

直观上,输入直接改变第二个状态;第二个状态又通过 AA 的耦合影响第一个状态,因此两个方向最终都能控制。

1.3.6 LQR 的收敛性

考虑 Q,R0Q,R\succ0 的无限时域 LQR。如果 (A,B)(A,B) 可控,则:

  1. 从任意状态都存在有限步输入把状态带到零,因此存在有限代价序列。
  2. R0R\succ0 使优化关于控制严格凸,因此最优控制唯一。
  3. 沿闭环轨迹,最优 cost-to-go 满足:
Vk+1=Vk12[x(k)TQx(k)+u(k)TRu(k)].V_{k+1}=V_k- \frac12\left[x(k)^TQx(k)+u(k)^TRu(k)\right].

所以 VkV_k 单调不增且下界为零,必然收敛。于是每一步减少的非负项趋于零:

x(k)TQx(k)0,u(k)TRu(k)0.x(k)^TQx(k)\to0, \qquad u(k)^TRu(k)\to0.

由于 Q,R0Q,R\succ0

x(k)0,u(k)0.x(k)\to0, \qquad u(k)\to0.

离散代数 Riccati 方程

无限时域下,Riccati 递推收敛到常数矩阵 Π\Pi

K=(BTΠB+R)1BTΠA,K=-(B^T\Pi B+R)^{-1}B^T\Pi A, Π=Q+ATΠAATΠB(BTΠB+R)1BTΠA.(1.18)\Pi=Q+A^T\Pi A -A^T\Pi B(B^T\Pi B+R)^{-1}B^T\Pi A. \tag{1.18}

这就是 discrete algebraic Riccati equation(DARE)。最优控制与代价为:

u0(x)=Kx,V0(x)=12xTΠx.u^0(x)=Kx, \qquad V^0(x)=\frac12x^T\Pi x.

闭环矩阵 A+BKA+BK 渐近稳定。

为什么最优代价 V 可以当作 Lyapunov 函数?

Lyapunov 函数需要满足:

  1. 原点之外 V(x)>0V(x)>0
  2. 沿闭环轨迹每一步都下降。

LQR 的最优代价:

V0(x)=12xTΠxV^0(x)=\frac12x^T\Pi x

Π0\Pi\succ0 时是正定的。执行最优控制后:

V0(x+)V0(x)=12(xTQx+uTRu)<0V^0(x^+)-V^0(x) =-\frac12(x^TQx+u^TRu)<0

对任意非零状态成立。

因此 V0V^0 不只是“累计成本”,同时也像系统能量:系统每走一步都消耗一部分正能量,最终只能趋向能量为零的原点。

Chapter 2 会把这套思路推广到有约束和非线性 MPC。

有限时域 LQ 与实际 MPC 的关系

本节求解的是无约束 LQ。实际 receding-horizon MPC 在每个时刻执行:

测量/估计当前状态 x(k)

求解长度 N 的有限时域优化

得到 u*(0), ..., u*(N-1)

只执行 u*(0)

进入下一采样时刻并重新优化

重新优化能利用最新测量抵抗误差和扰动,但它并不会自动消除有限时域稳定性问题。终端代价、终端约束和稳定性条件仍然重要。

本节知识链

二次代价 Q/R/Pf

多阶段优化的相邻结构
↓ backward DP
二次 cost-to-go

Riccati 递推与线性反馈 u=Kx
↓ 增大预测时域
DARE 与无限时域 LQR
↓ 可控性 + 正定代价
最优代价下降,闭环状态收敛

阅读后应能回答

  1. Q,R,PfQ,R,P_f 分别控制什么行为?
  2. 为什么调节器适合使用 backward DP?
  3. 为什么二次 cost-to-go 经过一步优化后仍是二次函数?
  4. Riccati 递推为什么从终端向初始时刻计算?
  5. 为什么有限时域最优不一定保证闭环稳定?
  6. 如何用可控性矩阵判断系统是否可控?
  7. DARE 与有限时域 Riccati 递推是什么关系?
  8. 为什么无限时域最优代价可以作为 Lyapunov 函数?