来源: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)
本节先假设完整状态可测,即 C=I,目标是把状态调节到原点:
x(k)→0.
核心问题是:
如何在“状态偏差要小”和“控制动作不能太大”之间折中,并证明闭环最终收敛?
1.3.1 线性二次问题
预测未来 N 步,并把控制序列记为:
u=(u(0),u(1),…,u(N−1)).
有限时域二次代价为:
V(x(0),u)=21k=0∑N−1[x(k)TQx(k)+u(k)TRu(k)]+21x(N)TPfx(N).
优化问题为:
uminV(x(0),u)
满足系统动力学:
x(k+1)=Ax(k)+Bu(k).(1.6)
三种权重的作用
| 权重 | 惩罚对象 | 调大后的效果 |
|---|
| Q⪰0 | 预测过程中的状态偏差 | 更积极地把状态拉回原点 |
| R≻0 | 控制输入 | 控制动作更保守、更平滑 |
| Pf⪰0 | 终端状态 x(N) | 更重视预测末端的位置 |
R≻0 使代价对控制序列严格凸,在无约束 LQ 问题中保证控制解唯一。
约束是 MPC 与标准 LQ/LQR 控制的重要区别。本节先解决无约束 LQ,以便清楚看到动态规划和 Riccati 递推;约束 MPC 在 Chapter 2 展开。
为什么 Q 大会让控制更激进,而 R 大会让控制更保守?
每一步都在比较:
xTQx和uTRu.若 Q/R 很大,状态偏离原点的代价很贵,优化器愿意支付更大的输入代价来快速消除偏差。
若 R/Q 很大,输入本身很贵,优化器宁愿让状态慢一些收敛,也不愿产生剧烈控制动作。
因此真正决定行为的是权重的相对尺度,而不是单独看某一个数字。
1.3.2 多阶段函数优化
考虑具有相邻阶段结构的目标:
f(w,x)+g(x,y)+h(y,z),
其中 w 固定,要优化 x,y,z。
可以一次性联合求解,也可以从最后一级开始:
h0(y)=zminh(y,z),z0(y)=argzminh(y,z),
再计算:
g0(x)=ymin[g(x,y)+h0(y)],
最后:
f0(w)=xmin[f(w,x)+g0(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)=21(x−a)TA(x−a),
V2(x)=21(x−b)TB(x−b),
其中 A,B≻0。二者之和可写成:
V(x)=21[(x−v)TH(x−v)+d],
其中:
H=A+B,
v=H−1(Aa+Bb),
d=−(Aa+Bb)TH−1(Aa+Bb)+aTAa+bTBb.
这可以理解为:两个二次“碗”相加,仍然是一个二次碗;新最低点 v 是受曲率矩阵加权的折中位置。
1.3.3 动态规划求解 LQ
定义阶段代价与终端代价:
ℓ(x,u)=21(xTQx+uTRu),
ℓN(x)=21xTPfx.
在最后一个控制阶段,给定 x(N−1),求:
u(N−1)min[ℓ(x(N−1),u(N−1))+ℓN(Ax(N−1)+Bu(N−1))].
把二次项配方后,最优输入是状态的线性函数:
uN−10(x)=K(N−1)x,
其中:
K(N−1)=−(BTPfB+R)−1BTPfA.
最后阶段的最优 cost-to-go 仍是二次函数:
VN−10(x)=21xTΠ(N−1)x.
由于它与终端代价形式相同,可以逐级向前重复。
反向 Riccati 递推
终端条件:
Π(N)=Pf.(1.11)
从 k=N−1 递推至 0:
K(k)=−(BTΠ(k+1)B+R)−1BTΠ(k+1)A,(1.13)
Π(k)=Q+ATΠ(k+1)A−ATΠ(k+1)B(BTΠ(k+1)B+R)−1BTΠ(k+1)A.
最优策略与最优 cost-to-go 为:
uk0(x)=K(k)x,
Vk0(x)=21xTΠ(k)x.(1.14)
本书把控制律写成 u=Kx,因此 K 的公式自带负号。另一些教材写成 u=−Kx,此时它们定义的 K 通常为正号版本。比较代码或论文时必须先确认符号约定。
完整数值例子:两步有限时域 LQR 如何计算?
取标量系统:
x(k+1)=x(k)+u(k),即:
A=1,B=1.令:
Q=1,R=1,Pf=1,N=2,qquadx(0)=2.目标函数为:
V=21[x02+u02+x12+u12+x22].第一步:从终点初始化
Π(2)=Pf=1.第二步:计算 k=1 的增益
K(1)=−B2Π(2)+RBΠ(2)A=−21.Riccati 矩阵:
Π(1)=Q+A2Π(2)−B2Π(2)+RA2B2Π(2)2=1+1−21=23.第三步:计算 k=0 的增益
K(0)=−Π(1)+1Π(1)=−5/23/2=−53.Π(0)=1+23−3/2+1(3/2)2=58.第四步:沿时间正向执行控制
u(0)=K(0)x(0)=−53×2=−56=−1.2,x(1)=x(0)+u(0)=2−1.2=0.8.下一步:
u(1)=K(1)x(1)=−21×0.8=−0.4,x(2)=x(1)+u(1)=0.4.第五步:验证最优代价
逐项计算:
V=21(22+(−1.2)2+0.82+(−0.4)2+0.42)=3.2.由 value function 直接计算:
V00(x0)=21x02Π(0)=21×4×58=3.2.两种算法完全一致。
这个例子体现了 DP 的两个方向:
先从终端向前递推 Π 和 K
↓
再从初始状态向后执行 u=Kx 和状态方程
1.3.4 无限时域 LQ 问题
有限时域“最优”并不自动保证把一个持续运行的系统稳定下来。若每次都只使用有限时域的第一个增益:
u(k)=K(0)x(k),
闭环系统是:
x+=(A+BK(0))x.
离散系统稳定要求 A+BK(0) 的全部特征值都在单位圆内。
书中给出一个含不稳定零点的二阶例子:当预测时域 N=5 时,闭环特征值约为:
{1.307, 0.001},
因此不稳定;增大到 N=7 后约为:
{0.989, 0.001},
才变为稳定。无限时域极限约为:
{0.664, 0.001}.
因此考虑无限时域代价:
V(x(0),u)=21k=0∑∞[x(k)TQx(k)+u(k)TRu(k)].(1.15)
对持续运行的过程,无限时域是自然目标;对确实在 N 时刻结束的批处理过程,则有限时域、时变反馈 u(k)=K(k)x(k) 更自然。
为什么有限时域控制器可能在末端变得“短视”?
若终端代价 Pf 没有正确反映预测时域之后的后果,优化器只关心 0 到 N 之间的代价。
它可能选择一种在 N 步内看起来便宜、但在 N 步之后会让状态发散的动作。预测窗口之外的坏结果没有进入目标函数,因此“有限窗口最优”并不等价于“无限运行稳定”。
终端代价、终端集合、足够长的预测时域和稳定性条件,都是后续 MPC 设计要解决的问题。
1.3.5 可控性
系统 (A,B) 可控,意味着可以用有限步输入把任意初始状态 x 转移到任意目标状态 z。
经过 N 步:
z=ANx+[BAB⋯AN−1B]u(N−1)u(N−2)⋮u(0).
由 Cayley-Hamilton 定理,只需要检查到 n−1 次幂。定义可控性矩阵:
C=[BAB⋯An−1B].(1.16)
系统可控当且仅当:
rank(C)=n.
Hautus 判据为:
rank[λI−AB]=n,∀λ∈eig(A).(1.17)
数值例子:如何检查一个二阶系统是否可控?
设:
A=[1011],B=[01].先计算:
AB=[1011][01]=[11].可控性矩阵:
C=[B AB]=[0111].其行列式为:
det(C)=−1=0,所以秩为 2,系统完全可控。
直观上,输入直接改变第二个状态;第二个状态又通过 A 的耦合影响第一个状态,因此两个方向最终都能控制。
1.3.6 LQR 的收敛性
考虑 Q,R≻0 的无限时域 LQR。如果 (A,B) 可控,则:
- 从任意状态都存在有限步输入把状态带到零,因此存在有限代价序列。
- R≻0 使优化关于控制严格凸,因此最优控制唯一。
- 沿闭环轨迹,最优 cost-to-go 满足:
Vk+1=Vk−21[x(k)TQx(k)+u(k)TRu(k)].
所以 Vk 单调不增且下界为零,必然收敛。于是每一步减少的非负项趋于零:
x(k)TQx(k)→0,u(k)TRu(k)→0.
由于 Q,R≻0:
x(k)→0,u(k)→0.
离散代数 Riccati 方程
无限时域下,Riccati 递推收敛到常数矩阵 Π:
K=−(BTΠB+R)−1BTΠA,
Π=Q+ATΠA−ATΠB(BTΠB+R)−1BTΠA.(1.18)
这就是 discrete algebraic Riccati equation(DARE)。最优控制与代价为:
u0(x)=Kx,V0(x)=21xTΠx.
闭环矩阵 A+BK 渐近稳定。
为什么最优代价 V 可以当作 Lyapunov 函数?
Lyapunov 函数需要满足:
- 原点之外 V(x)>0。
- 沿闭环轨迹每一步都下降。
LQR 的最优代价:
V0(x)=21xTΠx在 Π≻0 时是正定的。执行最优控制后:
V0(x+)−V0(x)=−21(xTQx+uTRu)<0对任意非零状态成立。
因此 V0 不只是“累计成本”,同时也像系统能量:系统每走一步都消耗一部分正能量,最终只能趋向能量为零的原点。
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
↓ 可控性 + 正定代价
最优代价下降,闭环状态收敛
阅读后应能回答
- Q,R,Pf 分别控制什么行为?
- 为什么调节器适合使用 backward DP?
- 为什么二次 cost-to-go 经过一步优化后仍是二次函数?
- Riccati 递推为什么从终端向初始时刻计算?
- 为什么有限时域最优不一定保证闭环稳定?
- 如何用可控性矩阵判断系统是否可控?
- DARE 与有限时域 Riccati 递推是什么关系?
- 为什么无限时域最优代价可以作为 Lyapunov 函数?