引言
考虑一个离散线性二次型系统的状态空间方程为
x
k
+
1
=
A
x
k
+
B
u
k
(1)
x_{k+1}=Ax_k+Bu_k \tag{1}
xk+1=Axk+Buk(1)
其中,
u
k
u_k
uk为
n
×
1
n \times 1
n×1的控制向量,
x
k
x_k
xk为
m
×
1
m \times 1
m×1的状态向量,状态矩阵
A
∈
R
m
×
m
A\in R^{m\times m}
A∈Rm×m ,输入矩阵
B
∈
R
m
×
n
B \in R^{m\times n}
B∈Rm×n,
离散LQR(Linear Quadratic Regulator)是针对离散时间线性系统的最优控制方法。它是连续时间LQR的离散化版本,用于解决在离散时间步长上系统的最优控制问题。离散LQR的目标是找到一个控制策略,使得从初始状态到最终状态的整个过程中的性能指标(代价函数)最小化。
离散LQR的性能指标通常定义为:
J
=
∑
k
=
0
N
−
1
(
x
k
T
Q
x
k
+
u
k
T
R
u
k
)
+
x
N
T
F
x
N
(2)
J = \sum_{k=0}^{N-1} (x_k^T Q x_k + u_k^T R u_k) + x_N^T F x_N \tag{2}
J=k=0∑N−1(xkTQxk+ukTRuk)+xNTFxN(2)
其中:
- x k x_k xk 是在离散时间步 k k k的系统状态。
- u k u_k uk是在时间步 k k k的控制输入。
- Q Q Q是状态权重 m × m m \times m m×m的半正定方阵,用于衡量状态的代价,通常将其设计为对角矩阵。
- R R R是控制权重 n × n n \times n n×n的正定对称矩阵,用于衡量控制输入的代价,通常将其设计为对角矩阵。
- F F F是末端状态权重 m × m m \times m m×m的半正定方阵,用于衡量最终状态的代价,通常将其设计为对角矩阵。
- N N N是控制的总时间步数。
LQR求解
归纳通用迭代方程
根据(2)式,我们可以采用逆向分级的思想对其进行分析求解:
-
当 k = N k=N k=N时,系统从 k = N k=N k=N到 k = N k=N k=N的代价为
J N → N = x N T F x N (3) J_{N \to N}=x_N^TFx_N \tag{3} JN→N=xNTFxN(3)
这里当 k = N k=N k=N时候,系统已经达到最终的 x N x_N xN的状态,因此 J N → N J_{N \to N} JN→N只存在末端代价,此时对应的代价就是最优代价,即
J N → N ∗ = x N T F x N = x N T P N x N (4) J_{N \to N}^* = x_N^TFx_N = x_N^TP_Nx_N\tag{4} JN→N∗=xNTFxN=xNTPNxN(4)
上式中为了后面方便归纳,我们设 P N = F P_N=F PN=F。 -
当 k = N − 1 k=N-1 k=N−1时,系统从 k = N − 1 k=N-1 k=N−1到 k = N k=N k=N的代价为
J N − 1 → N = x N T F x N + x N − 1 T Q x N − 1 + u N − 1 T R u N − 1 = J N → N + x N − 1 T Q x N − 1 + u N − 1 T R u N − 1 (5) \begin{align*} J_{N-1 \to N}&=x_N^T F x_N + x_{N-1}^T Q x_{N-1} + u_{N-1}^T R u_{N-1}\\ &=J_{N \to N} + x_{N-1}^T Q x_{N-1} + u_{N-1}^T R u_{N-1} \end{align*} \tag{5} JN−1→N=xNTFxN+xN−1TQxN−1+uN−1TRuN−1=JN→N+xN−1TQxN−1+uN−1TRuN−1(5)根据贝尔曼优化理论,结合(4)式可得 k = N − 1 k=N-1 k=N−1时最优代价:
J N − 1 → N ∗ ( x N − 1 , x N , u N − 1 ) = min x N ( J N → N ∗ ) + min u N − 1 ( x N − 1 T Q x N − 1 + u N − 1 T R u N − 1 ) (6) J_{N-1 \to N}^* (x_{N-1}, x_{N}, u_{N-1})= \mathop{\min}\limits_{x_N} (J_{N \to N}^*) + \mathop{\min}\limits_{u_{N-1}}(x_{N-1}^T Q x_{N-1} + u_{N-1}^T R u_{N-1}) \tag{6} JN−1→N∗(xN−1,xN,uN−1)=xNmin(JN→N∗)+uN−1min(xN−1TQxN−1+uN−1TRuN−1)(6)
根据(1)式可得 x N = A x N − 1 + B u n − 1 x_N=Ax_{N-1}+Bu_{n-1} xN=AxN−1+Bun−1,将其和 P N = F P_N=F PN=F代入可得
J N − 1 → N ∗ = min u N − 1 ( ( A x N − 1 + B u n − 1 ) T P N ( A x N − 1 + B u n − 1 ) ) + min u N − 1 ( x N − 1 T Q x N − 1 + u N − 1 T R u N − 1 ) = min u N − 1 ( ( A x N − 1 + B u n − 1 ) T P N ( A x N − 1 + B u n − 1 ) + ( x N − 1 T Q x N − 1 + u N − 1 T R u N − 1 ) ) = min u N − 1 ( J N − 1 → N ) (7) \begin{align*} J^*_{N-1 \to N}&=\mathop{\min}\limits_{u_{N-1}}((Ax_{N-1}+Bu_{n-1})^T P_N (Ax_{N-1}+Bu_{n-1})) + \mathop{\min}\limits_{u_{N-1}}(x_{N-1}^T Q x_{N-1} + u_{N-1}^T R u_{N-1})\\ &=\mathop{\min}\limits_{u_{N-1}}((Ax_{N-1}+Bu_{n-1})^T P_N (Ax_{N-1}+Bu_{n-1}) + (x_{N-1}^T Q x_{N-1} + u_{N-1}^T R u_{N-1}))\\ &=\mathop{\min}\limits_{u_{N-1}}(J_{N-1 \to N}) \end{align*} \tag{7} JN−1→N∗=uN−1min((AxN−1+Bun−1)TPN(AxN−1+Bun−1))+uN−1min(xN−1TQxN−1+uN−1TRuN−1)=uN−1min((AxN−1+Bun−1)TPN(AxN−1+Bun−1)+(xN−1TQxN−1+uN−1TRuN−1))=uN−1min(JN−1→N)(7)
对其在输入 u N − 1 u_{N-1} uN−1上求导得
∂ J N − 1 → N ∂ u N − 1 = ∂ ( ( A x N − 1 + B u n − 1 ) T P N ( A x N − 1 + B u N − 1 ) ) ∂ u N − 1 + ∂ ( x N − 1 T Q x N − 1 + u N − 1 T R u N − 1 ) ∂ u N − 1 = ∂ ( A x N − 1 + B u n − 1 ) ∂ u N − 1 ∂ ( A x N − 1 + B u n − 1 ) T P N ( A x N − 1 + B u N − 1 ) ∂ ( A x N − 1 + B u n − 1 ) + ∂ ( u N − 1 T R u N − 1 ) ∂ u N − 1 = B T P N ( A x N − 1 + B u N − 1 ) + R u N − 1 (8) \begin{align*} \frac{\partial J_{N-1 \to N}}{\partial u_{N-1}}&=\frac{\partial ((Ax_{N-1}+Bu_{n-1})^T P_N (Ax_{N-1}+Bu_{N-1}) )}{\partial u_{N-1}} + \frac{\partial (x_{N-1}^T Q x_{N-1} + u_{N-1}^T R u_{N-1}) }{\partial u_{N-1}}\\ &=\frac{\partial (Ax_{N-1}+Bu_{n-1}) }{\partial u_{N-1}} \frac{\partial (Ax_{N-1}+Bu_{n-1})^T P_N (Ax_{N-1}+Bu_{N-1}) }{\partial (Ax_{N-1}+Bu_{n-1})} + \frac{\partial (u_{N-1}^T R u_{N-1}) }{\partial u_{N-1}}\\ &=B^TP_N(Ax_{N-1}+Bu_{N-1})+Ru_{N-1} \end{align*} \tag{8} ∂uN−1∂JN−1→N=∂uN−1∂((AxN−1+Bun−1)TPN(AxN−1+BuN−1))+∂uN−1∂(xN−1TQxN−1+uN−1TRuN−1)=∂uN−1∂(AxN−1+Bun−1)∂(AxN−1+Bun−1)∂(AxN−1+Bun−1)TPN(AxN−1+BuN−1)+∂uN−1∂(uN−1TRuN−1)=BTPN(AxN−1+BuN−1)+RuN−1(8)
对其在输入 u N − 1 u_{N-1} uN−1上二次求导得
∂ 2 J N − 1 → N ∂ u N − 1 = ∂ B T P N ( A x N − 1 + B u N − 1 ) + R u N − 1 ∂ u N − 1 = B T P N B + R (9) \begin{align*} \frac{\partial^2 J_{N-1 \to N}}{\partial u_{N-1}}&=\frac{\partial B^TP_N(Ax_{N-1}+Bu_{N-1})+Ru_{N-1}}{\partial u_{N-1}} \\ &=B^TP_NB+R \end{align*} \tag{9} ∂uN−1∂2JN−1→N=∂uN−1∂BTPN(AxN−1+BuN−1)+RuN−1=BTPNB+R(9)
由于 P N = F P_N=F PN=F为半定矩阵,因此 B T P N B B^TP_NB BTPNB也是半正定的,同时 R R R是正定的,因此(9)式的结果也是正定矩阵,因此令(8)式等于0:
∂ J N − 1 → N ∂ u N − 1 = 0 B T P N ( A x N − 1 + B u N − 1 ) + R u N − 1 = 0 B T P N B u N − 1 + B T P N A x N − 1 + R u N − 1 = 0 ( B T P N B + R ) u N − 1 + B T P N A x N − 1 = 0 u N − 1 + ( B T P N B + R ) − 1 B T P N A x N − 1 = 0 (10) \begin{align*} \frac{\partial J_{{N-1} \to N}}{\partial u_{N-1}} &= 0\\ B^TP_N(Ax_{N-1}+Bu_{N-1})+Ru_{N-1}&=0\\ B^TP_NBu_{N-1} + B^TP_NAx_{N-1}+ Ru_{N-1} &= 0\\ (B^TP_NB + R)u_{N-1} + B^TP_NAx_{N-1}&= 0\\ u_{N-1} + (B^TP_NB + R)^{-1}B^TP_NAx_{N-1}&= 0 \end{align*} \tag{10} ∂uN−1∂JN−1→NBTPN(AxN−1+BuN−1)+RuN−1BTPNBuN−1+BTPNAxN−1+RuN−1(BTPNB+R)uN−1+BTPNAxN−1uN−1+(BTPNB+R)−1BTPNAxN−1=0=0=0=0=0(10)求出来的 u N − 1 u_{N-1} uN−1为 J N − 1 → N J_{N-1 \to N} JN−1→N的最小值。即最优输入
u N − 1 ∗ = − ( B T P N B + R ) − 1 B T P N A x N − 1 (11) u^*_{N-1} = -(B^TP_NB + R)^{-1}B^TP_NAx_{N-1} \tag{11} uN−1∗=−(BTPNB+R)−1BTPNAxN−1(11)定义反馈矩阵 K N − 1 = ( B T P N B + R ) − 1 B T P N A K_{N-1}=(B^TP_NB + R)^{-1}B^TP_NA KN−1=(BTPNB+R)−1BTPNA,上式变为
u N − 1 ∗ = − K N − 1 x N − 1 (12) u^*_{N-1} =-K_{N-1}x_{N-1} \tag{12} uN−1∗=−KN−1xN−1(12)
结合(7)式可得系统从 k = N − 1 k=N-1 k=N−1到 k = N k=N k=N的最优代价为
J N − 1 → N ∗ = ( A x N − 1 − B K N − 1 x N − 1 ) T P N ( A x N − 1 − B K N − 1 x N − 1 ) + x N − 1 T Q x N − 1 + ( K N − 1 x N − 1 ) T R ( K N − 1 x N − 1 ) = ( ( A − B K N − 1 ) x N − 1 ) T P N ( ( A − B K N − 1 ) x N − 1 ) + x N − 1 T Q x N − 1 + x N − 1 T K N − 1 T R K N − 1 x N − 1 = x N − 1 T ( A − B K N − 1 ) T P N ( A − B K N − 1 ) x N − 1 + x N − 1 T Q x N − 1 + x N − 1 T K N − 1 T R K N − 1 x N − 1 = x N − 1 T [ ( A − B K N − 1 ) T P N ( A − B K N − 1 ) + Q + K N − 1 T R K N − 1 ] x N − 1 (13) \begin{align*} J^*_{N-1 \to N}&=(Ax_{N-1}-BK_{N-1}x_{N-1})^T P_N (Ax_{N-1}-BK_{N-1}x_{N-1}) + x_{N-1}^T Q x_{N-1} + (K_{N-1}x_{N-1})^T R (K_{N-1}x_{N-1})\\ &=((A-BK_{N-1})x_{N-1})^T P_N ((A-BK_{N-1})x_{N-1}) + x_{N-1}^T Q x_{N-1} + x_{N-1}^TK_{N-1}^T R K_{N-1}x_{N-1}\\ &=x_{N-1}^T(A-BK_{N-1})^T P_N (A-BK_{N-1})x_{N-1} + x_{N-1}^T Q x_{N-1} + x_{N-1}^TK_{N-1}^T R K_{N-1}x_{N-1}\\ &=x_{N-1}^T [(A-BK_{N-1})^T P_N (A-BK_{N-1}) + Q + K_{N-1}^T R K_{N-1}] x_{N-1} \end{align*} \tag{13} JN−1→N∗=(AxN−1−BKN−1xN−1)TPN(AxN−1−BKN−1xN−1)+xN−1TQxN−1+(KN−1xN−1)TR(KN−1xN−1)=((A−BKN−1)xN−1)TPN((A−BKN−1)xN−1)+xN−1TQxN−1+xN−1TKN−1TRKN−1xN−1=xN−1T(A−BKN−1)TPN(A−BKN−1)xN−1+xN−1TQxN−1+xN−1TKN−1TRKN−1xN−1=xN−1T[(A−BKN−1)TPN(A−BKN−1)+Q+KN−1TRKN−1]xN−1(13)定义 P N − 1 = ( A − B K N − 1 ) T P N ( A − B K N − 1 ) + Q + K N − 1 T R K N − 1 P_{N-1}=(A-BK_{N-1})^T P_N (A-BK_{N-1}) + Q + K_{N-1}^T R K_{N-1} PN−1=(A−BKN−1)TPN(A−BKN−1)+Q+KN−1TRKN−1,则上式可记为
J N − 1 → N ∗ = x N − 1 T P N − 1 x N − 1 (14) \begin{align*} J^*_{N-1 \to N}=x_{N-1}^T P_{N-1}x_{N-1} \end{align*} \tag{14} JN−1→N∗=xN−1TPN−1xN−1(14) -
当 k = N − 2 k=N-2 k=N−2时,同理可得系统从 k = N − 2 k=N-2 k=N−2到 k = N − 1 k=N-1 k=N−1的代价为
J N − 2 → N − 1 = x N T F x N + x N − 1 T Q x N − 1 + u N − 1 T R u N − 1 + x N − 2 T Q x N − 2 + u N − 2 T R u N − 2 = J N − 1 → N + x N − 2 T Q x N − 2 + u N − 2 T R u N − 2 (15) \begin{align*} J_{N-2 \to N-1}&=x_N^T F x_N + x_{N-1}^T Q x_{N-1} + u_{N-1}^T R u_{N-1}+ x_{N-2}^T Q x_{N-2} + u_{N-2}^T R u_{N-2}\\ &=J_{N-1 \to N}+ x_{N-2}^T Q x_{N-2} + u_{N-2}^T R u_{N-2}\\ \end{align*} \tag{15} JN−2→N−1=xNTFxN+xN−1TQxN−1+uN−1TRuN−1+xN−2TQxN−2+uN−2TRuN−2=JN−1→N+xN−2TQxN−2+uN−2TRuN−2(15)
可得 k = N − 2 k=N-2 k=N−2时最优代价:
J N − 2 → N − 1 ∗ = min x N − 1 ( J N − 1 → N ∗ ) + min u N − 2 ( x N − 2 T Q x N − 2 + u N − 2 T R u N − 2 ) = min u ( N − 2 ) ( J N − 1 → N ∗ ) + min u N − 2 ( x N − 2 T Q x N − 2 + u N − 2 T R u N − 2 ) = min u ( N − 2 ) ( x N − 1 T P N − 1 x N − 1 ) + min u N − 2 ( x N − 2 T Q x N − 2 + u N − 2 T R u N − 2 ) = min u ( N − 2 ) ( ( A x N − 2 + B u N − 2 ) T P N − 1 ( A x N − 2 + B u N − 2 ) ) + min u N − 2 ( x N − 2 T Q x N − 2 + u N − 2 T R u N − 2 ) = min u ( N − 2 ) ( ( A x N − 2 + B u N − 2 ) T P N − 1 ( A x N − 2 + B u N − 2 ) + x N − 2 T Q x N − 2 + u N − 2 T R u N − 2 ) (16) \begin{align*} J_{N-2 \to N-1}^* &= \mathop{\min}\limits_{x_{N-1}} (J_{N-1 \to N}^*) + \mathop{\min}\limits_{u_{N-2}}(x_{N-2}^T Q x_{N-2} + u_{N-2}^T R u_{N-2})\\ &= \mathop{\min}\limits_{u_(N-2)} (J_{N-1 \to N}^*) + \mathop{\min}\limits_{u_{N-2}}(x_{N-2}^T Q x_{N-2} + u_{N-2}^T R u_{N-2})\\ &= \mathop{\min}\limits_{u_(N-2)} (x_{N-1}^T P_{N-1}x_{N-1} ) + \mathop{\min}\limits_{u_{N-2}}(x_{N-2}^T Q x_{N-2} + u_{N-2}^T R u_{N-2})\\ &= \mathop{\min}\limits_{u_(N-2)} ((Ax_{N-2}+Bu_{N-2})^T P_{N-1}(Ax_{N-2}+Bu_{N-2})) + \mathop{\min}\limits_{u_{N-2}}(x_{N-2}^T Q x_{N-2} + u_{N-2}^T R u_{N-2}) \\ &= \mathop{\min}\limits_{u_(N-2)} ((Ax_{N-2}+Bu_{N-2})^T P_{N-1}(Ax_{N-2}+Bu_{N-2}) + x_{N-2}^T Q x_{N-2} + u_{N-2}^T R u_{N-2}) \end{align*} \tag{16} JN−2→N−1∗=xN−1min(JN−1→N∗)+uN−2min(xN−2TQxN−2+uN−2TRuN−2)=u(N−2)min(JN−1→N∗)+uN−2min(xN−2TQxN−2+uN−2TRuN−2)=u(N−2)min(xN−1TPN−1xN−1)+uN−2min(xN−2TQxN−2+uN−2TRuN−2)=u(N−2)min((AxN−2+BuN−2)TPN−1(AxN−2+BuN−2))+uN−2min(xN−2TQxN−2+uN−2TRuN−2)=u(N−2)min((AxN−2+BuN−2)TPN−1(AxN−2+BuN−2)+xN−2TQxN−2+uN−2TRuN−2)(16)对上式括号部分对 u N − 2 u_{N-2} uN−2求导并令其等于0,可得到
∂ ( ( A x N − 2 + B u N − 2 ) T P N − 1 ( A x N − 2 + B u N − 2 ) + x N − 2 T Q x N − 2 + u N − 2 T R u N − 2 ) ∂ u N − 2 = 0 B T P N − 1 ( A x N − 2 + B u N − 2 ) + R u N − 2 = 0 B T P N − 1 B u N − 2 + B T P N − 1 A x N − 2 + R u N − 2 = 0 ( B T P N − 1 B + R ) u N − 2 + B T P N − 1 A x N − 2 = 0 u N − 2 + ( B T P N − 1 B + R ) − 1 B T P N − 1 A x N − 2 = 0 (17) \begin{align*} \frac{\partial ((Ax_{N-2}+Bu_{N-2})^T P_{N-1}(Ax_{N-2}+Bu_{N-2}) + x_{N-2}^T Q x_{N-2} + u_{N-2}^T R u_{N-2})}{\partial u_{N-2}} &= 0\\ B^TP_{N-1}(Ax_{N-2}+Bu_{N-2})+Ru_{N-2}&=0\\ B^TP_{N-1}Bu_{N-2} + B^TP_{N-1}Ax_{N-2}+ Ru_{N-2} &= 0\\ (B^TP_{N-1}B + R)u_{N-2} + B^TP_{N-1}Ax_{N-2}&= 0\\ u_{N-2} + (B^TP_{N-1}B + R)^{-1}B^TP_{N-1}Ax_{N-2}&= 0 \end{align*} \tag{17} ∂uN−2∂((AxN−2+BuN−2)TPN−1(AxN−2+BuN−2)+xN−2TQxN−2+uN−2TRuN−2)BTPN−1(AxN−2+BuN−2)+RuN−2BTPN−1BuN−2+BTPN−1AxN−2+RuN−2(BTPN−1B+R)uN−2+BTPN−1AxN−2uN−2+(BTPN−1B+R)−1BTPN−1AxN−2=0=0=0=0=0(17)
令 K N − 2 = ( B T P N − 1 B + R ) − 1 B T P N − 1 A K_{N-2}= (B^TP_{N-1}B + R)^{-1}B^TP_{N-1}A KN−2=(BTPN−1B+R)−1BTPN−1A,可得
u N − 2 ∗ = − K N − 2 x N − 2 (18) u^*_{N-2} =-K_{N-2}x_{N-2} \tag{18} uN−2∗=−KN−2xN−2(18)
结合(16)式整理可得系统从 k = N − 2 k=N-2 k=N−2到 k = N − 1 k=N-1 k=N−1的最优代价为
J N − 2 → N − 1 ∗ = x N − 2 T P N − 2 x N − 2 (19) \begin{align*} J^*_{N-2 \to N-1} &=x_{N-2}^T P_{N-2} x_{N-2} \end{align*} \tag{19} JN−2→N−1∗=xN−2TPN−2xN−2(19)其中 P N − 2 = ( A − B K N − 2 ) T P N − 1 ( A − B K N − 2 ) + Q + K N − 2 T R K N − 2 P_{N-2}=(A-BK_{N-2})^T P_{N-1} (A-BK_{N-2}) + Q + K_{N-2}^T R K_{N-2} PN−2=(A−BKN−2)TPN−1(A−BKN−2)+Q+KN−2TRKN−2。
-
当 k = N − 3 k=N-3 k=N−3时,。。。。。。
同理我们可以继续往下计算得到 u N − 1 , u N − 2 , … , u 0 u_{N-1},u_{N-2},\dots, u_{0} uN−1,uN−2,…,u0,归纳整理可得到通用的迭代方程:
k
=
N
k=N
k=N时,
J
N
→
N
∗
=
x
N
T
P
N
x
N
P
N
=
F
(20)
\begin{align*} J_{N \to N}^* &= x_{N}^T P_{N} x_{N} \\ P_N&=F \end{align*} \tag{20}
JN→N∗PN=xNTPNxN=F(20)
k
=
N
−
1
,
N
−
2
,
…
,
0
k=N-1,N-2,\dots,0
k=N−1,N−2,…,0时,
u
k
∗
=
−
K
k
x
k
J
k
→
k
+
1
∗
=
x
k
T
P
k
x
k
K
k
=
(
B
T
P
k
+
1
B
+
R
)
−
1
B
T
P
k
+
1
A
P
k
=
(
A
−
B
K
k
)
T
P
k
+
1
(
A
−
B
K
k
)
+
Q
+
K
k
T
R
K
k
(21)
\begin{align*} u^*_{k}&=-K_{k}x_{k} \\ J_{k \to k+1}^* &= x_{k}^T P_{k} x_{k} \\ K_{k}&=(B^TP_{k+1}B + R)^{-1}B^TP_{k+1}A\\ P_{k}&=(A-BK_{k})^T P_{k+1} (A-BK_{k}) + Q + K_{k}^T R K_{k} \end{align*} \tag{21}
uk∗Jk→k+1∗KkPk=−Kkxk=xkTPkxk=(BTPk+1B+R)−1BTPk+1A=(A−BKk)TPk+1(A−BKk)+Q+KkTRKk(21)
迭代求解过程
如果(1)式的线性时不变系统完全可控且稳定,则当最优控制末端的时间
N
N
N无穷大(即反向迭代次数足够大),则反馈矩阵
K
k
K_k
Kk则将趋于常数矩阵
K
K
K,即
lim
N
→
∞
K
k
=
K
\lim\limits_{N\to\infty}K_k = K
N→∞limKk=K
出现这种情况的原因可以解释为:
先从 N N N开始反向迭代,求出系统每一次的最优反馈 K k K_k Kk和最优输入 u k ∗ u^*_k uk∗,从(21)式可以看出,这几个值只跟系统的问题定义(即系统状态方程和Q 、R)有关,与初始状态无关。因此,对于任意一个不同的初始状态,均存在一个通用的最优控制反馈 K K K。
在从 N N N开始反向迭代过程中,我们实际上是在计算这个代数Riccati方程的一个解序列,这个解序列对应于从最终时刻N向初始时刻递推的过程。这个过程可以理解为是在逐步构建最优反馈控制律,使得系统从任意初始状态出发,能够在有限时间内以最优的方式达到性能指标的最小化。由于LQR的设计是基于最优控制理论的,这个最优控制律具有一些很好的性质。其中之一就是,当系统接近稳态时,最优控制律应该保持相对稳定,不再随时间发生大的变化。这是因为,在稳态附近,系统的动态行为已经相对稳定,不再需要大的控制输入来调整系统状态。
总结来说,对于一个有限时域N的LQR系统来说,矩阵在从 N N N开始反向迭代的过程中快速收敛到常值的原因是由于系统逐渐逼近最优解的过程中,系统状态和控制输入进入稳态区域,导致Riccati方程中的各项逐渐趋于常数。这个收敛过程反映了LQR设计的有效性和最优控制理论的稳定性。
因此,我们可以通过不停的迭代求解 K k K_k Kk,直到该反馈矩阵收敛于一个常数矩阵 K K K为止,将该常数矩阵 K K K作为系统最优的反馈矩阵。
综上,采用LQR算法进行控制率求解的步骤概括为:
-
确定迭代范围 N N N。
-
设置迭代初始值 P N = F P_{N}=F PN=F,其中 Q f = Q Q_f=Q Qf=Q
-
循环迭代, 从后往前 k = N − 1 , … , 0 k=N-1, \ldots, 0 k=N−1,…,0,
K k = ( B T P k + 1 B + R ) − 1 B T P k + 1 A P k = ( A − B K k ) T P k + 1 ( A − B K k ) + Q + K k T R K k \begin{align*} K_{k}&=(B^TP_{k+1}B + R)^{-1}B^TP_{k+1}A\\ P_{k}&=(A-BK_{k})^T P_{k+1} (A-BK_{k}) + Q + K_{k}^T R K_{k} \end{align*} KkPk=(BTPk+1B+R)−1BTPk+1A=(A−BKk)TPk+1(A−BKk)+Q+KkTRKk判断 K k K_k Kk和 K k + 1 K_{k+1} Kk+1每个对应元素的差值是否小于 ϵ \epsilon ϵ(这里 ϵ \epsilon ϵ代表迭代精度,一般是非常小的数字),如果都小于则跳出循环,此时的 K t K_t Kt即为最终的最优反馈矩阵,否则继续循环。
-
最终得优化的控制量 u t ∗ = − K t x t u_{t}^{*}=-K_{t} x_{t} ut∗=−Ktxt
代码实现
python代码的实现如下
import numpy as np
from scipy.linalg import inv
N = 200 # 迭代范围
EPS = 1e-4 # 迭代精度
def cal_lqr_k(A, B, Q, R, F):
"""计算LQR反馈矩阵K
Args:
A : mxm状态矩阵A
B : mxn状态矩阵B
Q : Q是状态权重mxm的半正定方阵,用于衡量状态的代价,通常将其设计为对角矩阵。
R : R是控制权重nxn的正定对称矩阵,用于衡量控制输入的代价,通常将其设计为对角矩阵。
F : F是末端状态权重mxm的半正定方阵,用于衡量最终状态的代价,通常将其设计为对角矩阵。
Returns:
K : 反馈矩阵K
"""
# 设置迭代初始值
P = F
# 循环迭代
for t in range(N):
K_t = inv(B.T @ P @ B + R) @ B.T @ P @ A
P_t = (A - B @ K_t).T @ P @ (A - B @ K_t) + Q + K_t.T @ R @ K_t
if(abs(P_t- P).max()<EPS):
break
P = P_t
return K_t
def main():
A = np.array([[0, 1], [-1, -0.5]])
B = np.array([[0], [1]])
Q = np.array([[1, 0], [0, 1]])
F = np.array([[1, 0], [0, 1]])
R = np.array([[1]])
K = cal_lqr_k(A, B, Q, R, F)
print(K)
if __name__ == '__main__':
main()