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

📄 pso2.m

📁 标准pso
💻 M
字号:
function pso2

 POPSIZE= 100;
 DIMENSION=2;
 chushicishu=50;%调整w次数
 turn=50;%不通初始值次数
%全局变量定义
 W=1.0;
 C1=1.8;
 C2=1.8;
 VMAX=2;
 VMIN=-2;%可以取大些
 XMIN=2.0105;
 XMAX=4.0001;
 
 total=0;
 sum=0;

 for rr=1:turn
     

%initiate();
 %****************%初始化

for(i=1:POPSIZE)
  for(j=1:DIMENSION)
    weizhi(i,j)=rand()*(XMAX-XMIN)+XMIN;
    speed(i,j)=rand()*(VMAX-VMIN)+VMIN;%VMAX*rand();
    best(i,j)=weizhi(i,j);
  end
end

for(i=1:POPSIZE)  %计算适应度
s=0;
h=0;
s=weizhi(i,1)+weizhi(i,2);
h=weizhi(i,1)-weizhi(i,2);
fitness(i)=s*h;
bestfitness(i)=fitness(i);
end

s=fitness(1);     %初始种群历史最优位置修改程序
flag=1;
   for(m=1:POPSIZE)
      if fitness(m)<s
          s=fitness(m);
          flag=m;
      end
   end
    for(n=1:DIMENSION)
        P(n)=weizhi(flag,n);%为初始时最好适应度时x1,x2位置值
    end
    PBEST=fitness(flag);   %找出初始时最好适应度


%**************************************************************************
for g=0:chushicishu
    W=1.0-g*0.6/chushicishu;
  %  if PBEST-3.0<0.000001
  %      total=total+1;
   %     sum=sum+1;
  %      break;
   % else
       for(i=1:POPSIZE)
          for(j=1:DIMENSION)   
            speed(i,j)=W*speed(i,j)+C1*rand()*(best(i,j)...
                        -weizhi(i,j))+C2*rand()*(P(j)-weizhi(i,j));
             if speed(i,j)>VMAX
                speed(i,j)=VMAX;
              % speed(i,j)=2*VMAX-speed(i,j);
             end
              if speed(i,j)<VMIN
                 speed(i,j)=VMIN;
              %speed(i,j)=2*VMIN-speed(i,j);
             end
             weizhi(i,j)=weizhi(i,j)+speed(i,j);
              if weizhi(i,j)<XMIN
                weizhi(i,j)=XMIN;%2*XMIN-weizhi(i,j);
              end
              if weizhi(i,j)>XMAX
                weizhi(i,j)=XMAX;%2*XMAX-weizhi(i,j);
              end
           end


%calculation(k);
%*******************************%%
%for(i=1:POPSIZE)
s=0;
h=0;
s=weizhi(i,1)+weizhi(i,2);
h=weizhi(i,1)-weizhi(i,2);
fitness(i)=s*h;
%**********************
%             localbest(i);
if bestfitness(i)>fitness(i)
    for n=1:DIMENSION
    best(i,n)=weizhi(i,n);
    end
end
bestfitness(i)=fitness(i);
%**************************8
end
%          globalbest(2);
%for i=1:POPSIZE
    if bestfitness(i)<PBEST
        for j=1:DIMENSION
            P(j)=best(i,j);
        end
        PBEST=bestfitness(i);
    end
%end
%******************************

end
%***************
%g,

chishu(rr,1)=PBEST ;
%P
chishu(rr,2)=P(1);
chishu(rr,3)=P(2);
 end
% total,sum
format long , chishu
mm=1;
 zuixiaozhi=chishu(rr,1);
 for rr=2:turn
     if zuixiaozhi>chishu(rr,1)
         zuixiaozhi=chishu(rr,1);
         mm=rr;
     end
 end
 zuixiaozhi
 mm
 chishu(mm,2),chishu(mm,3)

 

 

⌨️ 快捷键说明

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