资源简介

我用matlab自己写的一个三维粒子群算法的程序,不是很精简,有简化的空间,但是功能还是很全面的,注释略多,看不惯可以自己删哈哈

资源截图

代码片段和文件信息

 SR=1000;%搜索范围Searching range
 RNS=1;%群体规模与搜索范围之比The ratio of the number of particles to the searching range
 M=RNS*SR;%群体规模Members
 W=0.5;%惯性权重Inertia weight
 C1=5;%加速常数Accelerated constant
 C2=5;%加速常数Accelerated constant
 RVR=0.02;%最大速度与搜索范围之比The ratio of the maximum velocity to the searching range
 RCS=0.01;%收敛区间与搜索范围之比The ratio of the convergent interval to  the searching range
 CI=RCS*SR;%收敛区间Convergent interval 
 PT=0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001;%暂停时间Pause time
 RNPA=0.5;%正负半轴标度之比The ratio of the negative half axis to the positive half axis
 x=SR*rand(1M);
 y=SR*rand(1M);
 z=SR*rand(1M);
 px=x;
 py=y;
 pz=z;%初始化个体历史最优解数据
 vx=RVR*SR*rand(1M);
 vxmax=RVR*SR*(zeros(1M)+1);
 vy=RVR*SR*rand(1M);
 vymax=RVR*SR*(zeros(1M)+1);
 vz=RVR*SR*rand(1M);
 vzmax=RVR*SR*(zeros(1M)+1);
 ox=SR*rand*(zeros(1M)+1);
 oy=SR*rand*(zeros(1M)+1);
 oz=SR*rand*(zeros(1M)+1);%随机生成谷地位置 以上为初始化过程
 sx=abs(x-ox);
 sy=abs(x-oy);
 sz=abs(x-oz);%评估每个微粒的适应度
 [rc]=find(sx==min(min(sx)));
 gx=x(rc)*(zeros(1M)+1);
 [rc]=find(sy==min(min(sy)));
 gy=y(rc)*(zeros(1M)+1);
 [rc]=find(sz==min(min(sz)));
 gz=z(rc)*(zeros(1M)+1);
while (max(max(sx))>CI)||(max(max(sy))>CI)||(max(max(sz))>CI)%确定结果收敛区间
      ox=0.1*SR*rand*(zeros(1M)+1);
      oy=0.1*SR*rand*(zeros(1M)+1);
      oz=0.1*SR*rand*(zeros(1M)+1);
      plot3(oxoyoz‘r*‘);
      title(‘三维粒子群算法收敛演示‘);
      text(oxoyoz‘随机目标点‘);
      xlabel(‘X‘)
      ylabel(‘Y‘)
      zlabel(‘Z‘);
      axis([-RNPA*SR SR -RNPA*SR SR -RNPA*SR SR]);
      grid on;
      hold on;
      plot3(xyz‘b*‘);
      hold off;
      pause(PT);
      if max(max(sx))>CI
         vx=W*vx+C1*rand*(px-x)+C2*rand*(gx-x);%根据算法方程给v一个改变量。因为区间长度较小,所以弱化微粒的自身惯性和自我认知能力,强化社会能力以尽快得到最优解
         while  max(max(vx))>RVR*SR||min(min(vx))<-RVR*SR
                if max(max(vx))>RVR*SR
                   [rc]=find(vx==max(max(vx

评论

共有 条评论