在前文中:具有不确定参数系统的自适应跟踪控制设计_介绍了自适应控制的基本原理和一些设计的实例。前文中的模型都是类似于公式(1)的模型。
x ˙ = a x + b u ( 1 ) \dot x =ax+bu \qquad(1) x˙=ax+bu(1)
因而自适应控制中设计参数的更新率才能使得系统能够实现跟踪控制或者镇定控制。在本文中我们将进一步地利用神经网络实现自适应控制,分析和上一篇文章中有什么不同之处。
神经网络对我们来说已经不是陌生的词汇了,你可以在很多教科书、网络上看到它的身影。RBF神经网络就是其中的一种,它采用高斯函数作为激活函数,已经有研究证明一个RBF神经网络可以任意逼近任何连续函数,因此可以用RBF神经网络来逼近控制系统中的非线性项,从而帮助我们设计控制器。
神经网络采用高斯函数有着这样的好处,当输入的值离函数中心点距离近时,其输出的值越大,如下图所示,曲线经过的点被激活,而远离曲线的点输出数值非常小,基本上不会被激活。
针对如下所示的简单非线性系统
x ˙ = f ( x ) + u y = x \begin{aligned} \dot x &=f(x)+u\\ y&=x \end{aligned} x˙y=f(x)+u=x
其中 f ( x ) f(x) f(x)是非线性系统动力学,平滑但未知。跟踪目标是跟踪如下参考模型生成的周期性参考轨迹 x d x_d xd
参考模型的状态空间方程如下:
x ˙ d = f d ( x d ) y d = x d \begin{aligned} \dot x_d &=f_d(x_d)\\ y_d&=x_d \end{aligned} x˙dyd=fd(xd)=xd
其中 f d ( x d ) f_d(x_d) fd(xd)是已知的平滑非线性函数,控制目标是 y → y d y→y_d y→yd
按照上一篇文章的控制器设计流程来尝试设计控制器。
定义误差变量: e = y − y d e=y-y_d e=y−yd
求误差变量的的动态方程
e ˙ = y ˙ − y ˙ d = f ( x ) + u − f d ( x d ) ( 2 ) \begin{aligned} \dot e &=\dot y-\dot y_d\\ &=f(x)+u-f_d(x_d) \end{aligned} \qquad(2) e˙=y˙−y˙d=f(x)+u−fd(xd)(2)
设计李雅普诺夫函数为 V 1 = 1 2 e 2 V_1=\frac{1}{2}e^2 V1=21e2
对 V 1 V_1 V1求导之后,易知控制器设计可以选择为:
u = − k e − f ( x ) + f d ( x d ) u=-ke-f(x)+f_d(x_d) u=−ke−f(x)+fd(xd)
这是在精确模型下,即 f ( x ) f(x) f(x)已知下的控制器设计,然而由问题描述中我们知道, f ( x ) f(x) f(x)不仅未知,且是平滑的非线性的。
那么显然如果我们能对 f ( x ) f(x) f(x)进行估计,或许就能设计出控制器了。而针对f(x)非线性平滑的特点,结合RBF神经网络可以逼近任意连续函数的特点,可以采用RBF神经网络来估计f(x)。
这次设计我们采用RBF神经网络估计 f ( x ) f(x) f(x)。
f ( x ) = W ∗ T S ( x ) + ϵ ( x ) f(x)=W^{*T}S(x)+\epsilon (x) f(x)=W∗TS(x)+ϵ(x)
其中 W ∗ W^{*} W∗是理想的连接权值, S ( x ) S(x) S(x)是径向基函数, ϵ ( x ) \epsilon (x) ϵ(x)是逼近误差。
显然理想的连接权值我们也是无法直接获取的,因此也需要估计。不过这里对 W ∗ W^* W∗的估计就类似于上篇文章的参数估计了。
设计 W ^ \hat W W^为 W ∗ W^* W∗的估计值,其误差表示为 W ~ = W ^ − W ∗ \tilde W=\hat W-W^* W~=W^−W∗
那么接下来我们就能来继续设计控制器了。
定义误差变量和误差变量的动态方程如尝试设计小节中的一样。即:
e ˙ = y ˙ − y ˙ d = f ( x ) + u − f d ( x d ) = W ∗ T S ( x ) + ϵ ( x ) + u − f d ( x d ) \begin{aligned} \dot e &=\dot y-\dot y_d\\ &=f(x)+u-f_d(x_d)\\ &=W^{*T}S(x)+\epsilon (x)+u-f_d(x_d) \end{aligned} e˙=y˙−y˙d=f(x)+u−fd(xd)=W∗TS(x)+ϵ(x)+u−fd(xd)
继续设计。
设计候选李雅普诺夫函数为 V 1 = 1 2 e 2 V_1=\frac{1}{2}e^2 V1=21e2,并对 V 1 V_1 V1进行求导。
V ˙ 1 = e e ˙ = e ( W ∗ T S ( x ) + ϵ ( x ) + u − f d ( x d ) ) \begin{aligned} \dot V_1 &= e \dot e\\ &= e(W^{*T}S(x)+\epsilon (x)+u-f_d(x_d)) \end{aligned} V˙1=ee˙=e(W∗TS(x)+ϵ(x)+u−fd(xd))
欲使 V ˙ 1 = − k e 2 \dot V_1 =-ke^2 V˙1=−ke2,则可以设计出控制器 u u u
设计控制器
u = − k e − w ^ T S ( x ) + f d ( x d ) ( 3 ) u=-ke-\hat w^TS(x)+f_d(x_d) \qquad(3) u=−ke−w^TS(x)+fd(xd)(3)
将其带入到 V ˙ 1 \dot V_1 V˙1中
V ˙ 1 = e e ˙ = e ( W ∗ T S ( x ) + ϵ ( x ) + u − f d ( x d ) ) = e ( W ∗ T S ( x ) + ϵ ( x ) − k e − w ^ T S ( x ) + f d ( x d ) − f d ( x d ) ) = e ( − k e − W ~ T S ( x ) + ϵ ( x ) ) = − k e 2 − W ~ T S ( x ) e + e ϵ ( x ) \begin{aligned} \dot V_1 &= e \dot e\\ &= e(W^{*T}S(x)+\epsilon (x)+u-f_d(x_d))\\ &=e(W^{*T}S(x)+\epsilon (x)-ke-\hat w^TS(x)+f_d(x_d)-f_d(x_d))\\ &=e(-ke-\tilde W^TS(x)+\epsilon (x))\\ &=-ke^2-\tilde W^TS(x)e+e\epsilon (x) \end{aligned} V˙1=ee˙=e(W∗TS(x)+ϵ(x)+u−fd(xd))=e(W∗TS(x)+ϵ(x)−ke−w^TS(x)+fd(xd)−fd(xd))=e(−ke−W~TS(x)+ϵ(x))=−ke2−W~TS(x)e+eϵ(x)
设计更新率,由于引入了新的误差变量 W ~ \tilde W W~,考虑新的候选李雅普诺夫函数 V = V 1 + 1 2 Γ − 1 W ~ T W ~ V=V1+\frac{1}{2}\Gamma^{-1}\tilde W^T \tilde W V=V1+21Γ−1W~TW~
这里的 Γ − 1 \Gamma^{-1} Γ−1是对角矩阵,类似于上一篇文中的 γ \gamma γ,是用来调节更新率的调节参数。
对其求导:
V ˙ = V ˙ 1 + Γ − 1 W ~ T W ^ ˙ = − k e 2 − W ~ T S ( x ) e + e ϵ ( x ) + Γ − 1 W ~ T W ^ ˙ = − k e 2 + W ~ T ( − S ( x ) e + Γ − 1 W ^ ˙ ) + e ϵ ( x ) ( 4 ) \begin{aligned} \dot V &=\dot V_1+\Gamma^{-1}\tilde W^T\dot {\hat W}\\ &=-ke^2-\tilde W^TS(x)e+e\epsilon (x)+\Gamma^{-1}\tilde W^T\dot {\hat W}\\ &=-ke^2+\tilde W^T(-S(x)e+\Gamma^{-1}\dot {\hat W})+e\epsilon (x)\\ \end{aligned} \qquad(4) V˙=V˙1+Γ−1W~TW^˙=−ke2−W~TS(x)e+eϵ(x)+Γ−1W~TW^˙=−ke2+W~T(−S(x)e+Γ−1W^˙)+eϵ(x)(4)
设计参数更新率为:
W ^ ˙ = Γ S ( x ) e ( 5 ) \dot {\hat W} =\Gamma S(x)e \qquad(5) W^˙=ΓS(x)e(5)
(这里的参数更新率(5)的鲁棒性不好,可以增加 σ \sigma σ-修正项来改善)
设计的参数更新率使得 V ˙ 1 \dot V_1 V˙1变为:
V ˙ = − k e 2 + e ϵ ( x ) \dot V =-ke^2+e\epsilon (x) V˙=−ke2+eϵ(x)
最后这一项好讨厌,使得我们得不到理想的负半定形式。可以采取放缩的形式来改善,这里我们用到三角不等式 a b ≤ a 2 + b 2 ab≤a^2+b^2 ab≤a2+b2,则
V ˙ = − k e 2 + e ϵ ( x ) ≤ − k e 2 + 1 2 k e 2 + 1 2 k ϵ 2 ( x ) < − 1 2 k e 2 + 1 2 k ϵ ∗ 2 \begin{aligned} \dot V &=-ke^2+e\epsilon (x)\\ &≤-ke^2+\frac{1}{2}ke^2+\frac{1}{2k}\epsilon^2(x)\\ &<-\frac{1}{2}ke^2+\frac{1}{2k}\epsilon^{*2} \end{aligned} V˙=−ke2+eϵ(x)≤−ke2+21ke2+2k1ϵ2(x)<−21ke2+2k1ϵ∗2
其中 ϵ ∗ \epsilon^* ϵ∗是一个非常小的值,这是李雅普诺夫意义下的稳定,存在收敛域。并且放缩的方法不同,得到的收敛域也不同。至此,公式(3)和公式(5)共同构成了系统的控制器和参数更新率。
(其实这里还有一点不明白)
在这一个问题中,其实设计过程与前一篇文章的自适应控制差不多。只不过是多了神经网络的应用过程,以至于后面出现无法消去的逼近误差,需要放缩。
针对如下所示的简单非线性系统
x ˙ = f ( x ) + b u y = x \begin{aligned} \dot x &=f(x)+bu\\ y&=x \end{aligned} x˙y=f(x)+bu=x
其中 f ( x ) f(x) f(x)是非线性系统动力学,平滑但未知,b是一个未知常量。跟踪目标是跟踪如下参考模型生成的周期性参考轨迹 x d x_d xd
参考模型的状态空间方程如下:
x ˙ d = f d ( x d ) y d = x d \begin{aligned} \dot x_d &=f_d(x_d)\\ y_d&=x_d \end{aligned} x˙dyd=fd(xd)=xd
其中 f d ( x d ) f_d(x_d) fd(xd)是已知的平滑非线性函数,控制目标是 y → y d y→y_d y→yd。
类似于前一篇文章自适应控制中的分析,未知常量 b b b的出现会导致系统设计控制器时出现未知量 b b b的情况,处理方法主要有两种。
为了说明 b b b的未知给控制器设计带来的影响,我们讨论在精确模型下即 b b b已知、 f ( x ) f(x) f(x)的情况下的控制器设计的情况。
定义误差变量: e = y − y d e=y-y_d e=y−yd
求误差变量的的动态方程
e ˙ = y ˙ − y ˙ d = f ( x ) + b u − f d ( x d ) \begin{aligned} \dot e &=\dot y-\dot y_d\\ &=f(x)+bu-f_d(x_d) \end{aligned} e˙=y˙−y˙d=f(x)+bu−fd(xd)
设计李雅普诺夫函数为 V 1 = 1 2 e 2 V_1=\frac{1}{2}e^2 V1=21e2
对 V 1 V_1 V1求导之后,易知控制器设计可以选择为:
u = − k e − f ( x ) + f d ( x d ) b u=\frac{-ke-f(x)+f_d(x_d)}{b} u=b−ke−f(x)+fd(xd)
这是在精确模型下,即 f ( x ) 、 b f(x)、b f(x)、b已知下的控制器设计,然而由第一部分我们已经知道 f ( x ) f(x) f(x)的处理方法,但是 b b b的未知使得设计控制器变得困难,这个情况下估计 b b b也是不好估计的。
总的来说有两种方案来解决这个问题。
定义误差变量: e = y − y d e=y-y_d e=y−yd
求误差变量的的动态方程
e ˙ = y ˙ − y ˙ d = f ( x ) + b u − f d ( x d ) = b ( f ( x ) b + u − f d ( x d ) b ) ( 6 ) \begin{aligned} \dot e &=\dot y-\dot y_d\\ &=f(x)+bu-f_d(x_d)\\ &=b(\frac{f(x)}{b}+u-\frac{f_d(x_d)}{b}) \end{aligned} \qquad(6) e˙=y˙−y˙d=f(x)+bu−fd(xd)=b(bf(x)+u−bfd(xd))(6)
从公式(6)中可以得知, f ( x ) b 、 − f d ( x d ) b \frac{f(x)}{b}、-\frac{f_d(x_d)}{b} bf(x)、−bfd(xd)这两项都是未知项,可以放在一个神经网络中进行估计。再通过对李雅普诺夫函数的选取来消除 b b b的影响,从而转换成和第一部分中的设计类似的情况。
设计李雅普诺夫函数为 V 1 = 1 2 ∣ b ∣ e 2 V_1=\frac{1}{2\lvert b \rvert}e^2 V1=2∣b∣1e2
V ˙ 1 = 1 ∣ b ∣ e e ˙ = 1 ∣ b ∣ e ( b ( f ( x ) b + u − f d ( x d ) b ) ) = s g n ( b ) e ( f ( x ) − f d ( x d ) b + u ) \begin{aligned} \dot V_1&=\frac{1}{\lvert b \rvert}e \dot e\\ &=\frac{1}{\lvert b \rvert}e(b(\frac{f(x)}{b}+u-\frac{f_d(x_d)}{b}))\\ &=sgn(b)e(\frac{f(x)-f_d(x_d)}{b}+u) \end{aligned} V˙1=∣b∣1ee˙=∣b∣1e(b(bf(x)+u−bfd(xd)))=sgn(b)e(bf(x)−fd(xd)+u)
其中的 f ( x ) − f d ( x d ) b \frac{f(x)-f_d(x_d)}{b} bf(x)−fd(xd)用神经网络来估计,于是我们就可以类似于“ 1.简单非线性系统的自适应神经网络控制”这一部分的设计继续进行了,在此就不赘述了。
值得注意的是,这个方案中的神经网络输入是几维的那?显然是两维的,包含 x x x和 f d ( x d ) b \frac{f_d(x_d)}{b} bfd(xd)。在神经网络布点的时候,假如一个维度上均匀布8个点,那么两维就是64个点。
64个点的神经网络运算量我们还可以接受,但是如果再增加一个维度,那么再仅仅只布了8个点的情况下,一共就有64*8个点,运算量是呈指数爆炸式增长的。因此我们希望尽可能地降低神经网络中的输入量个数。那么在这个系统下有没有可能降低输入量的个数那?当然有。
仍然按照设计控制器的常规步骤来设计,但是按照上一篇文章自适应控制中的,我们先对状态方程稍稍做一点变化。
x ˙ = f ( x ) + b u = b ( f ( x ) b x + u ) \begin{aligned} \dot x &=f(x)+bu\\ &= b(\frac{f(x)}{b}x+u)\\ \end{aligned} x˙=f(x)+bu=b(bf(x)x+u)
定义误差变量: e = y − y d e=y-y_d e=y−yd
求误差变量的的动态方程
e ˙ = y ˙ − y ˙ d = f ( x ) + b u − f d ( x d ) = b ( f ( x ) b + u ) − f d ( x d ) = b ( f ( x ) b + u − 1 b f d ( x d ) ) \begin{aligned} \dot e &=\dot y-\dot y_d\\ &=f(x)+bu-f_d(x_d)\\ &=b(\frac{f(x)}{b}+u)-f_d(x_d)\\ &=b(\frac{f(x)}{b}+u-\frac{1}{b}f_d(x_d)) \end{aligned} e˙=y˙−y˙d=f(x)+bu−fd(xd)=b(bf(x)+u)−fd(xd)=b(bf(x)+u−b1fd(xd))
可以用RBF神经网络来估计 f ( x ) b \frac{f(x)}{b} bf(x),即:
f ( x ) b = W ∗ T S ( x ) + ϵ ( x ) \begin{aligned} \frac{f(x)}{b}=W^{*T}S(x)+\epsilon(x) \end{aligned} bf(x)=W∗TS(x)+ϵ(x)
其中的 b b b可以在之后利用李雅普诺夫函数和自适应控制来处理和估计。
e ˙ = b ( f ( x ) b + u − 1 b f d ( x d ) ) = b ( W ∗ T S ( x ) + ϵ ( x ) + u − 1 b f d ( x d ) ) \begin{aligned}\dot e &=b(\frac{f(x)}{b}+u-\frac{1}{b}f_d(x_d))\\ &=b(W^{*T}S(x)+\epsilon(x)+u-\frac{1}{b}f_d(x_d))\\ \end{aligned} e˙=b(bf(x)+u−b1fd(xd))=b(W∗TS(x)+ϵ(x)+u−b1fd(xd))
设计李雅普诺夫函数为 V 1 = 1 2 ∣ b ∣ e 2 V_1=\frac{1}{2\lvert b \rvert}e^2 V1=2∣b∣1e2
V ˙ 1 = 1 ∣ b ∣ e e ˙ = 1 ∣ b ∣ e b ( W ∗ T S ( x ) + ϵ ( x ) + u − 1 b f d ( x d ) ) = s g n ( b ) e ( W ∗ T S ( x ) + ϵ ( x ) + u − 1 b f d ( x d ) ) ( 7 ) \begin{aligned} \dot V_1&=\frac{1}{\lvert b \rvert}e \dot e\\ &=\frac{1}{\lvert b \rvert}eb(W^{*T}S(x)+\epsilon(x)+u-\frac{1}{b}f_d(x_d))\\\\ &=sgn(b)e(W^{*T}S(x)+\epsilon(x)+u-\frac{1}{b}f_d(x_d)) \end{aligned}\qquad(7) V˙1=∣b∣1ee˙=∣b∣1eb(W∗TS(x)+ϵ(x)+u−b1fd(xd))=sgn(b)e(W∗TS(x)+ϵ(x)+u−b1fd(xd))(7)
显然需要新的估计量来估计 1 b \frac{1}{b } b1,令 θ = 1 b \theta =\frac{1}{ b } θ=b1,对它的估计值为 θ ^ \hat \theta θ^,估计误差为: θ ~ = θ ^ − θ \tilde \theta =\hat \theta-\theta θ~=θ^−θ
设计控制器
同时根据公式(7),为了使系统的李雅普诺夫函数为负半定的形式,可以提前给出控制器 u u u的形式为:
u = − k e − W ^ T S ( x ) + θ ^ f d ( x d ) ( 8 ) u=-ke -\hat W^TS(x)+\hat \theta f_d(x_d)\qquad(8) u=−ke−W^TS(x)+θ^fd(xd)(8)
其中 k = s g n ( b ) k 1 , k 1 > 0 k=sgn(b)k_1,k_1>0 k=sgn(b)k1,k1>0,这是为了消除符号函数 s g n ( b ) sgn(b) sgn(b)对李雅普诺夫函数的符号影响。
设计更新率
由于系统引入了新的误差量,考虑系统的新的候选李雅普诺夫函数为:
V = V 1 + 1 2 Γ − 1 W ~ T W ~ + 1 2 γ θ ~ 2 V=V_1+\frac{1}{2}\Gamma^{-1}\tilde W^T \tilde W+\frac{1}{2 \gamma}\tilde \theta^2 V=V1+21Γ−1W~TW~+2γ1θ~2
对上述李雅普诺夫函数求导,并将公式(8)代入到其中,得:
V ˙ = V ˙ 1 + Γ − 1 W ~ T W ^ ˙ + 1 γ θ ~ θ ^ ˙ = s g n ( b ) e ( W ∗ T S ( x ) + ϵ ( x ) − k e − W ^ T S ( x ) + θ ^ f d ( x d ) − θ f d ( x d ) ) = − s g n ( b ) ∗ s g n ( b ) k 1 e 2 − s g n ( b ) W ~ T S ( x ) e + s g n ( b ) e ϵ ( x ) + s g n ( b ) e θ ~ f d ( x d ) + Γ − 1 W ~ T W ^ ˙ + 1 γ θ ~ θ ^ ˙ = − k 1 e 2 + W ~ T ( − s g n ( b ) S ( x ) e + Γ − 1 W ^ ˙ ) + s g n ( b ) e ϵ ( x ) + θ ~ ( s g n ( b ) e f d ( x d ) + 1 γ θ ^ ˙ ) ( 9 ) \begin{aligned} \dot V &=\dot V_1+\Gamma^{-1}\tilde W^T\dot {\hat W}+\frac{1}{\gamma} \tilde \theta \dot {\hat\theta}\\ &=sgn(b)e(W^{*T}S(x)+\epsilon(x)-ke -\hat W^TS(x)+\hat \theta f_d(x_d)-\theta f_d(x_d))\\ &=-sgn(b)*sgn(b)k_1e^2-sgn(b)\tilde W^TS(x)e+sgn(b)e\epsilon (x)+sgn(b)e\tilde \theta f_d(x_d)+ \Gamma^{-1}\tilde W^T\dot {\hat W}+\frac{1}{\gamma} \tilde \theta \dot {\hat\theta}\\ &=-k_1e^2+\tilde W^T(-sgn(b)S(x)e+\Gamma^{-1}\dot {\hat W})+sgn(b)e\epsilon (x)+\tilde \theta(sgn(b)ef_d(x_d)+\frac{1}{\gamma} \dot {\hat\theta}) \end{aligned} \qquad(9) V˙=V˙1+Γ−1W~TW^˙+γ1θ~θ^˙=sgn(b)e(W∗TS(x)+ϵ(x)−ke−W^TS(x)+θ^fd(xd)−θfd(xd))=−sgn(b)∗sgn(b)k1e2−sgn(b)W~TS(x)e+sgn(b)eϵ(x)+sgn(b)eθ~fd(xd)+Γ−1W~TW^˙+γ1θ~θ^˙=−k1e2+W~T(−sgn(b)S(x)e+Γ−1W^˙)+sgn(b)eϵ(x)+θ~(sgn(b)efd(xd)+γ1θ^˙)(9)
则根据公式(9),可以设计出参数更新率
W ^ ˙ = s g n ( b ) Γ S ( x ) e ( 10 ) θ ^ ˙ = − s g n ( b ) γ f d ( x d ) e ( 11 ) \begin{aligned} \dot {\hat W}&=sgn(b) \Gamma S(x)e \qquad(10)\\ \dot {\hat \theta}&=-sgn(b)\gamma f_d(x_d)e \qquad(11) \end{aligned} W^˙θ^˙=sgn(b)ΓS(x)e(10)=−sgn(b)γfd(xd)e(11)
(这里的参数更新率(10)的鲁棒性不好,如前面所述,也可以增加 σ \sigma σ-修正项来改善,下一篇文章再写吧)
此时
V ˙ = − k 1 e 2 + s g n ( b ) e ϵ ( x ) \begin{aligned} \dot V&=-k_1e^2+sgn(b)e\epsilon (x) \end{aligned} V˙=−k1e2+sgn(b)eϵ(x)
经过放缩之后,可以证明其是李雅普诺夫意义下的稳定。公式(8)和公式(10)(11)共同构成系统的控制器和参数的更新率。
跟第一个设计方案相比,这个方案增加了一个需要估计的参数,但是却大大减小了神经网络的计算量,如果原来需要布64个点的话,现在仅仅需要布8个点了。
本文主要针对简单的非线性系统进行了自适应神经网络控制的设计,是在上一篇自适应控制的基础上进一步的拓展。