1、% 二维粒子群优化算法%function GoodPSOMVP222% P-粒子位置数组% V-粒子速度数组% W-惯性因子横向量% F-适应度值列向量% B-每代最优值列向量% G-前 t 代全局最优值位置% FB-每代最优值列向量% c1-局部加速因子% c2-全局加速因子% pnum-粒子数目% dnum-自变量维数% tnum-迭代次数(代数)% xymin-自变量下限% xymax-自变量上限% gBest-每代所有粒子全局最优值位置% pBest-前 t 代每个粒子局部最优值位置% fBest-前 t 代最优值列向量% maxfit-最大适应度值% Meanfit-每代平均适应度值
2、数组% Newfit-新平均适应度值数组%clcclear allclose allc1=2;c2=2;wmin=0;wmax=0.9;pnum=50;dnum=1;tnum=200;xmin=0;xmax=9;step=0.05;for t=1:tnumW(t)=wmax-(wmax-wmin)/tnum)*t;endTF=X+10*sin(X.*5)+7*cos(X.*4); %目标函数Meanfit=;P=;P=xmin+(xmax-xmin)*rand(pnum,dnum,1); %随机生成第一代所有粒子位置%1 表示第一代V=wmin+(wmax-wmin)*rand(pnum,dn
3、um,1); %随机生成第一代所有粒子速度数组%1 表示第一代%for i=1:pnum%求第一代所有粒子的适应度值F(i,1,1)=TargetFun(P(i,1,1);endnewfit=mean(F(:,1,1);Meanfit=Meanfit newfit;%求第一代所有粒子适应度值的最大值(函数最大值) 及最大值对应的位置maxfit,k=max(F(:,1,1);B(1,1,1)=maxfit;%将第一代适应度值的最大值存储到列向量 B 中%第一代的最大值也就是目前整个种群找到的最优解%这个极值是全局极值 GG(1,1,1)=P(k,1,1);for p=1:pnum%整个种群目前
4、找到的最优解%这个极值是全局极值 GgBest(p,1,1)=G(1,1,1);end%把前 1 代的最优值保存列向量 fBest 中fBest(1,1,1)=TargetFun(gBest(1,1,1);for i=1:pnum%第一代每个粒子本身所找到的最优解位置(即第一代粒子本身)%这个解叫做个体极值pBestpBest(i,:,1)=P(i,:,1);end%计算第一代粒子中目标函数的最优值FB(1,1,1)=TargetFun(G(1,1,1);%从第二代开始迭代for t=2:tnumV(:,1,t)=W(t-1)*V(:,1,t-1)+c1*rand*(pBest(:,1,t-1
5、)-P(:,1,t-1)+c2*rand*(gBest(:,1,t-1)-P(:,1,t-1);P(:,1,t)=P(:,1,t-1)+V(:,1,t);for i=1:pnumif P(i,1,t)xmaxP(i,1,t)=xmax;endendfor i=1:pnum%求第 t 代所有粒子的适应度值F(i,1,t)=TargetFun(P(i,1,t);endNewfit=mean(F(:,1,t);Meanfit=Meanfit Newfit;%求第 t 代所有粒子适应度值的最大值(函数最大值)及最大值对应的位置maxfit,k=max(F(:,:,t);B(1,1,t)=maxfit;
6、 %将第 t 代适应度值的最大值存储到列向量 B 中%假设第 t 代最优值的坐标 (参数)是全局最优值的坐标并保存在数组 G 中G(1,1,t)=P(k,1,t);%将第 t 代最优函数值保存到列向量 FB 中FB(1,1,t)=TargetFun(G(1,1,t);%求前 t 代的最优值及最优值的位置maxfit,k=max(FB(1,1,:);if maxfitFB(1,1,t)G(1,1,t)=P(1,1,k);endfor p=1:pnum%第 t 代所有粒子的全局最优位置调整gBest(p,1,t)=G(1,1,t);end%求前 t 代的最优值fBest(1,1,t)=Target
7、Fun(gBest(1,1,t);%对第 t 代所有粒子的局部最优位置调整for i=1;pnum%第 i 个粒子的前 t 代最优值定位maxfit,k=max(F(i,1,:);if F(i,1,t)=maxfitpBest(i,1,t)=P(i,1,t);elsepBest(i,1,t)=P(i,1,k);endendendGend=G(1,:,tnum) %粒子的最优值位置 (即最优函数值位置)fend=fBest(1,1,tnum) %最优值( 即最优函数值)%figure(1)figure(1)fplot(TF,xmin,xmax)grid onhold on%标记初始蚂蚁的位置%s
8、catter(P(:,1,1),F(:,1,1),k*)xlabel(x)ylabel(y)title(粒子的初始位置)%figure(2)fplot(TF,xmin,xmax)grid onhold onplot(P(:,1,tnum),F(:,1,tnum),r*)grid on xlabel(x)ylabel(y)title(粒子最终分布位置)%figure(3)t=1:tnum;fBestt(t)=fBest(1,1,t);plot(t,fBestt)hold onplot(Meanfit,r)hold offxlabel(迭代次数)ylabel(函数值)title(最优及平均函数值变化趋势)功能函数:function TF=TargetFun(X)TF=X+10*sin(X.*5)+7*cos(X.*4)