⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ron.m

📁 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)<rmin)
                           r(iii)=rmin;
                       end
                   end%对r进行限幅处理
               end%更新隐节点数据中心和扩展常数

               m=0;%记录被激活的隐节点
               for ii1=1:h                    
                   for aa=1:dimension
                       cii1(aa)=c{ii1}(aa);
                   end
                   sum=0;
                   for i3=1:LL
                       for a1=1:dimension%提取滑动窗口中第i3个样本输入
                           x1(a1)=window{i3}(a1);
                       end%提取滑动窗口中第i3个样本输入
                       sum=sum+exp(-(x1-cii1)*(x1-cii1)'/r(ii1)^2);
                   end
                   sum=sum/LL;
                   if(sum>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})')<daitacmin&&abs(r(i11)-r(i12))<daitarmin)
                           w(i11)=w(i11)+w(i12);
                           c{i11}=(c{i11}+c{i12})/2;
                           r(i11)=(r(i11)+r(i12))/2;
                           for i13=i12:h-1
                               w(i13)=w(i13+1);
                               r(i13)=r(i13+1);
                               c{i13}=c{i13+1};
                               unactivation(i13)=unactivation(i13+1);
                           end
                           w(h)=0;
                           r(h)=0;
                           c{h}=[0 0];
                           unactivation(h)=0;
                           h=h-1;
                           i12=i12-1;
                           ppp=ppp+1;
                           hebing{ppp}=[i,h];
                       end
                       i12=i12+1;
                   end
               end%合并隐节点
               
               E(1)=0;%计算窗口内样本误差
               E(n)=0;
               for iii3=1:LL
                   en=window{iii3}(dimension+1)-b;
                   for a1=1:dimension%提取滑动窗口中第iii3个样本输入
                       x1(a1)=window{iii3}(a1);
                   end%提取滑动窗口中第iii3个样本输入
                   for iii4=1:h
                       for aa=1:dimension
                           ciii4(aa)=c{iii4}(aa);
                       end
                       en=en-w(iii4)*exp(-(x1-ciii4)*(x1-ciii4)'/r(iii4)^2); 
                   end
                   baitai=2*iii3/(LL*(LL+1));
                   E(n)=E(n)+baitai*en^2;
               end%计算窗口内样本误差
               
               if(sqrt(E(n))<epzroumin||abs(sqrt(E(n))-sqrt(E(n-1)))<daitaepzroumin)%误差指标
                   break;
               end%误差指标
               
           end%学习MaxEpoch次          
       end%网络参数调节结束
   end
   hh(i)=h;
   i=i+1;
end

for ii=1:kkk    
    for a=1:dimension
        x(a)=A{ii}(a);
    end
    fx=b;
    for i=1:h
        for aa=1:dimension
            ci(aa)=c{i}(aa);
        end
        fx=w(i)*exp(-(x-ci)*(x-ci)'/r(i)^2);
    end
    eee(ii)=fx;
    ee(ii)=targetfunction(x);
    e(ii)=(targetfunction(x)-fx)/targetfunction(x);
end

i=[1:1:121];
subplot(221);
plot(i,e(i),'g*');

subplot(222);
plot(i,ee(i),'r*');
   
subplot(223);
plot(i,eee(i),'b*');

subplot(224);
plot(i,hh(i),'r*');
   
   
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -