www.pudn.com > RON.rar > RON.m


clear; 
clc; 
L=60;%滑动窗口长度 
k=1;%重叠系数 
epzroumin=0.02;%误差准则 
daietamin=0.3;%距离准则 
yeta=0.5;%学习系数 
apha=0.5;%动量系数 
MaxEpoch=100;%最大学习次数 
amin=0.01;%激活阀值 
Cmax=400;%最大未被激活数 
rmin=0.05;%扩展常数最小值 
rmax=0.25;%扩展常数最大值 
daitaepzroumin=0.0001;%两次梯度修正误差 
daitacmin=0.01;%合并阀值 
daitarmin=0.01;%合并阀值 
 
dimension=2;%样本输入的维数 
 
kkk=0;%样本 
for k=0:0.1:1 
    for kk=0:0.1:1 
        kkk=kkk+1; 
        A{kkk}=[k kk];         
    end 
end%样本 
 
i=1; 
p=0;pp=0;ppp=0; 
 
while(i<=kkk) 
     
   xn=[A{i}(1) A{i}(2)];%维数改变时需修改 
   yn=targetfunction(xn);%样本输入 
    
   if(i==1)%输入第一样本时,无隐节点 
       window{1}=[xn yn]; 
       b=yn; 
       dn=daietamin; 
       h=0;%隐节点数为0 
        
   else 
        
       if(i<=L)%更新活动窗口 
           window{i}=[xn yn]; 
           LL=i;%确定滑动窗口中元素个数 
       else 
           for j=1:L-1 
               window{j}=window{j+1}; 
           end 
           window{L}=[xn yn]; 
           LL=L;%确定滑动窗口中元素个数 
       end%更新活动窗口 
        
       for i2=1:h%累计各隐节点未被激活次数            
           for aa=1:dimension 
               ci2(aa)=c{i2}(aa); 
           end 
           sum=0; 
           for i3=1:LL 
               for a1=1:dimension%提取滑动窗口中第i3个样本输入  
                   x1(a1)=window{i3}(a1); 
               end%提取滑动窗口中第i3个样本输入 
               sum=sum+exp(-(x1-ci2)*(x1-ci2)'/r(i2)^2); 
           end 
           sum=sum/LL; 
           if(sum>amin) 
               unactivation(i2)=0; 
           else 
               unactivation(i2)=unactivation(i2)+1; 
           end 
       end%累计各隐节点未被激活次数 
       i4=1;%删除长期未被激活的隐节点 
       while(i4<=h) 
           if(unactivation(i4)>Cmax) 
               for i5=i4:h-1 
                   c{i5}=c{i5+1}; 
                   r(i5)=r(i5+1); 
                   w(i5)=w(i5+1); 
                   unactivation(i5)=unactivation(i5+1); 
               end 
               w(h)=0; 
               r(h)=0; 
               c{h}=[0 0]; 
               unactivation(h)=0; 
               h=h-1; 
               i4=i4-1; 
               pp=pp+1; 
               shanchu{pp}=[i,h]; 
           end 
           i4=i4+1; 
       end%删除长期未被激活的隐节点 
        
       fxn=b;%计算隐节点输出 
       for ii=1:h 
           for aa=1:dimension 
               cii(aa)=c{ii}(aa); 
           end 
           faixn=exp(-(xn-cii)*(xn-cii)'/r(ii)^2); 
           fxn=fxn+w(ii)*faixn; 
           d(ii)=sqrt((xn-cii)*(xn-cii)'); 
           dn=min(d);           
       end 
       en=abs(yn-fxn);%计算隐节点输出        
        
       if(dn>=daietamin&&en>epzroumin)%增加一个新隐节点            
           c{h+1}=xn; 
           w(h+1)=en; 
           r(h+1)=k*dn; 
           unactivation(h+1)=0; 
           h=h+1;%增加一个新隐节点 
           p=p+1; 
           zengjia{p}=[i,h];            
            
       else%调节网络参数 
           for n=2:MaxEpoch%学习MaxEpoch次 
                
               for iii=1:h%更新隐节点数据中心和扩展常数 
                   daitac{1,iii}=[0 0];%维数变化时需调整 
                   daitar(1,iii)=0; 
                   fxgradsci=[0 0];%维数变化时需调整 
                   fxgradsri=0; 
                   for aa=1:dimension 
                       ciii(aa)=c{iii}(aa); 
                   end 
                   for jj=1:LL 
                       for aa=1:dimension%提取滑动窗口中第jj个样本输入 
                           x(aa)=window{jj}(aa); 
                       end%提取滑动窗口中第jj个样本输入 
                       baitai=2*jj/(LL*(LL+1)); 
                       ei=window{jj}(dimension+1)-b; 
                       for i1=1:h 
                           for aa=1:dimension 
                               ci1(aa)=c{i1}(aa); 
                           end 
                           ei=ei-w(i1)*exp(-(x-ci1)*(x-ci1)'/r(i1)^2); 
                       end 
                       fxgradsci=fxgradsci+baitai*ei*exp(-(x-ciii)*(x-ciii)'/r(iii)^2)*(x-ciii); 
                       fxgradsri=fxgradsri+baitai*ei*exp(-(x-ciii)*(x-ciii)'/r(iii)^2)*(x-ciii)*(x-ciii)'; 
                   end 
                   daitac{n,iii}=yeta*2*w(iii)/r(iii)^2*fxgradsci;%待修改 
                   daitar(n,iii)=yeta*2*w(iii)/r(iii)^3*fxgradsri;%待修改 
                   c{iii}=c{iii}+daitac{n,iii}+apha*daitac{n-1,iii}; 
                   r(iii)=r(iii)+daitar(n,iii)+apha*daitar(n-1,iii);                    
                   if(r(iii)>rmax)%对r进行限幅处理 
                       r(iii)=rmax; 
                   else 
                       if(r(iii)amin) 
                       m=m+1; 
                       M(m)=ii1;     
                   end 
               end%记录被激活的隐节点 
                
               for ii2=1:m%M个隐节点输出阵 
                   for aa=1:dimension 
                       cii2(aa)=c{M(ii2)}(aa); 
                   end 
                   for ii3=1:LL 
                       for a1=1:dimension%提取滑动窗口中第i3个样本输入 
                           x1(a1)=window{ii3}(a1); 
                       end%提取滑动窗口中第i3个样本输入 
                       AM(ii2,ii3)=exp(-(x1-cii2)*(x1-cii2)'/r(M(ii2))^2);   
                       y(ii3)=window{ii3}(dimension+1); 
                   end 
               end%M个隐节点输出 
               if(m>0) 
                   IL=ones(1,LL); 
                   AM1=[AM;IL]; 
                   AM11=inv(AM1*AM1')*AM1; 
                   W=AM11*y'; 
                   for iii2=i:m 
                       w(M(iii2))=W(iii2);%更新激活节点权值 
                   end 
                   b=W(m+1);%更新输出偏移量 
               end 
 
               for i11=1:h-1%合并隐节点 
                   i12=i11+1; 
                   while(i12<=h)                       
                       if(sqrt((c{i11}-c{i12})*(c{i11}-c{i12})')