RBF神经网络参考模型自适应MATLAB实现(分析)

由于BP神经网络的收敛速度慢,不适合安在自适应系统里,所以选择了速度比较快的RBF神经网络,看了关于RBF神经网络自适应控制的一些原理和MATLAB代码,有一些自己的理解写在这里。

一般的神经网络的作用是去做一些分类,回归等工作,能够根据系统输入,在训练好的神经网络系统下分类或者预测出系统的输出,我主要的工作不是做分类器,这个方法主要运用在机器视觉上,我的研究生主要工作是逼近一个未知模型,这就需要用到神经网络的回归,构建系统未知的非线性模型,运用到实际操作上。

下面是一个关于RBF神经网络参考模型自适应的系统框图
在这里插入图片描述
这两天主要是学习了一些关于RBF神经网络在自适应控制系统的应用。上图的参考模型,是根据理论建立的理想模型,得到输出ym(k),系统输入yd(k),RBF神经网络的输入为被控对象输入u(k),反馈误差e(k)和系统输入yd(k),其余的参数初始化以及高斯核函数的建立我这里就不多做解释了,在页尾附的MATLAB代码中有注释。

主要想法是,RBF神经网络会将自身的网络输出u(k)当作网络的输入来训练网络,在一些有监督的模型下RBF可以单单输入信号yd(k)做成1-n-1的网络模型,不一定要加入网络的输出做输入信号。

还有一个点,查资料会有发现,RBF神经网络是一种类似SVM设置中心点取欧式距离的方法来做优化处理,而这样做的好处是在到输出层的时候,网络输出变成了线性输出,计算难度大大降低,速度可以提高,缺点就是优化能力下降,这和初始设置的中心有关,在网络优化上RBF只具有局部优化能力,用最简单的梯度下降的方法也只能找到局部最优解,不是全局最优解,所以这种网络设置初始中心还是蛮重要的。

下面,附MATLAB代码,带注释



%Model Reference Aapative RBF Control

clear all;

close all;

%%%%%%%%%%%%%初始化%%%%%%%%%%%  

u_1=0;

y_1=0;

ym_1=0;

 

x=[0,0,0]';

c=[-3 -2 -1 0 1 2 3;

   -3
-2 -1 0 1 2 3;

   -3
-2 -1 0 1 2 3];

b=2;

w=rands(1,7);

 

xite=0.55;

alfa=0.05;

h=[0,0,0,0,0,0,0]';

 

c_1=c;c_2=c;

b_1=b;b_2=b;

w_1=w;w_2=w;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ts=0.001;

for k=1:1:3000

time(k)=k*ts;

 

yd(k)=0.50*sin(2*pi*k*ts);%系统输入
ym(k)=0.6*ym_1+yd(k);%参考模型输出
 

y(k)=(-0.1*y_1+u_1)/(1+y_1^2);  %被控对象输出

 

for j=1:1:7

   
h(j)=exp(-norm(x-c(:,j))^2/(2*b^2));%节点高斯核函数

end

u(k)=w*h;%RBF神经网络输出
      

ec(k)=ym(k)-y(k);%系统模型误差

dyu(k)=sign((y(k)-y_1)/(u(k)-u_1));

 

d_w=0*w;

for j=1:1:7

   
d_w(j)=xite*ec(k)*h(j)*dyu(k);%梯度下降法更新权值

end

w=w_1+d_w+alfa*(w_1-w_2);

%Return of parameters   

u_1=u(k);

y_1=y(k);

ym_1=ym(k);

    

x(1)=yd(k);

x(2)=ec(k);

x(3)=y(k);  


   

w_2=w_1;w_1=w;

end

figure(1);

plot(time,ym,'r',time,y,'k:','linewidth',2);

xlabel('time(s)');ylabel('ym,y');

legend('Ideal
position signal','Tracking position signal');

figure(2);

plot(time,u,'r','linewidth',2);

xlabel('time(s)');ylabel('Control
input');


猜你喜欢

转载自blog.csdn.net/qq_24182661/article/details/84861669