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

📄 epso.m

📁 一种全局收敛且收敛速度大大改善的的粒子群算法
💻 M
字号:

popsize=20;
MAXITER=1000;
dimension=100;
irange_l=50;
irange_r=100;
xmax=100;
vmax=xmax;

sum1=0;
sum2=0;
mean=0;
st=0;
runno=5;
c1=2;
c2=2;
z1=zeros(1,runno);%变异中用到的参数。

data1=zeros(runno,MAXITER);

for run=1:runno
T=cputime;
x=(irange_r- irange_l)*rand(popsize,dimension)+ irange_l;
vstep=2*vmax*rand(popsize,dimension)-vmax;

pbest=x;
gbest=zeros(1,dimension);

td=vmax*ones(1,dimension);
z=zeros(1,dimension);
for i=1:popsize
    f_x(i)=f1(x(i,:));
    f_pbest(i)=f_x(i);
end
  
    g=min(find(f_pbest==min(f_pbest(1:popsize))));
    gbest=pbest(g,:);
   
    f_gbest=f_pbest(g);

    MINIUM=f_pbest(g);
for t=1:MAXITER
    
     w_now=0.4;
     
 for i=1:popsize  
       r1=rand(1,dimension);
       r2=rand(1,dimension);
       y=w_now.*vstep(i,:)+c1.*r1.*(pbest(i,:)-x(i,:))+c2.*r2.*(gbest-x(i,:));
       vstep(i,:)=y;
       vstep(i,:)=sign(y).*min(abs(y),vmax);    
       
      for j=1:dimension
         if(abs(vstep(i,j))<td(j))
             %a1=(-0.1)*(vmax);%此处加gaussian变异。此处 可考虑在外部使用今音策略变异。
            %b1=a1.*ones(1,1);
            %vstep(i,j)=vmax+(1/sqrt(2*pi))*exp((vmax.*vmax)./b1);
              vstep(i,j)=rand*vmax;
              z(j)=z(j)+1;
              pbest(i,j)=x(i,j)+w_now.*vstep(i,j)+c1.*rand(1,1)*(pbest(i,j)-x(i,j))+c2.*rand(1,1)*(gbest(1,j)-x(i,j));
              f_pbest(i)=f_x(i);
              if z(j)>2
                  z(j)=0;
                  td(j)=td(j)/10;
              end
          end
        end
          
       x(i,:)=x(i,:)+vstep(i,:);
       x(i,:)=sign(x(i,:)).*min(abs(x(i,:)),xmax);
          
            f_x(i)=f1(x(i,:));

           if f_x(i)<f_pbest(i)
                pbest(i,:)=x(i,:);
                f_pbest(i)=f_x(i);
           end          
            if f_pbest(i)<f_gbest
                gbest=pbest(i,:);
                f_gbest=f_pbest(i);
            end

           MINIUM=f_gbest;   
 end%end popsize
 %此处添加合作策略
   [f_2,b]=sort(f_x);
   for i=1:3
      for j=1:dimension
                z=gbest;
                z(j)=x(b(i),j);
          if f1(z(1,:))<f_gbest
             gbest(j)=x(b(i),j);
             f_gbest=f1(z(1,:));
           end
       end        
   end
     f_gbest=f1(gbest(1,:));
    
 data1(run,t)=MINIUM;
 
%此处为固定收敛精度目标值,评价达到目标需要的迭代次数。
%if MINIUM>10
    %z1(runno)=z1(runno)+1;
%else
    %break;
%end
end  %end interation
sum1=sum1+mean;  
sum2=sum2+MINIUM;
 %MINIUM
time=cputime-T;
st=st+time;

end  %end runno
av1=sum1/5;  %输出平均收验代数
av2=sum2/5;  %输出平均最优解
st/5  %输出算法的平均时间
    
 

⌨️ 快捷键说明

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