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)
其中, 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} ARm×m ,输入矩阵 B ∈ R m × n B \in R^{m\times n} BRm×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=0N1(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} JNN=xNTFxN(3)
    这里当 k = N k=N k=N时候,系统已经达到最终的 x N x_N xN的状态,因此 J N → N J_{N \to N} JNN只存在末端代价,此时对应的代价就是最优代价,即
    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} JNN=xNTFxN=xNTPNxN(4)
    上式中为了后面方便归纳,我们设 P N = F P_N=F PN=F

  • k = N − 1 k=N-1 k=N1时,系统从 k = N − 1 k=N-1 k=N1 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} JN1N=xNTFxN+xN1TQxN1+uN1TRuN1=JNN+xN1TQxN1+uN1TRuN1(5)

    根据贝尔曼优化理论,结合(4)式可得 k = N − 1 k=N-1 k=N1时最优代价:
    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} JN1N(xN1,xN,uN1)=xNmin(JNN)+uN1min(xN1TQxN1+uN1TRuN1)(6)
    根据(1)式可得 x N = A x N − 1 + B u n − 1 x_N=Ax_{N-1}+Bu_{n-1} xN=AxN1+Bun1,将其和 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} JN1N=uN1min((AxN1+Bun1)TPN(AxN1+Bun1))+uN1min(xN1TQxN1+uN1TRuN1)=uN1min((AxN1+Bun1)TPN(AxN1+Bun1)+(xN1TQxN1+uN1TRuN1))=uN1min(JN1N)(7)
    对其在输入 u N − 1 u_{N-1} uN1上求导得
    ∂ 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} uN1JN1N=uN1((AxN1+Bun1)TPN(AxN1+BuN1))+uN1(xN1TQxN1+uN1TRuN1)=uN1(AxN1+Bun1)(AxN1+Bun1)(AxN1+Bun1)TPN(AxN1+BuN1)+uN1(uN1TRuN1)=BTPN(AxN1+BuN1)+RuN1(8)
    对其在输入 u N − 1 u_{N-1} uN1上二次求导得
    ∂ 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} uN12JN1N=uN1BTPN(AxN1+BuN1)+RuN1=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} uN1JN1NBTPN(AxN1+BuN1)+RuN1BTPNBuN1+BTPNAxN1+RuN1(BTPNB+R)uN1+BTPNAxN1uN1+(BTPNB+R)1BTPNAxN1=0=0=0=0=0(10)

    求出来的 u N − 1 u_{N-1} uN1 J N − 1 → N J_{N-1 \to N} JN1N的最小值。即最优输入
    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} uN1=(BTPNB+R)1BTPNAxN1(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 KN1=(BTPNB+R)1BTPNA,上式变为
    u N − 1 ∗ = − K N − 1 x N − 1 (12) u^*_{N-1} =-K_{N-1}x_{N-1} \tag{12} uN1=KN1xN1(12)
    结合(7)式可得系统从 k = N − 1 k=N-1 k=N1 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} JN1N=(AxN1BKN1xN1)TPN(AxN1BKN1xN1)+xN1TQxN1+(KN1xN1)TR(KN1xN1)=((ABKN1)xN1)TPN((ABKN1)xN1)+xN1TQxN1+xN1TKN1TRKN1xN1=xN1T(ABKN1)TPN(ABKN1)xN1+xN1TQxN1+xN1TKN1TRKN1xN1=xN1T[(ABKN1)TPN(ABKN1)+Q+KN1TRKN1]xN1(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} PN1=(ABKN1)TPN(ABKN1)+Q+KN1TRKN1,则上式可记为
    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} JN1N=xN1TPN1xN1(14)

  • k = N − 2 k=N-2 k=N2时,同理可得系统从 k = N − 2 k=N-2 k=N2 k = N − 1 k=N-1 k=N1的代价为
    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} JN2N1=xNTFxN+xN1TQxN1+uN1TRuN1+xN2TQxN2+uN2TRuN2=JN1N+xN2TQxN2+uN2TRuN2(15)
    可得 k = N − 2 k=N-2 k=N2时最优代价:
    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} JN2N1=xN1min(JN1N)+uN2min(xN2TQxN2+uN2TRuN2)=u(N2)min(JN1N)+uN2min(xN2TQxN2+uN2TRuN2)=u(N2)min(xN1TPN1xN1)+uN2min(xN2TQxN2+uN2TRuN2)=u(N2)min((AxN2+BuN2)TPN1(AxN2+BuN2))+uN2min(xN2TQxN2+uN2TRuN2)=u(N2)min((AxN2+BuN2)TPN1(AxN2+BuN2)+xN2TQxN2+uN2TRuN2)(16)

    对上式括号部分对 u N − 2 u_{N-2} uN2求导并令其等于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} uN2((AxN2+BuN2)TPN1(AxN2+BuN2)+xN2TQxN2+uN2TRuN2)BTPN1(AxN2+BuN2)+RuN2BTPN1BuN2+BTPN1AxN2+RuN2(BTPN1B+R)uN2+BTPN1AxN2uN2+(BTPN1B+R)1BTPN1AxN2=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 KN2=(BTPN1B+R)1BTPN1A,可得
    u N − 2 ∗ = − K N − 2 x N − 2 (18) u^*_{N-2} =-K_{N-2}x_{N-2} \tag{18} uN2=KN2xN2(18)
    结合(16)式整理可得系统从 k = N − 2 k=N-2 k=N2 k = N − 1 k=N-1 k=N1的最优代价为
    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} JN2N1=xN2TPN2xN2(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} PN2=(ABKN2)TPN1(ABKN2)+Q+KN2TRKN2

  • k = N − 3 k=N-3 k=N3时,。。。。。。

同理我们可以继续往下计算得到 u N − 1 , u N − 2 , … , u 0 u_{N-1},u_{N-2},\dots, u_{0} uN1,uN2,,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} JNNPN=xNTPNxN=F(20)

k = N − 1 , N − 2 , … , 0 k=N-1,N-2,\dots,0 k=N1,N2,,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} ukJkk+1KkPk=Kkxk=xkTPkxk=(BTPk+1B+R)1BTPk+1A=(ABKk)TPk+1(ABKk)+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 NlimKk=K

出现这种情况的原因可以解释为:

  1. 先从 N N N开始反向迭代,求出系统每一次的最优反馈 K k K_k Kk和最优输入 u k ∗ u^*_k uk,从(21)式可以看出,这几个值只跟系统的问题定义(即系统状态方程和Q 、R)有关,与初始状态无关。因此,对于任意一个不同的初始状态,均存在一个通用的最优控制反馈 K K K

  2. 在从 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算法进行控制率求解的步骤概括为:

  1. 确定迭代范围 N N N

  2. 设置迭代初始值 P N = F P_{N}=F PN=F,其中 Q f = Q Q_f=Q Qf=Q

  3. 循环迭代, 从后往前 k = N − 1 , … , 0 k=N-1, \ldots, 0 k=N1,,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=(ABKk)TPk+1(ABKk)+Q+KkTRKk

    判断 K k K_k Kk K k + 1 K_{k+1} Kk+1每个对应元素的差值是否小于 ϵ \epsilon ϵ(这里 ϵ \epsilon ϵ代表迭代精度,一般是非常小的数字),如果都小于则跳出循环,此时的 K t K_t Kt即为最终的最优反馈矩阵,否则继续循环。

  4. 最终得优化的控制量 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()
  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: LQR(Linear Quadratic Regulator)控制算法是一种广泛应用于控制系统设计的经典控制算法。该算法通过最小化系统状态的二次性能指标来设计控制器,在满足系统稳定性的前提下,实现对系统的最佳控制。 LQR控制算法的Matlab代码如下所示: ```Matlab % 定义系统的状态空间表示 A = [1, 1; 0, 1]; % 系统的状态转移矩阵 B = [0; 1]; % 输入矩阵 C = [1, 0]; % 输出矩阵 D = 0; % 前馈矩阵 % 定义系统的权重矩阵 Q = [1, 0; 0, 1]; % 状态误差的权重矩阵 R = 1; % 控制输入的权重矩阵 % 使用lqr函数计算最优控制器增益矩阵 K = lqr(A, B, Q, R); % 定义系统初始状态和目标状态 x0 = [0; 0]; % 初始状态 x_des = [1; 0]; % 目标状态 % 定义控制器输出 u = -K * (x - x_des); % 计算控制输入 % 使用ode45函数模拟系统响应 [t, x] = ode45(@(t, x) (A - B * K) * x, tspan, x0); % 绘制系统的状态响应曲线 plot(t, x(:, 1), 'r', t, x(:, 2), 'b'); xlabel('时间'); ylabel('系统状态'); legend('状态1', '状态2'); ``` 以上代码中,我们首先定义系统的状态空间表示,并根据系统的权重矩阵定义目标控制性能。然后使用lqr函数计算最优控制器增益矩阵K。接着我们定义系统的初始状态和目标状态,并通过计算控制器输出来实现对系统的最佳控制。最后使用ode45函数模拟系统的状态响应,并绘制系统状态的变化曲线。 ### 回答2: LQR(线性二次调节)控制算法是一种广泛应用于控制系统设计中的优化控制方法。其基本思想是通过设计一个最优的状态反馈控制器来使得系统满足一定的性能指标。 在Matlab中,可以使用控制工具箱中的lqr函数来实现LQR控制算法。下面是lqr函数的基本使用方法: ```matlab % 定义系统的状态方程 A = [A1, A2, ..., An]; B = [B1, B2, ..., Bn]; C = [C1, C2, ..., Cn]; D = [D1, D2, ..., Dn]; sys = ss(A, B, C, D); % 定义LQR控制器的权重矩阵 Q = [Q1, Q2, ..., Qn]; R = [R1, R2, ..., Rm]; % 计算LQR增益矩阵K K = lqr(sys, Q, R); % 将LQR增益矩阵K应用于系统 sys_with_control = ss(A - B * K, B, C, D); % 模拟系统的响应 t = 0:dt:T; % 时间向量,dt为采样时间步长,T为总仿真时间 u = ...; % 输入信号向量 [y, t, x] = lsim(sys_with_control, u, t, x0); % 绘制系统的响应曲线 plot(t, y); xlabel('时间'); ylabel('输出'); title('系统响应'); ``` 在代码中,需要首先定义系统的状态方程,即A、B、C和D矩阵。然后,通过选择合适的权重矩阵Q和R,利用lqr函数计算出最优的LQR增益矩阵K。将该增益矩阵应用于系统后,可以使用lsim函数模拟系统的响应,并通过plot函数绘制出输出的响应曲线。 需要注意的是,在使用LQR控制算法时,权重矩阵Q和R的选择对于控制效果非常重要。可以通过调整权重矩阵来实现对系统性能的不同要求,例如快速响应、稳定性等。 总之,通过以上的Matlab代码,可以实现LQR控制算法,并对系统进行优化控制。具体的参数和权重矩阵的选择需要根据具体的控制系统进行调整。 ### 回答3: LQR(Linear Quadratic Regulator)控制算法是一种优化控制算法,通过调整控制器的参数来最小化系统状态和控制输入之间的误差。其基本思想是基于线性系统模型,使用二次代价函数来定义系统的性能评估指标,并通过最小化这个指标来设计控制器。 LQR控制算法的核心是利用系统的状态空间模型和增广控制器来构建一个代价函数,然后通过求解代价函数的最小值问题来确定最优的控制器参数。这个最小值问题可以通过Riccati方程的求解实现。 在MATLAB中,可以利用控制系统工具箱提供的lqr()函数来实现LQR控制器的设计。该函数的基本语法如下: [K, S, E] = lqr(A, B, Q, R) 其中,A和B分别为系统的状态空间模型的矩阵形式,Q和R是用户定义的代价权重矩阵。 函数的输出结果有三个,K为最优控制器的增益矩阵,S为Riccati方程的解,E为系统特征值的向量。 具体步骤如下: 1. 定义系统的状态空间模型矩阵A和B,以及代价权重矩阵Q和R; 2. 调用lqr()函数,输入参数为A、B、Q和R; 3. 获取输出的最优控制器增益矩阵K、Riccati方程的解S和系统特征值的向量E; 4. 将K作为闭环控制器的增益矩阵,实现对系统的控制。 总结而言,LQR控制算法可以通过MATLAB中的lqr()函数来实现,具体步骤包括定义系统的状态空间模型和代价权重矩阵,然后通过函数调用获取最优控制器的增益矩阵和解。最后,将增益矩阵应用于闭环控制系统中,实现对系统的控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艰默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值