• 大小: 7KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: Matlab
  • 标签: PSO  

资源简介

完整的PSO代码,其中包括标准函数的测试。

资源截图

代码片段和文件信息

function PSOstandard_benchmarks_Test
clear all;
close all;
c1=1.49445;c2=1.49445;%
global dimension  Size
dimension=40;Size=40;%种群维数 dimension、规模 Size
Tmax=1000;%%最大迭代次数 Tmax
%%选择不同测试函数的速度和位置限制范围%%
F_n=1;
switch F_n
  case 1   %%  f1_Sphere                    %%
           Vmax(1:dimension)= 30;  Vmin(1:dimension)=-30;
           Xmax(1:dimension)= 30;  Xmin(1:dimension)=-30;
  case 2   %%  f2_Quadric    [-100100]     %% 
           Vmax(1:dimension)= 100;  Vmin(1:dimension)=-100;
           Xmax(1:dimension)= 100;  Xmin(1:dimension)=-100;
  case 3   %%  f3_Ackley     [-3030]       %%
           Vmax(1:dimension)= 30;  Vmin(1:dimension)=-30;
           Xmax(1:dimension)= 30;  Xmin(1:dimension)=-30;
  case 4   %%  f4_griewank   [-600600]     %%
           Vmax(1:dimension)= 600;  Vmin(1:dimension)=-600;
           Xmax(1:dimension)= 600;  Xmin(1:dimension)=-600;
  case 5   %%  f5_Rastrigin  [-5.125.12]   %%
           Vmax(1:dimension)= 5.12;  Vmin(1:dimension)=-5.12;
           Xmax(1:dimension)= 5.12;  Xmin(1:dimension)=-5.12;
  case 6   %%  f6_Rosenbrock [-2.4082.408] %%
           Vmax(1:dimension)= 2.408;  Vmin(1:dimension)=-2.408;
           Xmax(1:dimension)= 2.408;  Xmin(1:dimension)=-2.408;
  case 7   %%  f7_Schaffer‘s f6 %%
           Vmax(1:dimension)= 2.408;  Vmin(1:dimension)=-2.408;
           Xmax(1:dimension)= 2.408;  Xmin(1:dimension)=-2.408;  
 end
%%三维显示粒子群运动变化%%
global Swarmscope; 
       Swarmscope = plot(00 ‘.‘);
       axis([Xmin(1) Xmax(1) Xmin(2) Xmax(2) Xmin(3) Xmax(3)]);   %初始轴的范围的设置
    %  axis square;
       grid on;
       set(Swarmscope‘EraseMode‘‘xor‘‘MarkerSize‘12); %设置用来显示粒子.
%%initial Position Velocity%%
Position=zeros(dimensionSize);%以后位置Position统一为此种记法:行 dimension;列 Size;
Velocity=zeros(dimensionSize);%每个粒子的位置、速度对应于一列。
[PositionVelocity]=initial_Position_Velocity(dimensionSizeXmaxXminVmaxVmin);
%%个体最优 P_p 和全局最优 globe 初始赋值%%
P_p=Position;globe=zeros(dimension1);
%%评价每个粒子适应值,寻找出 globle%%
for j=1:Size
    Pos=Position(:j);
    fz(j)=Fitness_Function(PosF_n);
end
[P_gI]=min(fz);%P_g  1*1 ?
globe=Position(:I);
%%打散参数设置%%
 N_dismiss=51;%太小,不利于初始寻优
 N_dismissed=0;%记录被打散的次数
 deltaP_gg=0.001%种群过分收敛衡量标准值(适应度变化率)
%  reset = 1;  %设置reset = 1时指示粒子群过分收敛时将被打散,如果reset=0则不打散
 reset_dismiss = 0;
%%迭代开始%%
for itrtn=1:Tmax
   time(itrtn)=itrtn;
%%过于集中时打散%%
   if reset_dismiss==1
       bit=1;
       if itrtn>N_dismiss
          bit=bit&((P_gg(itrtn-1)-P_gg(itrtn-N_dismiss))/P_gg(itrtn-1)< deltaP_gg);
          if bit==1
             [PositionVelocity]=initial_Position_Velocity(dimensionSizeXmaxXminVmaxVmin);%重新初始化位置和速度
             N_dismissed=N_dismissed+1;
             N_dismissed
             warning(‘粒子过分集中!重新初始化……‘);      %   给出信息
             itrtn
          end
       end 
    end
    
     Weight=0.4+0.5*(Tmax-itrtn)/Tmax;
%        Weight=1;
     r1=rand(1);r2=rand(1);
    for i=1:Size
        Velocity(:i)=Weight*

评论

共有 条评论