前言
本文通关动态规划的思路推导离散LQR的求解方法,本文思路参考 离散LQR黎卡提方程推导 。
同时也可通关拉格朗日乘子法推导,可参考 【基础】自动驾驶控制算法第五讲 连续方程的离散化与离散LQR原理。
目标函数
针对离散线性自治系统(时不变系统、与时间无关):
X
k
+
1
=
A
X
k
+
B
u
k
(1)
X_{k+1}=AX_{k}+Bu_{k} \tag{1}
Xk+1=AXk+Buk(1)
其中,
X
X
X 为系统状态,
u
u
u 为系统输入。
定义优化的目标函数(代价)为:
J
=
X
N
T
P
X
N
+
∑
k
=
1
N
(
X
k
T
Q
X
k
+
u
k
T
R
u
k
)
(2)
J = X_N^TPX_N+\sum_{k=1}^{N}{\left(X_k^TQX_k + u_k^TRu_k\right)} \tag{2}
J=XNTPXN+k=1∑N(XkTQXk+ukTRuk)(2)
LQR的目标是求解得最优控制律
u
k
=
K
X
k
u_k=KX_k
uk=KXk 来使目标函数最小化。
下面将推导如何得到使目标函数最小化的
K
K
K。
动态规划求解
动态规划: 将复杂问题分解为相互重叠的子问题来求解复杂问题
将目标函数记为新的形式:
- 最终状态
k
=
N
k=N
k=N 的代价(由于
X
1
X_1
X1 不受
u
1
u_1
u1 影响,故定义
J
1
J_1
J1 不包含
u
1
u_1
u1):
J N = X N T P X N J_N=X_N^TPX_N JN=XNTPXN - 从最终状态到状态
k
=
N
−
1
k=N-1
k=N−1 的总代价:
J N − 1 = X N − 1 T Q X N − 1 + u N − 1 T R u N − 1 + J N = X N − 1 T Q X N − 1 + u N − 1 T R u N − 1 + X N T P X N J_{N-1}=X_{N-1}^TQX_{N-1} + u_{N-1}^TRu_{N-1} + J_N = X_{N-1}^TQX_{N-1} + u_{N-1}^TRu_{N-1} + X_N^TPX_N JN−1=XN−1TQXN−1+uN−1TRuN−1+JN=XN−1TQXN−1+uN−1TRuN−1+XNTPXN
通过式 (1) 知 X N = A X N − 1 + B u N − 1 X_N=AX_{N-1}+Bu_{N-1} XN=AXN−1+BuN−1,代入上式得:
J N − 1 = X N − 1 T ( A T P A + Q ) X N − 1 + ( A X N − 1 ) T P ( B u N − 1 ) + ( B u N − 1 ) T P ( A X N − 1 ) + u N − 1 T ( B T P B + R ) u N − 1 J_{N-1}=X_{N-1}^T(A^TPA + Q)X_{N-1} + (AX_{N-1})^TP(Bu_{N-1}) + (Bu_{N-1})^TP(AX_{N-1}) + u_{N-1}^T(B^TPB + R)u_{N-1} JN−1=XN−1T(ATPA+Q)XN−1+(AXN−1)TP(BuN−1)+(BuN−1)TP(AXN−1)+uN−1T(BTPB+R)uN−1
因为此处 X X X 和 u u u 为列向量,且P为对角阵,有:
{ A X = [ x 1 x 2 x 3 . . . ] T ( A X ) T = [ x 1 x 2 x 3 . . . ] B u = [ u 1 u 2 u 3 . . . ] T ( B u ) T = [ u 1 u 2 u 3 . . . ] P T = P ⇒ ( A X N − 1 ) T P ( B u N − 1 ) = ( B u N − 1 ) T P ( A X N − 1 ) \left\{ \begin{aligned} AX &=[x_1~x_2~x_3~...]^T \\ (AX)^T &=[x_1~x_2~x_3~...] \\ Bu &=[u_1~u_2~u_3~...]^T \\ (Bu)^T &=[u_1~u_2~u_3~...] \\ P^T &= P \end{aligned} \right. \Rightarrow (AX_{N-1})^TP(Bu_{N-1}) = (Bu_{N-1})^TP(AX_{N-1}) ⎩ ⎨ ⎧AX(AX)TBu(Bu)TPT=[x1 x2 x3 ...]T=[x1 x2 x3 ...]=[u1 u2 u3 ...]T=[u1 u2 u3 ...]=P⇒(AXN−1)TP(BuN−1)=(BuN−1)TP(AXN−1)
有:
J N − 1 = X N − 1 T ( A T P A + Q ) X N − 1 + 2 u N − 1 T ( B T P A ) X N − 1 + u N − 1 T ( B T P B + R ) u N − 1 (3) J_{N-1}=X_{N-1}^T(A^TPA + Q)X_{N-1} + 2u_{N-1}^T(B^TPA)X_{N-1} + u_{N-1}^T(B^TPB + R)u_{N-1} \tag{3} JN−1=XN−1T(ATPA+Q)XN−1+2uN−1T(BTPA)XN−1+uN−1T(BTPB+R)uN−1(3)
通过令导数为 0,求 J N − 1 J_{N-1} JN−1 取最小值时的输入 u N − 1 u_{N-1} uN−1:
∂ J N − 1 ∂ u N − 1 = 2 ( B T P B + R ) u N − 1 + 2 ( B T P A ) X N − 1 = 0 \frac{\partial{J}_{N-1}}{\partial{u}_{N-1}} = 2(B^TPB + R)u_{N-1} + 2(B^TPA)X_{N-1} = 0 ∂uN−1∂JN−1=2(BTPB+R)uN−1+2(BTPA)XN−1=0
得:
u N − 1 = K 1 X N − 1 (4) u_{N-1} = K_1X_{N-1} \tag{4} uN−1=K1XN−1(4)
其中反馈增益 K 1 = − ( B T P B + R ) − 1 ( B T P A ) K_1=-(B^TPB + R)^{-1}(B^TPA) K1=−(BTPB+R)−1(BTPA)。
当P和R正定或半正定时,有2阶导数 ≥ 0 \ge0 ≥0,保证导数为 0 时取到的是最小值:
∂ 2 J 2 ∂ u 1 2 = 2 ( B T P B + R ) ≥ 0 \frac{\partial^2{J_2}}{\partial{u_1}^2} = 2(B^TPB + R) \ge 0 ∂u12∂2J2=2(BTPB+R)≥0
此时的控制律 u N − 1 = K 1 X N − 1 u_{N-1}=K_1X_{N-1} uN−1=K1XN−1 只能保证 J N − 1 J_{N-1} JN−1 最小化。
但通过不断迭代(动态规划),就可以进一步求得使 J 1 J_1 J1 最小化的反馈增益 ( J 1 J_1 J1 为式 (2) )。
构建动态规划:
将式 (4) 代入式 (3) 得:
J N − 1 = X N − 1 T ( A T P A + Q ) X N − 1 + 2 X N − 1 T K 1 T ( B T P A ) X N − 1 + X N − 1 T K 1 T ( B T P B + R ) K 1 X N − 1 = X N − 1 T ( A T P A + Q ) X N − 1 + 2 X N − 1 T K 1 T ( B T P A ) X N − 1 − X N − 1 T K 1 T ( B T P A ) X N − 1 = X N − 1 T ( A T P A + Q + K 1 T ( B T P A ) ) X N − 1 \begin{align*} J_{N-1} &= X_{N-1}^T(A^TPA + Q)X_{N-1} + 2X_{N-1}^TK_1^T(B^TPA)X_{N-1} + X_{N-1}^TK_1^T(B^TPB + R)K_1X_{N-1} \\ &= X_{N-1}^T(A^TPA + Q)X_{N-1} + 2X_{N-1}^TK_1^T(B^TPA)X_{N-1} - X_{N-1}^TK_1^T(B^TPA)X_{N-1} \\ &= X_{N-1}^T(A^TPA + Q + K_1^T(B^TPA))X_{N-1} \end{align*} JN−1=XN−1T(ATPA+Q)XN−1+2XN−1TK1T(BTPA)XN−1+XN−1TK1T(BTPB+R)K1XN−1=XN−1T(ATPA+Q)XN−1+2XN−1TK1T(BTPA)XN−1−XN−1TK1T(BTPA)XN−1=XN−1T(ATPA+Q+K1T(BTPA))XN−1
记 P 1 = A T P A + Q + K 1 T ( B T P A ) P_1 = A^TPA + Q + K_1^T(B^TPA) P1=ATPA+Q+K1T(BTPA),有:
J N − 1 = X N − 1 T P 1 X N − 1 J_{N-1}=X_{N-1}^TP_1X_{N-1} JN−1=XN−1TP1XN−1
由此, J N − 1 J_{N-1} JN−1 转化为了 J N J_N JN 的形式,可以类推得到 J N − 2 J_{N-2} JN−2、 J N − 3 J_{N-3} JN−3、…、 J 1 J_1 J1。 - 类推最终状态到状态
k
=
N
−
2
k=N-2
k=N−2 的总代价:
J N − 2 = X N − 2 T Q X N − 2 + u N − 2 T R u N − 2 + J N − 1 = X N − 2 T Q X N − 2 + u N − 2 T R u N − 2 + X N − 1 T P 1 X N − 1 J_{N-2}=X_{N-2}^TQX_{N-2} + u_{N-2}^TRu_{N-2} + J_{N-1} = X_{N-2}^TQX_{N-2} + u_{N-2}^TRu_{N-2} + X_{N-1}^TP_1X_{N-1} JN−2=XN−2TQXN−2+uN−2TRuN−2+JN−1=XN−2TQXN−2+uN−2TRuN−2+XN−1TP1XN−1
将 X N − 1 = A X N − 2 + B u N − 2 X_{N-1}=AX_{N-2}+Bu_{N-2} XN−1=AXN−2+BuN−2 代入上式得:
J N − 2 = X N − 2 T ( A T P 1 A + Q ) X 2 + 2 u N − 2 T ( B T P 1 A ) X N − 2 + u N − 2 T ( B T P 1 B + R ) u N − 2 J_{N-2}=X_{N-2}^T(A^TP_1A + Q)X_2 + 2u_{N-2}^T(B^TP_1A)X_{N-2} + u_{N-2}^T(B^TP_1B + R)u_{N-2} JN−2=XN−2T(ATP1A+Q)X2+2uN−2T(BTP1A)XN−2+uN−2T(BTP1B+R)uN−2
同理可求得 K 2 = − ( B T P 1 B + R ) − 1 ( B T P 1 A ) K_2=-(B^TP_1B + R)^{-1}(B^TP_1A) K2=−(BTP1B+R)−1(BTP1A),把 u N − 2 = K 2 X N − 2 u_{N-2} = K_2 X_{N-2} uN−2=K2XN−2 代入上式得:
J N − 2 = X N − 2 T ( A T P 1 A + Q + K 2 T ( B T P 1 A ) ) X N − 2 J_{N-2} = X_{N-2}^T(A^TP_1A + Q + K_2^T(B^TP_1A))X_{N-2} JN−2=XN−2T(ATP1A+Q+K2T(BTP1A))XN−2
记 P 2 = A T P 1 A + Q + K 2 T ( B T P 1 A ) P_2 = A^TP_1A + Q + K_2^T(B^TP_1A) P2=ATP1A+Q+K2T(BTP1A),有:
J N − 2 = X N − 2 T P 2 X N − 2 J_{N-2}=X_{N-2}^TP_2X_{N-2} JN−2=XN−2TP2XN−2 - …
- 类推得到最终状态到状态
k
=
1
k=1
k=1 的总代价:
J 1 = X 1 T Q X 1 + u 1 T R u 1 + J 2 = X 1 T Q X 1 + u 1 T R u 1 + X 2 T P N − 2 X 2 J_{1}=X_{1}^TQX_{1} + u_{1}^TRu_{1} + J_{2} = X_{1}^TQX_{1} + u_{1}^TRu_{1} + X_{2}^TP_{N-2}X_{2} J1=X1TQX1+u1TRu1+J2=X1TQX1+u1TRu1+X2TPN−2X2
将 X 2 = A X 1 + B u 1 X_{2}=AX_{1}+Bu_{1} X2=AX1+Bu1 代入上式得:
J 1 = X 1 T ( A T P N − 2 A + Q ) X 1 + 2 u 1 T ( B T P N − 2 A ) X 1 + u 1 T ( B T P N − 2 B + R ) u 1 J_{1}=X_{1}^T(A^TP_{N-2}A + Q)X_1 + 2u_{1}^T(B^TP_{N-2}A)X_{1} + u_{1}^T(B^TP_{N-2}B + R)u_{1} J1=X1T(ATPN−2A+Q)X1+2u1T(BTPN−2A)X1+u1T(BTPN−2B+R)u1
同样可以求得 K N − 1 = − ( B T P N − 2 B + R ) − 1 ( B T P N − 2 A ) K_{N-1}=-(B^TP_{N-2}B + R)^{-1}(B^TP_{N-2}A) KN−1=−(BTPN−2B+R)−1(BTPN−2A)。
注意到 J 1 J_1 J1 已经包含目标函数式 (2) 中的所有项,故控制律 u 1 = K N − 1 X 1 u_{1} = K_{N-1}X_1 u1=KN−1X1 已使目标函数最小化,此时得到LQR的最终解。
迭代流程
- 设置矩阵 P P P, P P P 需为对称矩阵,可令 P = Q P=Q P=Q
- 计算
P
1
P_1
P1:
{ P 1 = A T P A + Q + K 1 T ( B T P A ) K 1 = − ( B T P B + R ) − 1 ( B T P A ) ⇒ P 1 = A T P A + Q − A T P B ( B T P B + R ) − 1 B T P A \begin{align*} & \left\{ \begin{aligned} P_1 &= A^TPA + Q + K_1^T(B^TPA) \\ K_1 &=-(B^TPB + R)^{-1}(B^TPA) \end{aligned} \right. \Rightarrow P_1 = A^TPA + Q - A^TPB(B^TPB + R)^{-1}B^TPA \end{align*} {P1K1=ATPA+Q+K1T(BTPA)=−(BTPB+R)−1(BTPA)⇒P1=ATPA+Q−ATPB(BTPB+R)−1BTPA
上式中,每一项都是对称矩阵,故 P 1 T = P 1 P_1^T=P_1 P1T=P1,相似地有 P k T = P k P_k^T=P_k PkT=Pk
矩阵基础:矩阵A的逆的转置等于矩阵A的转置的逆: ( A T ) − 1 = ( A − 1 ) T (A^T)^{-1}=(A^{-1})^T (AT)−1=(A−1)T
- 同理可计算
P
2
P_2
P2、
P
3
P_3
P3、…:
P 2 = A T P 1 A + Q − A T P 1 B ( B T P 1 B + R ) − 1 B T P 1 A P 3 = A T P 2 A + Q − A T P 2 B ( B T P 2 B + R ) − 1 B T P 2 A ⋮ \begin{align*} P_2 &= A^TP_1A + Q - A^TP_1B(B^TP_1B + R)^{-1}B^TP_1A \\ P_3 &= A^TP_2A + Q - A^TP_2B(B^TP_2B + R)^{-1}B^TP_2A \\ &\hspace{0.5cm} \vdots \end{align*} P2P3=ATP1A+Q−ATP1B(BTP1B+R)−1BTP1A=ATP2A+Q−ATP2B(BTP2B+R)−1BTP2A⋮ - 迭代停止条件:
在LQR的优化中, N → ∞ N \to \infty N→∞,但实际中不可能让其无限迭代。
若系统是渐近稳定的, X ∞ = 0 {X_\infty}=\mathbf{0} X∞=0,这也意味当 N → ∞ N \to \infty N→∞, P N P_N PN趋向于定值(因为总代价 J k = X k T P N X k J_k = X_k^TP_NX_k Jk=XkTPNXk 在系统收敛后不再增加,总代价只与当前状态 X k X_k Xk 有关)。
故迭代停止条件可设为:
∣ P k + 1 − P k ∣ < C |P_{k+1}-P_{k}|<C ∣Pk+1−Pk∣<C
其中 C C C 为定值。
若系统纯在稳态误差, X ∞ ≠ 0 {X_\infty} \ne \mathbf{0} X∞=0,当 N → ∞ N \to \infty N→∞, P N P_N PN可能不会收敛。
故需设置最大迭代次数 N N N ,认为只优化 N N N 步的目标函数。 - 根据迭代得到的
P
k
P_k
Pk 计算反馈增益:
K = − ( B T P k B + R ) − 1 ( B T P k A ) u k = K X k \begin{align*} K &=-(B^TP_kB + R)^{-1}(B^TP_kA) \\ u_k &= KX_k \end{align*} Kuk=−(BTPkB+R)−1(BTPkA)=KXk
MATLAB中实现:
function K = LQR(A, B, Q, R, maxIter, eps)
% A、B分别为系统矩阵和输入矩阵,Q和R分别为状态误差和输入的对角权重矩阵
% maxIter为最大迭代步数N,eps为迭代精度C
i = 1; P = Q; delta = 1e9;
while i < maxIter && delta > eps
Pn = Q + A' * (P - P*B* inv(R+B'*P*B) *B'*P) * A;
delta = max(abs(Pn-P), [], "all");
P = Pn;
i = i+1;
end
K = -inv(R + B' * P * B) * B' * P * A;
end