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

📄 cpsoh1.asv

📁 用matlab语言编的多维粒子群代吗
💻 ASV
字号:
function [PBEST,x] = cpsoh1(N)
global Swarm;
global B;
psoOptions = get_Options;
Obj = get_Obj(N);
f2eval = 'LJcluster';
Q=struct('x',B,'y',B,'P',B);

    [Swarm, PBEST] =initiate(psoOptions,Obj);%初始化的作用是产生一个最优的背景向量b(j,z)
 for iter = 1 : psoOptions.Vars.Iterations
           %psoOptions.SParams.Chi=0.8-iter*(0.8-0.0072)/psoOptions.Vars.Iterations
             psoOptions.SParams.Chi=0.8-iter*(0.89-0.004)/psoOptions.Vars.Iterations;
           
           for j = 1 : psoOptions.population
          for i = 1 : psoOptions.Vars.PopSize%粒子群有 10个
             
              fval1 = feval(f2eval, b(j,Swarm(j).individual(i).number,B));%feval 执行由串指定的函数 
              fval2 = feval(f2eval, b(j,Swarm(j).individual(i).best,B));
              fval3 = feval(f2eval, b(j,Swarm(j).P,B));
              if(fval1 < fval2)                    
                Swarm(j).individual(i).best = Swarm(j).individual(i).number;       
                 end          
              if(fval2 < fval3)  
                Swarm(j).P = Swarm(j).individual(i).best; x=Swarm(j).P
              B(:,:,j)=Swarm(j).P;
              end 
             
              for d=1:Obj.Dim
                Swarm(j).individual(i).dim(d).speed = psoOptions.SParams.Chi*Swarm(j).individual(i).dim(d).speed + ... 
                psoOptions.SParams.c1 * rand * ( Swarm(j).individual(i).dim(d).best - Swarm(j).individual(i).dim(d).number ) + ...
                psoOptions.SParams.c2 * rand * ( Swarm(j).P(d) - Swarm(j).individual(i).dim(d).number ) ;                
                
                Swarm(j).individual(i).dim(d).speed = min(psoOptions.SParams.Vmax, Swarm(j).individual(i).dim(d).speed);
                Swarm(j).individual(i).dim(d).speed = max( - psoOptions.SParams.Vmax, Swarm(j).individual(i).dim(d).speed);
                
                Swarm(j).individual(i).dim(d).number = Swarm(j).individual(i).dim(d).number + Swarm(j).individual(i).dim(d).speed;
                Swarm(j).individual(i).dim(d).number = min(Obj.ub(d), Swarm(j).individual(i).dim(d).number);
                Swarm(j).individual(i).dim(d).number = max(Obj.lb(d), Swarm(j).individual(i).dim(d).number);         
               
             end            
              Swarm(j).individual(i).number=[Swarm(j).individual(i).dim.number];
              Swarm(j).individual(i).best=[Swarm(j).individual(i).dim.best];
            %  PBEST(j,d) = feval(f2eval,[Swarm(j).Dim(d).P(d)]);%M个N维的向量组成的值
            %   x(j,d)=[Swarm(j).Dim(d).P(d)];
           
          end
   
    
   %B=[Swarm.P];
   
    end
 
k=round(rand* psoOptions.Vars.PopSize/2)+1
%Q(k).x=b(1,Swarm(1).P,B);

for i=1:psoOptions.Vars.PopSize          
   if i==k
    Q(i).x=b(1,Swarm(1).P,B);
   else 
       Q(i).x=rand*B;
   end
   Q(i).y=B;
   Q(i).P=B;
  % Q(i).V=rand*ones(1,Obj.Dim,psoOptions.population)*psoOptions.SParams.Vmax;
    fval1 = feval(f2eval, Q(i).x);%feval 执行由串指定的函数 
    fval2 = feval(f2eval, Q(i).y);
    fval3 = feval(f2eval, Q(1).P);
   if(fval1 < fval2)                    
         Q(i).y=Q(i).x
   end
   if(fval2 < fval3)  
          Q(1).P = Q(i).y;
          B=Q(1).P;
   end
         Q(i).V=psoOptions.SParams.Chi*(Q(i).x)+psoOptions.SParams.c1 * rand* ( Q(i).y -Q(i).x)+...
         psoOptions.SParams.c2 * rand*(Q(1).P -Q(i).x)
         Q(i).V =  min(ones(1,Obj.Dim,psoOptions.population)*psoOptions.SParams.Vmax, Q(i).V);
         Q(i).V = max(-ones(1,Obj.Dim,psoOptions.population)*psoOptions.SParams.Vmax, Q(i).V);
         Q(i).x=Q(i).x+Q(i).V;
         Q(i).x =  min(5*ones(1,Obj.Dim,psoOptions.population), Q(i).x);
         Q(i).x = max(-5*ones(1,Obj.Dim,psoOptions.population), Q(i).x);
       end   
 end
   x=Q(1).P;
   PBEST=feval('LJcluster', Q(1).P)
 
 
    %end 
   % fprintf(fid,'\n%d\t%g\n',iter,PBEST); 
        
    %     fVal(runs,:) = PBEST;
%     History(runs,:) = iter;
%end
%fprintf(1,'Total number is %d\nSum is %d\nAverage is %.1f\n',total,sum,sum/total);
%fclose(fid);

clc

⌨️ 快捷键说明

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