离散系统的最优控制

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=x T(N)Q0x (N)+k=0N1[x T(k)Q1x (k)+u T(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===x T(N)Q0x (N)+k=iN1[x T(k)Q1x (k)+u T(k)Q2u (k)]x T(N)Q0x (N)+k=i+1N1[x T(k)Q1x (k)+u T(k)Q2u (k)]+x T(i)Q1x (i)+u T(i)Q2u (i)Ji+1+x T(i)Q1x (i)+u T(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=JN1=x T(N)Q0x (N)JN+x T(N1)Q1x (N1)+u T(N1)Q2u (N1)
此时求解 u ⃗ ( N − 1 ) \vec u(N-1) u (N1) 使 J N − 1 J_{N-1} JN1 最小,把 J N − 1 J_{N-1} JN1 u ⃗ ( N − 1 ) \vec u(N-1) u (N1) 求导
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 (N1)dJN=du (N1)dJN1===du (N1)dx (N)Tdx (N)dJN=GT(Q0+Q0T)x (N)du (N1)dJN+du (N1)d[x T(N1)Q1x (N1)+u T(N1)Q2u (N1)]GT(Q0+Q0T)x (N)+(Q2+Q2T)u (N1)2GTQ0x (N)+2Q2u (N1)
令导数为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 (N1)=0GTQ0[Fx (N1)+Gu (N1)]+Q2u (N1)=0GTQ0Fx (N1)+[GTQ0G+Q2]u (N1)=0u (N1)=[GTQ0G+Q2]1GTQ0Fx (N1)

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(N1)==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 (N1)=x T(N)==L(N1)x (N1)[Fx (N1)+Gu (N1)]Tx T(N1)[FGL]T
带入 J ( N − 1 ) J(N-1) J(N1) 得到
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(N1)===x T(N)Q0x (N)+[x T(N1)Q1x (N1)+u T(N1)Q2u (N1)]x T(N1)(FGL(N1))TQ0(FGL(N1))x (N1)+x T(N1)Q1x (N1)+x T(N1)L(N1)TQ2L(N1)x (N1)x T(N1)S(N1)x (N1)
因为括号里都是 ( N − 1 ) (N-1) (N1),所以下面用省略括号的简洁版
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(N1)=x T(FGL)TQ0(FGL)x +x TQ1x+x TLTQ2Lx=x TSx
其中
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(N1)=(FGL)TQ0(FGL)+Q1+LTQ2L
继续算 N − 2 N-2 N2
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} JN2=du (N2)dJN2===21du (N2)dJN2==JN1+x T(N2)Q1x (N2)+u T(N2)Q2u (N2)du (N2)dJN1+du (N2)d[u T(N2)Q2u (N2)]du (N2)d[x TSx ]+2Q2u (N2)du (N2)dx T(N1)[2S(N1)x (N1)]+2Q2u (N2)du (N2)d[Gu (N2)]T[S(N1)x (N1)]+Q2u (N2)GTS(N1)[Fx (N2)+Gu (N2)]+Q2u (N2)
令导数为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(N1)G+Q2]u (N2)+GTS(N1)Fx (N2)=0L(N2)=[GTS(N1)G+Q2]1GTS(N1)Fu (N2)=L(N2)x (N2)
依次类推得到每个时刻的 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} du idJi==du idJi+1+du id[x T(i)Q1x (i)+u T(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(FGL[k])TQ0(FGL[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} dx d(x TAx )=(A+AT)xdx dx T=Idx dx =I =[100,010,001]Tdx d(Ax )T=ATdx dAx =A =[a 1Ta 2Ta 3T]Tdx df=dx dy Tdy df

参考

最优控制理论 九、Bellman动态规划法用于最优控制 -优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值