概述
本文介绍离散时间有限范围内的LQR(Linear Quadratic Regulator)算法求解过程.
LQR问题背景
对于一个离散时间系统:
x
t
+
1
=
A
x
t
+
B
u
t
,
x
0
=
x
i
n
i
t
(1)
x_{t+1}=Ax_t + Bu_t,x_0=x_{init}\tag{1}
xt+1=Axt+But,x0=xinit(1)
其中,
A
∈
R
n
×
n
A\in R^{n\times n}
A∈Rn×n,
B
∈
R
n
×
m
B\in R^{n\times m}
B∈Rn×m
关于最优问题,就在于如何选择合适的 u 0 , u 1 , . . . u_0,u_1,... u0,u1,...,使得状态量 x 0 , x 1 , . . . x_0,x_1,... x0,x1,...足够小,因此得到好的调节和控制;或者使得 u 0 , u 1 , . . . u_0,u_1,... u0,u1,...足够小,以使用更少的能量。这两个量通常相互制约,如果采用更大的输入 u u u,就会驱使状态量 x x x更快达到0。采用线性二次调节原理可以解决这个问题。
LQR代价函数
为了表示控制系统达到稳定控制所付出的代价,定义如下二次型代价函数:
J
(
U
)
=
∑
τ
=
0
N
−
1
(
x
τ
T
Q
x
τ
+
u
τ
T
R
u
τ
)
+
x
N
T
Q
f
x
N
(2)
J(U)=\sum^{N-1}_{\tau=0}(x^{T}_{\tau}Qx_{\tau} + u^{T}_{\tau}Ru_{\tau})+ x^{T}_{N}Q_{f}x_{N}\tag{2}
J(U)=τ=0∑N−1(xτTQxτ+uτTRuτ)+xNTQfxN(2)
其中函数参数
U
=
(
u
0
,
u
1
,
.
.
,
u
N
)
U = (u_0,u_1,..,u_N)
U=(u0,u1,..,uN),并且矩阵
Q
,
Q
f
,
R
Q,Q_f,R
Q,Qf,R为正定矩阵,及
Q
=
Q
T
≥
0
,
Q
f
=
Q
f
T
≥
0
,
R
=
R
T
>
0
\begin{array}{cl} Q=Q^{T}\geq0,&Q_f=Q_{f}^{T}\geq0,&R=R^{T}>0 \end{array}
Q=QT≥0,Qf=QfT≥0,R=RT>0
Q Q Q | Q f Q_f Qf | R R R |
---|---|---|
给定状态代价矩阵 | 最终状态代价矩阵 | 输入代价矩阵 |
- N N N:时间范围(考虑 N = ∞ N = \infty N=∞)
- x τ T Q x τ x^{T}_{\tau} Q x_{\tau} xτTQxτ:衡量状态偏差
- u τ T R u τ u^{T}_{\tau} R u_{\tau} uτTRuτ:衡量输入大小
- x N T Q f x N x^{T}_{N} Q_{f} x_{N} xNTQfxN:衡量最终状态偏差
- Q Q Q, R R R:分别设定状态偏差和输入的相对权重
- R > 0 R>0 R>0:意味着任何非零输入都增加 J J J的代价
因此,关于LQR问题就是找出使得代价函数 J ( U ) J(U) J(U)最小的一组控制输入 ( u 0 , u 1 , . . . , u N − 1 ) l q r (u_0,u_1,...,u_{N-1})_{lqr} (u0,u1,...,uN−1)lqr。
求解LQR方法
本文主要介绍两种求解LQR的方法,分别为最小二乘法和动态规划算法。
最小二乘法
根据公式(1)可知,
x
0
x_0
x0是
X
=
(
x
0
,
.
.
.
,
x
N
)
X = (x_0,...,x_N)
X=(x0,...,xN)的线性函数,并且
U
=
(
u
0
,
.
.
.
,
u
N
−
1
)
U = (u_0,...,u_{N-1})
U=(u0,...,uN−1),可以得出如下关系:
x
1
=
A
x
0
+
B
u
0
x
2
=
A
x
1
+
B
u
1
⋮
x
n
=
A
x
N
−
1
+
B
u
N
−
1
(3)
\begin{array}{cl} x_1 &= Ax_0 + Bu_0\\ x_2 &= Ax_1 + Bu_1\\ \vdots\\ x_n &= Ax_{N-1} + Bu_{N-1} \end{array}\tag{3}
x1x2⋮xn=Ax0+Bu0=Ax1+Bu1=AxN−1+BuN−1(3)
将上述公式(3)逐个带入得
x
1
=
A
x
0
+
B
u
0
x
2
=
A
2
x
0
+
A
B
u
0
+
B
u
1
⋮
x
n
=
A
N
x
0
+
A
N
−
1
B
u
0
+
A
N
−
2
B
u
1
+
⋯
+
B
u
N
−
1
(4)
\begin{array}{cl} x_1 &= Ax_0 + Bu_0\\ x_2 &= A^{2}x_0 + ABu_0 + Bu_1\\ \vdots\\ x_n &= A^{N}x_0 + A^{N-1}Bu_0 + A^{N-2}Bu_1 + \dots+ Bu_{N-1} \end{array} \tag{4}
x1x2⋮xn=Ax0+Bu0=A2x0+ABu0+Bu1=ANx0+AN−1Bu0+AN−2Bu1+⋯+BuN−1(4)
整理得
[
x
0
x
1
⋮
x
N
]
=
[
0
…
B
0
…
A
B
B
0
…
⋮
⋮
A
N
−
1
B
A
N
−
2
B
…
B
]
[
u
0
u
1
⋮
u
N
−
1
]
+
[
I
A
⋮
A
N
]
x
0
(5)
\left[\begin{array}{cl} x_0\\ x_1\\ \vdots\\ x_N \end{array}\right]= \left[ \begin{array}{cl} 0 & \dots \\ B & 0 & \dots \\ AB & B & 0 & \dots \\ \vdots & \vdots \\ A^{N-1}B & A^{N-2}B & \dots & B \end{array}\right] \left[ \begin{array}{cl} u_0\\ u_1\\ \vdots\\ u_{N-1} \end{array} \right]+ \left[ \begin{array}{cl} I\\ A\\ \vdots\\ A^{N} \end{array} \right]x_0 \tag{5}
⎣⎢⎢⎢⎡x0x1⋮xN⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡0BAB⋮AN−1B…0B⋮AN−2B…0……B⎦⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎡u0u1⋮uN−1⎦⎥⎥⎥⎤+⎣⎢⎢⎢⎡IA⋮AN⎦⎥⎥⎥⎤x0(5)
其中
G
=
[
0
…
B
0
…
A
B
B
0
…
⋮
⋮
A
N
−
1
B
A
N
−
2
B
…
B
]
,
H
=
[
I
A
⋮
A
N
]
G=\left[ \begin{array}{cl} 0 & \dots \\ B & 0 & \dots \\ AB & B & 0 & \dots \\ \vdots & \vdots \\ A^{N-1}B & A^{N-2}B & \dots & B \end{array}\right],H=\left[ \begin{array}{cl} I\\ A\\ \vdots\\ A^{N} \end{array} \right]
G=⎣⎢⎢⎢⎢⎢⎡0BAB⋮AN−1B…0B⋮AN−2B…0……B⎦⎥⎥⎥⎥⎥⎤,H=⎣⎢⎢⎢⎡IA⋮AN⎦⎥⎥⎥⎤
等式(5)可以进一步表示为
X
=
G
U
+
H
x
0
(6)
X= GU + Hx_0 \tag{6}
X=GU+Hx0(6)
其中,
G
∈
R
N
n
×
N
m
G\in R^{Nn\times Nm}
G∈RNn×Nm,
H
∈
R
N
n
×
n
H\in R^{Nn\times n}
H∈RNn×n。
从而等式(2)所表示得代价函数可以表示为
J
(
U
)
=
∥
d
i
a
g
(
Q
1
/
2
,
…
,
Q
1
/
2
,
Q
f
1
/
2
)
(
G
U
+
H
x
0
)
∥
2
+
∥
d
i
a
g
(
R
1
/
2
,
…
,
R
1
/
2
)
U
∥
2
(7)
J(U)=\parallel diag(Q^{1/2},\dots,Q^{1/2},Q^{1/2}_{f})(GU+Hx_0)\parallel^2+ \parallel diag(R^{1/2},\dots,R^{1/2})U\parallel^2 \tag{7}
J(U)=∥diag(Q1/2,…,Q1/2,Qf1/2)(GU+Hx0)∥2+∥diag(R1/2,…,R1/2)U∥2(7)
这就转化成一个求解最小二乘法的问题,其问题大小为
N
(
n
+
m
)
×
N
m
N(n + m)\times Nm
N(n+m)×Nm。
动态规划法(Dynamic Programming)
动态规划算法是解决多阶段决策过程最优化的一种有效的数学方法。
值函数
首先定义一个值函数
V
t
:
R
n
→
R
V_t:R^n \to R
Vt:Rn→R,其中
t
=
(
0
,
…
,
N
)
t=(0,\dots,N)
t=(0,…,N):
V
t
(
z
)
=
min
u
t
,
…
,
u
N
−
1
(
∑
τ
=
t
N
−
1
(
x
τ
T
Q
x
τ
+
u
τ
t
R
u
τ
)
+
x
N
T
Q
f
x
N
)
(8)
V_t(z)=\min_{u_t,\dots,u_{N-1}}\Bigl(\sum_{\tau=t}^{N-1}(x^T_\tau Qx_\tau + u^t_\tau Ru_\tau) + x_N^TQ_fx_N\Bigr) \tag{8}
Vt(z)=ut,…,uN−1min(τ=t∑N−1(xτTQxτ+uτtRuτ)+xNTQfxN)(8)
如果设置
x
t
=
z
x_t = z
xt=z,根据公式(1)的关系,
x
τ
+
1
=
A
x
τ
+
B
u
τ
x_{\tau+1} = Ax_{\tau} + Bu_{\tau}
xτ+1=Axτ+Buτ,并且
τ
=
t
,
…
,
N
\tau=t,\dots,N
τ=t,…,N。
- V t ( z ) V_t(z) Vt(z)可以表示在 t t t时刻,从状态 z z z开始的LQR最小代价值
- V 0 ( x 0 ) V_0(x_0) V0(x0)表示在0时刻,从状态 x 0 x_0 x0开始的LQR最小代价值
V
t
V_t
Vt可以表示为二次型的形式,即
V
T
(
z
)
=
z
T
P
t
z
,
其
中
P
t
=
P
t
T
≥
0
V_T(z)=z^TP_tz,其中P_t=P_t^T \geq 0
VT(z)=zTPtz,其中Pt=PtT≥0。当
t
=
N
t=N
t=N时,代价值函数为:
V
N
(
z
)
=
z
T
Q
f
z
(9)
V_N(z) = z^TQ_f z \tag{9}
VN(z)=zTQfz(9)
因此
P
N
=
Q
f
P_N = Q_f
PN=Qf。
根据动态规划原理,等式(8)可以写成如下递归关系式:
V
t
(
z
)
=
min
w
(
z
T
Q
z
+
w
T
R
w
+
V
t
+
1
(
A
z
+
B
w
)
)
(10)
V_t(z)=\min_w\bigl(z^TQz + w^TRw + V_{t+1}(Az+Bw)\bigr)\tag{10}
Vt(z)=wmin(zTQz+wTRw+Vt+1(Az+Bw))(10)
其中,
- z T Q z + w T R w z^TQz + w^TRw zTQz+wTRw:如果 u t = w u_t = w ut=w,则代表 t t t时刻产生的代价值;
- V t + 1 ( A z + B w ) V_{t+1}(Az+Bw) Vt+1(Az+Bw):代表从 t + 1 t+1 t+1时刻开始,引起的最小代价值;
提取等式(10)中与
w
w
w无关的选项得
V
t
(
z
)
=
z
T
Q
z
+
min
w
(
w
T
R
w
+
V
t
+
1
(
A
z
+
B
w
)
)
(11)
V_t(z)=z^TQz + \min_w\bigl(w^TRw + V_{t+1}(Az+Bw)\bigr)\tag{11}
Vt(z)=zTQz+wmin(wTRw+Vt+1(Az+Bw))(11)
等式(11)描述了
V
t
(
z
)
V_t(z)
Vt(z)与
V
t
+
1
(
z
)
V_{t+1}(z)
Vt+1(z)之间的递归关系。
求极值
假设
V
t
+
1
=
z
T
P
t
+
1
z
V_{t+1}= z^TP_{t+1}z
Vt+1=zTPt+1z,并且
P
t
+
1
=
P
t
+
1
T
≥
0
P_{t+1}=P^{T}_{t+1} \geq0
Pt+1=Pt+1T≥0,等式(11)可以进一步转化为
P
t
+
1
P_{t+1}
Pt+1的形式:
V
t
(
z
)
=
z
T
Q
z
+
min
w
(
w
T
R
w
+
(
A
z
+
B
w
)
T
P
t
+
1
(
A
z
+
B
w
)
)
(12)
V_t(z)=z^TQz + \min_w\bigl(w^TRw + (Az+Bw)^TP_{t+1}(Az+Bw)\bigr)\tag{12}
Vt(z)=zTQz+wmin(wTRw+(Az+Bw)TPt+1(Az+Bw))(12)
为了求最小值,对
w
w
w求导,导数为零的点即为最值点。
2
w
T
R
+
2
(
A
z
+
B
w
)
T
P
t
+
1
B
=
0
(13)
2w^TR + 2(Az+Bw)^TP_{t+1}B = 0 \tag{13}
2wTR+2(Az+Bw)TPt+1B=0(13)
推导等式(13),求取
w
w
w:
w
T
R
+
z
T
A
T
P
t
+
1
B
+
w
T
B
T
P
t
+
1
B
=
0
w
T
(
R
+
B
T
P
t
+
1
B
)
=
−
z
T
A
T
P
t
+
1
B
(合并同类项并移项)
(
R
+
B
T
P
t
+
1
B
)
T
w
=
−
B
T
P
t
+
1
T
A
z
(转置)
(
R
+
B
T
P
t
+
1
B
)
w
=
−
B
T
P
t
+
1
A
z
(
P
t
+
1
=
P
t
+
1
T
,
R
=
R
T
)
w
=
−
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
z
(矩阵求逆)
(14)
\begin{array}{cl} w^TR + z^{T}A^{T}P_{t+1}B+w^{T}B^{T}P_{t+1}B &= 0\\ w^T(R + B^TP_{t+1}B) &= - z^{T}A^{T}P_{t+1}B &\text{(合并同类项并移项)}\\ (R + B^TP_{t+1}B)^Tw &= -B^TP_{t+1}^{T}Az & \text{(转置)}\\ (R + B^TP_{t+1}B)w &= -B^TP_{t+1}Az &(P_{t+1}=P^{T}_{t+1},R=R^T)\\ w &=-(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}Az &\text{(矩阵求逆)} \end{array}\tag{14}
wTR+zTATPt+1B+wTBTPt+1BwT(R+BTPt+1B)(R+BTPt+1B)Tw(R+BTPt+1B)ww=0=−zTATPt+1B=−BTPt+1TAz=−BTPt+1Az=−(R+BTPt+1B)−1BTPt+1Az(合并同类项并移项)(转置)(Pt+1=Pt+1T,R=RT)(矩阵求逆)(14)
由等式(14)可知,最优输入为
w
∗
=
−
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
z
(15)
w^* =-(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}Az \tag{15}
w∗=−(R+BTPt+1B)−1BTPt+1Az(15)
将等式(15)带入等式(12)得
V
t
(
z
)
=
z
T
Q
z
+
w
∗
T
R
w
∗
+
(
A
z
+
B
w
∗
)
T
P
t
+
1
(
A
z
+
B
w
∗
)
(16)
V_t(z)=z^TQz + w^{*T}Rw^* + (Az+Bw^*)^TP_{t+1}(Az+Bw^*)\tag{16}
Vt(z)=zTQz+w∗TRw∗+(Az+Bw∗)TPt+1(Az+Bw∗)(16)
对等式(16)化简得
V
t
(
z
)
=
z
T
Q
z
+
w
∗
T
R
w
∗
+
(
A
z
+
B
w
∗
)
T
P
t
+
1
(
A
z
+
B
w
∗
)
=
z
T
Q
z
+
w
∗
T
R
w
∗
+
z
T
A
T
P
t
+
1
A
z
+
2
z
T
A
T
P
t
+
1
B
w
∗
+
w
∗
T
B
T
P
t
+
1
B
w
∗
=
z
T
Q
z
+
z
T
A
T
P
t
+
1
A
z
+
w
∗
T
(
R
+
B
T
P
t
+
1
B
)
w
∗
+
2
z
T
A
T
P
t
+
1
B
w
∗
=
z
T
Q
z
+
z
T
A
T
P
t
+
1
A
z
+
z
T
A
T
P
t
+
1
B
(
R
+
B
T
P
t
+
1
B
)
−
1
(
R
+
B
T
P
t
+
1
B
)
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
z
−
2
z
T
A
T
P
t
+
1
B
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
z
=
z
T
Q
z
+
z
T
A
T
P
t
+
1
A
z
+
z
T
A
T
P
t
+
1
B
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
z
−
2
z
T
A
T
P
t
+
1
B
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
z
=
z
T
Q
z
+
z
T
A
T
P
t
+
1
A
z
−
z
T
A
T
P
t
+
1
B
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
z
=
z
T
(
Q
+
A
T
P
t
+
1
A
−
A
T
P
t
+
1
B
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
)
z
=
z
T
P
t
z
(17)
\begin{array}{cl} V_t(z) &= z^TQz + w^{*T}Rw^* + (Az+Bw^*)^TP_{t+1}(Az+Bw^*)\\ &= z^TQz + w^{*T}Rw^* + z^TA^TP_{t+1}Az + 2z^TA^TP_{t+1}Bw^* + w^{*T}B^TP_{t+1}Bw^*\\ & = z^TQz + z^TA^TP_{t+1}Az + w^{*T}(R+B^TP_{t+1}B)w^* + 2z^TA^TP_{t+1}Bw^*\\ & = z^TQz + z^TA^TP_{t+1}Az\\ &+z^TA^TP_{t+1}B(R + B^TP_{t+1}B)^{-1}(R+B^TP_{t+1}B)(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}Az\\ &-2z^TA^TP_{t+1}B(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}Az\\ &=z^TQz + z^TA^TP_{t+1}Az\\ &+z^TA^TP_{t+1}B(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}Az\\ &-2z^TA^TP_{t+1}B(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}Az\\ &= z^TQz + z^TA^TP_{t+1}Az - z^TA^TP_{t+1}B(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}Az\\ &= z^T(Q + A^TP_{t+1}A - A^TP_{t+1}B(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}A)z\\ &= z^TP_tz \end{array}\tag{17}
Vt(z)=zTQz+w∗TRw∗+(Az+Bw∗)TPt+1(Az+Bw∗)=zTQz+w∗TRw∗+zTATPt+1Az+2zTATPt+1Bw∗+w∗TBTPt+1Bw∗=zTQz+zTATPt+1Az+w∗T(R+BTPt+1B)w∗+2zTATPt+1Bw∗=zTQz+zTATPt+1Az+zTATPt+1B(R+BTPt+1B)−1(R+BTPt+1B)(R+BTPt+1B)−1BTPt+1Az−2zTATPt+1B(R+BTPt+1B)−1BTPt+1Az=zTQz+zTATPt+1Az+zTATPt+1B(R+BTPt+1B)−1BTPt+1Az−2zTATPt+1B(R+BTPt+1B)−1BTPt+1Az=zTQz+zTATPt+1Az−zTATPt+1B(R+BTPt+1B)−1BTPt+1Az=zT(Q+ATPt+1A−ATPt+1B(R+BTPt+1B)−1BTPt+1A)z=zTPtz(17)
上述公式化简过程中,由于
P
t
+
1
=
P
t
+
1
T
,
R
=
R
T
P_{t+1}=P^{T}_{t+1},R=R^T
Pt+1=Pt+1T,R=RT,所以
(
(
R
+
B
T
P
t
+
1
B
)
−
1
)
T
=
(
R
+
B
T
P
t
+
1
B
)
−
1
\bigl((R + B^TP_{t+1}B)^{-1}\bigr)^T = (R + B^TP_{t+1}B)^{-1}
((R+BTPt+1B)−1)T=(R+BTPt+1B)−1。
由等式(17)可知
P
t
=
Q
+
A
T
P
t
+
1
A
−
A
T
P
t
+
1
B
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
(18)
P_t = Q + A^TP_{t+1}A - A^TP_{t+1}B(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}A \tag{18}
Pt=Q+ATPt+1A−ATPt+1B(R+BTPt+1B)−1BTPt+1A(18)
求解过程
关于LQR的求解过程,可以采用动态规划算法,依据上述公式(20)的递归关系,反向递推,求出满足一定条件的最小代价值。
- 确定迭代范围 N N N
- 设置迭代初始值 P N = Q f P_N=Q_f PN=Qf
- 循环迭代, t = N , … , 1 t = N,\dots,1 t=N,…,1
P t − 1 = Q + A T P t + 1 A − A T P t + 1 B ( R + B T P t + 1 B ) − 1 B T P t + 1 A P_{t-1} = Q + A^TP_{t+1}A - A^TP_{t+1}B(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}A Pt−1=Q+ATPt+1A−ATPt+1B(R+BTPt+1B)−1BTPt+1A
- 则反馈系数 K t = − ( R + B T P t + 1 B ) − 1 B T P t + 1 A K_t = -(R + B^TP_{t+1}B)^{-1}B^TP_{t+1}A Kt=−(R+BTPt+1B)−1BTPt+1A,对于时间 t = 0 , … , N − 1 t=0,\dots,N-1 t=0,…,N−1
- 优化的控制量 u t l q r = K t x t u_t^{lqr}=K_tx_t utlqr=Ktxt