1. 调节系统
对下面的离散系统
x
⃗
(
k
+
1
)
=
F
x
⃗
(
k
)
+
G
u
⃗
(
k
)
\vec x(k+1) = F\vec x(k)+G\vec u(k)
x(k+1)=Fx(k)+Gu(k)
1.1 推导
给定二次型性能指标函数
J
=
x
⃗
T
(
N
)
Q
0
x
⃗
(
N
)
+
∑
k
=
0
N
−
1
[
x
⃗
T
(
k
)
Q
1
x
⃗
(
k
)
+
u
⃗
T
(
k
)
Q
2
u
⃗
(
k
)
]
J=\vec x^\text T(N)Q_0\vec x(N) +\sum_{k=0}^{N-1}\Big[\vec x^\text T(k)Q_1\vec x(k) +\vec u^\text T(k)Q_2\vec u(k)\Big]
J=xT(N)Q0x(N)+k=0∑N−1[xT(k)Q1x(k)+uT(k)Q2u(k)]
使用动态规划法,定义
J
i
J_i
Ji 并找到
J
i
J_i
Ji 和
J
i
+
1
J_{i+1}
Ji+1 之间的递推关系
J
i
=
x
⃗
T
(
N
)
Q
0
x
⃗
(
N
)
+
∑
k
=
i
N
−
1
[
x
⃗
T
(
k
)
Q
1
x
⃗
(
k
)
+
u
⃗
T
(
k
)
Q
2
u
⃗
(
k
)
]
=
x
⃗
T
(
N
)
Q
0
x
⃗
(
N
)
+
∑
k
=
i
+
1
N
−
1
[
x
⃗
T
(
k
)
Q
1
x
⃗
(
k
)
+
u
⃗
T
(
k
)
Q
2
u
⃗
(
k
)
]
+
x
⃗
T
(
i
)
Q
1
x
⃗
(
i
)
+
u
⃗
T
(
i
)
Q
2
u
⃗
(
i
)
=
J
i
+
1
+
x
⃗
T
(
i
)
Q
1
x
⃗
(
i
)
+
u
⃗
T
(
i
)
Q
2
u
⃗
(
i
)
\begin{aligned} J_i =& \vec x^\text T(N)Q_0\vec x(N) +\sum_{k=i}^{N-1}\Big[\vec x^\text T(k)Q_1\vec x(k) +\vec u^\text T(k)Q_2\vec u(k)\Big] \\ =& \vec x^\text T(N)Q_0\vec x(N) +\sum_{k=i+1}^{N-1}\Big[\vec x^\text T(k)Q_1\vec x(k) +\vec u^\text T(k)Q_2\vec u(k)\Big] \\ &+ \vec x^\text T(i)Q_1\vec x(i) + \vec u^\text T(i)Q_2\vec u(i) \\ =& J_{i+1} + \vec x^\text T(i)Q_1\vec x(i) + \vec u^\text T(i)Q_2\vec u(i) \end{aligned}
Ji===xT(N)Q0x(N)+k=i∑N−1[xT(k)Q1x(k)+uT(k)Q2u(k)]xT(N)Q0x(N)+k=i+1∑N−1[xT(k)Q1x(k)+uT(k)Q2u(k)]+xT(i)Q1x(i)+uT(i)Q2u(i)Ji+1+xT(i)Q1x(i)+uT(i)Q2u(i)
然后从后往前开始求最优解
J
N
=
x
⃗
T
(
N
)
Q
0
x
⃗
(
N
)
J
N
−
1
=
J
N
+
x
⃗
T
(
N
−
1
)
Q
1
x
⃗
(
N
−
1
)
+
u
⃗
T
(
N
−
1
)
Q
2
u
⃗
(
N
−
1
)
\begin{aligned} J_N =& \vec x^\text T(N)Q_0\vec x(N) \\ J_{N-1} =& J_N + \vec x^\text T(N-1)Q_1\vec x(N-1) +\vec u^\text T(N-1)Q_2\vec u(N-1) \\ \end{aligned}
JN=JN−1=xT(N)Q0x(N)JN+xT(N−1)Q1x(N−1)+uT(N−1)Q2u(N−1)
此时求解
u
⃗
(
N
−
1
)
\vec u(N-1)
u(N−1) 使
J
N
−
1
J_{N-1}
JN−1 最小,把
J
N
−
1
J_{N-1}
JN−1 对
u
⃗
(
N
−
1
)
\vec u(N-1)
u(N−1) 求导
d
J
N
d
u
⃗
(
N
−
1
)
=
d
x
⃗
(
N
)
T
d
u
⃗
(
N
−
1
)
⋅
d
J
N
d
x
⃗
(
N
)
=
G
T
⋅
(
Q
0
+
Q
0
T
)
x
⃗
(
N
)
d
J
N
−
1
d
u
⃗
(
N
−
1
)
=
d
J
N
d
u
⃗
(
N
−
1
)
+
d
d
u
⃗
(
N
−
1
)
[
x
⃗
T
(
N
−
1
)
Q
1
x
⃗
(
N
−
1
)
+
u
⃗
T
(
N
−
1
)
Q
2
u
⃗
(
N
−
1
)
]
=
G
T
(
Q
0
+
Q
0
T
)
x
⃗
(
N
)
+
(
Q
2
+
Q
2
T
)
u
⃗
(
N
−
1
)
=
2
G
T
Q
0
x
⃗
(
N
)
+
2
Q
2
u
⃗
(
N
−
1
)
\begin{aligned} \frac{\text dJ_{N}}{\text d\vec u(N-1)} =& \frac{\text d\vec x(N)^\text T}{\text d\vec u(N-1)} \cdot\frac{\text dJ_{N}}{\text d\vec x(N)} = G^\text T \cdot (Q_0+Q_0^\text T)\vec x(N) \\ \frac{\text dJ_{N-1}}{\text d\vec u(N-1)} =& \frac{\text dJ_{N}}{\text d\vec u(N-1)} +\frac{\text d}{\text d\vec u(N-1)} \Big[\vec x^\text T(N-1)Q_1\vec x(N-1) +\vec u^\text T(N-1)Q_2\vec u(N-1)\Big] \\ =& G^\text T(Q_0+Q_0^\text T)\vec x(N) +(Q_2+Q_2^\text T)\vec u(N-1) \\ =& 2G^\text TQ_0\vec x(N) + 2Q_2\vec u(N-1) \end{aligned}
du(N−1)dJN=du(N−1)dJN−1===du(N−1)dx(N)T⋅dx(N)dJN=GT⋅(Q0+Q0T)x(N)du(N−1)dJN+du(N−1)d[xT(N−1)Q1x(N−1)+uT(N−1)Q2u(N−1)]GT(Q0+Q0T)x(N)+(Q2+Q2T)u(N−1)2GTQ0x(N)+2Q2u(N−1)
令导数为0得到
G
T
Q
0
x
⃗
(
N
)
+
Q
2
u
⃗
(
N
−
1
)
=
0
G
T
Q
0
[
F
x
⃗
(
N
−
1
)
+
G
u
⃗
(
N
−
1
)
]
+
Q
2
u
⃗
(
N
−
1
)
=
0
G
T
Q
0
F
x
⃗
(
N
−
1
)
+
[
G
T
Q
0
G
+
Q
2
]
u
⃗
(
N
−
1
)
=
0
u
⃗
(
N
−
1
)
=
−
[
G
T
Q
0
G
+
Q
2
]
−
1
G
T
Q
0
F
x
⃗
(
N
−
1
)
\begin{aligned} & G^\text TQ_0\vec x(N) + Q_2\vec u(N-1)=0 \\ & G^\text TQ_0\Big[F\vec x(N-1)+G\vec u(N-1)\Big] + Q_2\vec u(N-1)=0 \\ & G^\text TQ_0F\vec x(N-1) + \Big[G^\text TQ_0G+Q_2\Big]\vec u(N-1)=0 \\ & \vec u(N-1) = -\Big[G^\text TQ_0G+Q_2\Big]^{-1}G^\text TQ_0F\vec x(N-1) \end{aligned}
GTQ0x(N)+Q2u(N−1)=0GTQ0[Fx(N−1)+Gu(N−1)]+Q2u(N−1)=0GTQ0Fx(N−1)+[GTQ0G+Q2]u(N−1)=0u(N−1)=−[GTQ0G+Q2]−1GTQ0Fx(N−1)
令
S
(
N
)
=
Q
0
L
(
N
−
1
)
=
[
G
T
Q
0
G
+
Q
2
]
−
1
G
T
Q
0
F
=
[
G
T
S
(
N
)
G
+
Q
2
]
−
1
G
T
S
(
N
)
F
\begin{aligned} S(N) =& Q_0 \\ L(N-1) =& \Big[G^\text TQ_0G+Q_2\Big]^{-1}G^\text TQ_0F \\ =& \Big[G^\text TS(N)G+Q_2\Big]^{-1}G^\text TS(N)F \\ \end{aligned}
S(N)=L(N−1)==Q0[GTQ0G+Q2]−1GTQ0F[GTS(N)G+Q2]−1GTS(N)F
则
u
⃗
(
N
−
1
)
=
−
L
(
N
−
1
)
x
⃗
(
N
−
1
)
x
⃗
T
(
N
)
=
[
F
x
⃗
(
N
−
1
)
+
G
u
⃗
(
N
−
1
)
]
T
=
x
⃗
T
(
N
−
1
)
[
F
−
G
L
]
T
\begin{aligned} \vec u(N-1) =& -L(N-1)\vec x(N-1) \\ \vec x^\text T(N) =& \Big[F\vec x(N-1)+G\vec u(N-1)\Big]^\text T \\ =& \vec x^\text T(N-1)\Big[F-GL\Big]^\text T \\ \end{aligned}
u(N−1)=xT(N)==−L(N−1)x(N−1)[Fx(N−1)+Gu(N−1)]TxT(N−1)[F−GL]T
带入
J
(
N
−
1
)
J(N-1)
J(N−1) 得到
J
(
N
−
1
)
=
x
⃗
T
(
N
)
Q
0
x
⃗
(
N
)
+
[
x
⃗
T
(
N
−
1
)
Q
1
x
⃗
(
N
−
1
)
+
u
⃗
T
(
N
−
1
)
Q
2
u
⃗
(
N
−
1
)
]
=
x
⃗
T
(
N
−
1
)
(
F
−
G
L
(
N
−
1
)
)
T
Q
0
(
F
−
G
L
(
N
−
1
)
)
x
⃗
(
N
−
1
)
+
x
⃗
T
(
N
−
1
)
Q
1
x
⃗
(
N
−
1
)
+
x
⃗
T
(
N
−
1
)
L
(
N
−
1
)
T
Q
2
L
(
N
−
1
)
x
⃗
(
N
−
1
)
=
x
⃗
T
(
N
−
1
)
S
(
N
−
1
)
x
⃗
(
N
−
1
)
\begin{aligned} J(N-1) =& \vec x^\text T(N)Q_0\vec x(N) +\Big[\vec x^\text T(N-1)Q_1\vec x(N-1) +\vec u^\text T(N-1)Q_2\vec u(N-1)\Big] \\ =& \vec x^\text T(N-1)(F-GL(N-1))^\text TQ_0(F-GL(N-1))\vec x(N-1) \\ &+ \vec x^\text T(N-1)Q_1\vec x(N-1) +\vec x^\text T(N-1)L(N-1)^\text TQ_2L(N-1)\vec x(N-1) \\ =& \vec x^\text T(N-1)S(N-1)\vec x(N-1) \\ \end{aligned}
J(N−1)===xT(N)Q0x(N)+[xT(N−1)Q1x(N−1)+uT(N−1)Q2u(N−1)]xT(N−1)(F−GL(N−1))TQ0(F−GL(N−1))x(N−1)+xT(N−1)Q1x(N−1)+xT(N−1)L(N−1)TQ2L(N−1)x(N−1)xT(N−1)S(N−1)x(N−1)
因为括号里都是
(
N
−
1
)
(N-1)
(N−1),所以下面用省略括号的简洁版
J
(
N
−
1
)
=
x
⃗
T
(
F
−
G
L
)
T
Q
0
(
F
−
G
L
)
x
⃗
+
x
⃗
T
Q
1
x
+
x
⃗
T
L
T
Q
2
L
x
=
x
⃗
T
S
x
⃗
\begin{aligned} J(N-1) =& \vec x^\text T(F-GL)^\text TQ_0(F-GL)\vec x +\vec x^\text TQ_1x+\vec x^\text TL^\text TQ_2Lx = \vec x^\text TS\vec x \end{aligned}
J(N−1)=xT(F−GL)TQ0(F−GL)x+xTQ1x+xTLTQ2Lx=xTSx
其中
S
(
N
−
1
)
=
(
F
−
G
L
)
T
Q
0
(
F
−
G
L
)
+
Q
1
+
L
T
Q
2
L
S(N-1) = (F-GL)^\text TQ_0(F-GL) + Q_1 + L^\text TQ_2L
S(N−1)=(F−GL)TQ0(F−GL)+Q1+LTQ2L
继续算
N
−
2
N-2
N−2
J
N
−
2
=
J
N
−
1
+
x
⃗
T
(
N
−
2
)
Q
1
x
⃗
(
N
−
2
)
+
u
⃗
T
(
N
−
2
)
Q
2
u
⃗
(
N
−
2
)
d
J
N
−
2
d
u
⃗
(
N
−
2
)
=
d
J
N
−
1
d
u
⃗
(
N
−
2
)
+
d
d
u
⃗
(
N
−
2
)
[
u
⃗
T
(
N
−
2
)
Q
2
u
⃗
(
N
−
2
)
]
=
d
d
u
⃗
(
N
−
2
)
[
x
⃗
T
S
x
⃗
]
+
2
Q
2
u
⃗
(
N
−
2
)
=
d
x
⃗
T
(
N
−
1
)
d
u
⃗
(
N
−
2
)
[
2
S
(
N
−
1
)
x
⃗
(
N
−
1
)
]
+
2
Q
2
u
⃗
(
N
−
2
)
1
2
d
J
N
−
2
d
u
⃗
(
N
−
2
)
=
d
[
G
u
⃗
(
N
−
2
)
]
T
d
u
⃗
(
N
−
2
)
[
S
(
N
−
1
)
x
⃗
(
N
−
1
)
]
+
Q
2
u
⃗
(
N
−
2
)
=
G
T
S
(
N
−
1
)
[
F
x
⃗
(
N
−
2
)
+
G
u
⃗
(
N
−
2
)
]
+
Q
2
u
⃗
(
N
−
2
)
\begin{aligned} J_{N-2} =& J_{N-1}+\vec x^\text T(N-2)Q_1\vec x(N-2) +\vec u^\text T(N-2)Q_2\vec u(N-2) \\ \frac{\text dJ_{N-2}}{\text d\vec u(N-2)} =& \frac{\text dJ_{N-1}}{\text d\vec u(N-2)} +\frac{\text d}{\text d\vec u(N-2)}\Big[\vec u^\text T(N-2)Q_2\vec u(N-2)\Big] \\ =& \frac{\text d}{\text d\vec u(N-2)}\Big[\vec x^\text TS\vec x\Big] +2Q_2\vec u(N-2) \\ =& \frac{\text d\vec x^\text T(N-1)}{\text d\vec u(N-2)} \Big[2S(N-1)\vec x(N-1)\Big] + 2Q_2\vec u(N-2) \\ \frac12\frac{\text dJ_{N-2}}{\text d\vec u(N-2)} =& \frac{\text d[G\vec u(N-2)]^\text T}{\text d\vec u(N-2)} \Big[S(N-1)\vec x(N-1)\Big] + Q_2\vec u(N-2) \\ =& G^\text TS(N-1)\Big[F\vec x(N-2)+G\vec u(N-2)\Big] + Q_2\vec u(N-2) \\ \end{aligned}
JN−2=du(N−2)dJN−2===21du(N−2)dJN−2==JN−1+xT(N−2)Q1x(N−2)+uT(N−2)Q2u(N−2)du(N−2)dJN−1+du(N−2)d[uT(N−2)Q2u(N−2)]du(N−2)d[xTSx]+2Q2u(N−2)du(N−2)dxT(N−1)[2S(N−1)x(N−1)]+2Q2u(N−2)du(N−2)d[Gu(N−2)]T[S(N−1)x(N−1)]+Q2u(N−2)GTS(N−1)[Fx(N−2)+Gu(N−2)]+Q2u(N−2)
令导数为0得到
[
G
T
S
(
N
−
1
)
G
+
Q
2
]
u
⃗
(
N
−
2
)
+
G
T
S
(
N
−
1
)
F
x
⃗
(
N
−
2
)
=
0
L
(
N
−
2
)
=
[
G
T
S
(
N
−
1
)
G
+
Q
2
]
−
1
G
T
S
(
N
−
1
)
F
u
⃗
(
N
−
2
)
=
−
L
(
N
−
2
)
x
⃗
(
N
−
2
)
\begin{aligned} & \Big[G^\text TS(N-1)G+Q_2\Big]\vec u(N-2)+G^\text TS(N-1)F\vec x(N-2)=0 \\ & L(N-2) = \Big[G^\text TS(N-1)G+Q_2\Big]^{-1}G^\text TS(N-1)F \\ & \vec u(N-2) = -L(N-2)\vec x(N-2) \\ \end{aligned}
[GTS(N−1)G+Q2]u(N−2)+GTS(N−1)Fx(N−2)=0L(N−2)=[GTS(N−1)G+Q2]−1GTS(N−1)Fu(N−2)=−L(N−2)x(N−2)
依次类推得到每个时刻的
u
⃗
\vec u
u(这我不会先空着)
d
J
i
d
u
⃗
i
=
d
J
i
+
1
d
u
⃗
i
+
d
d
u
⃗
i
[
x
⃗
T
(
i
)
Q
1
x
⃗
(
i
)
+
u
⃗
T
(
i
)
Q
2
u
⃗
(
i
)
]
=
\begin{aligned} \frac{\text dJ_i}{\text d\vec u_i} =& \frac{\text dJ_{i+1}}{\text d\vec u_i} +\frac{\text d}{\text d\vec u_i}\Big[\vec x^\text T(i)Q_1\vec x(i) +\vec u^\text T(i)Q_2\vec u(i)\Big] \\ =& \end{aligned}
duidJi==duidJi+1+duid[xT(i)Q1x(i)+uT(i)Q2u(i)]
递推关系
L
[
k
]
=
(
G
T
S
[
k
+
1
]
G
+
Q
2
)
−
1
G
T
S
[
k
+
1
]
F
S
[
k
]
=
(
F
−
G
L
[
k
]
)
T
Q
0
(
F
−
G
L
[
k
]
)
+
L
T
[
k
]
Q
2
L
[
k
]
+
Q
1
\begin{aligned} L[k] =& \Big(G^\text TS[k+1]G+Q_2\Big)^{-1}G^\text TS[k+1]F \\ S[k] =& (F-GL[k])^\text TQ_0(F-GL[k]) + L^\text T[k]Q_2L[k] + Q_1 \\ \end{aligned}
L[k]=S[k]=(GTS[k+1]G+Q2)−1GTS[k+1]F(F−GL[k])TQ0(F−GL[k])+LT[k]Q2L[k]+Q1
1.2 仿真
# 离散最优控制
import numpy as np
import matplotlib.pyplot as plt
N = 128
STEP = 0.1
F = np.matrix([[1, STEP], [0, 1]])
G = np.matrix([[0.5*STEP**2], [STEP]])
Q_0 = np.matrix([[1, 0], [0, 1]])
Q_1 = 0.01 * np.matrix([[1, 0], [0, 1]])
Q_2 = 0.01
vecx = np.matrix([[10], [5.5]])
S = Q_0
listL = []
for n1 in range(N):
coeff = 1 / (G.T @ S @ G + Q_2)[0,0]
L = coeff * G.T @ S @ F
S = (F - G @ L).T @ Q_0 @ (F - G @ L) + Q_1 + Q_2 * L.T @ L
listL = [*listL, L]
plotdata = []
for n1 in range(N):
u = -(listL[n1] @ vecx)[0,0]
vecx = F @ vecx + G * u
plotdata.append([n1, vecx[0,0], vecx[1,0]])
plotdata = np.array(plotdata)
plt.plot(plotdata[:, 0], plotdata[:, 1])
plt.plot(plotdata[:, 0], plotdata[:, 2])
plt.show()
2 跟踪系统
(待补充。。。)
向量求导公式
d d x ⃗ ( x ⃗ T A x ⃗ ) = ( A + A T ) x d x ⃗ T d x ⃗ = I d x ⃗ d x ⃗ = I ⃗ = [ 1 0 0 , 0 1 0 , 0 0 1 ] T d ( A x ⃗ ) T d x ⃗ = A T d A x ⃗ d x ⃗ = A ⃗ = [ a ⃗ 1 T a ⃗ 2 T a ⃗ 3 T ] T d f d x ⃗ = d y ⃗ T d x ⃗ ⋅ d f d y ⃗ \begin{aligned} & \frac{\text d}{\text d\vec x}(\vec x^\text TA\vec x)=(A+A^\text T)x \\ & \frac{\text d\vec x^\text T}{\text d\vec x}=I \\ & \frac{\text d\vec x}{\text d\vec x}=\vec I= \begin{bmatrix} 1 & 0 & 0, & 0 & 1 & 0, & 0 & 0 & 1 \end{bmatrix}^\text T \\ & \frac{\text d(A\vec x)^\text T}{\text d\vec x}=A^\text T \\ & \frac{\text dA\vec x}{\text d\vec x}=\vec A =\begin{bmatrix} \vec a_1^\text T & \vec a_2^\text T & \vec a_3^\text T \end{bmatrix}^\text T \\ & \frac{\text df}{\text d\vec x}=\frac{\text d\vec y^\text T}{\text d\vec x} \cdot\frac{\text df}{\text d\vec y} \end{aligned} dxd(xTAx)=(A+AT)xdxdxT=Idxdx=I=[100,010,001]Tdxd(Ax)T=ATdxdAx=A=[a1Ta2Ta3T]Tdxdf=dxdyT⋅dydf