预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

%二维粒子群优化算法 %functionGoodPSOMVP222 %P--粒子位置数组 %V--粒子速度数组 %W--惯性因子横向量 %F--适应度值列向量 %B--每代最优值列向量 %G--前t代全局最优值位置 %FB--每代最优值列向量 %c1--局部加速因子 %c2--全局加速因子 %pnum--粒子数目 %dnum--自变量维数 %tnum--迭代次数(代数) %xymin--自变量下限 %xymax--自变量上限 %gBest--每代所有粒子全局最优值位置 %pBest--前t代每个粒子局部最优值位置 %fBest--前t代最优值列向量 %maxfit--最大适应度值 %Meanfit--每代平均适应度值数组 %Newfit--新平均适应度值数组 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc clearall closeall c1=2; c2=2; wmin=0; wmax=0.9; pnum=50; dnum=1; tnum=200; xmin=0; xmax=9; step=0.05; fort=1:tnum W(t)=wmax-((wmax-wmin)/tnum)*t; end TF='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,dnum,1);%随机生成第一代所有粒子速度数组%1表示第一代 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fori=1:pnum %求第一代所有粒子的适应度值 F(i,1,1)=TargetFun(P(i,1,1)); end newfit=mean(F(:,1,1)); Meanfit=[Meanfitnewfit]; %求第一代所有粒子适应度值的最大值(函数最大值)及最大值对应的位置 [maxfit,k]=max(F(:,1,1)); B(1,1,1)=maxfit;%将第一代适应度值的最大值存储到列向量B中 %第一代的最大值也就是目前整个种群找到的最优解%这个极值是全局极值G G(1,1,1)=P(k,1,1); forp=1:pnum %整个种群目前找到的最优解%这个极值是全局极值G gBest(p,1,1)=G(1,1,1); end %把前1代的最优值保存列向量fBest中 fBest(1,1,1)=TargetFun(gBest(1,1,1)); fori=1:pnum %第一代每个粒子本身所找到的最优解位置(即第一代粒子本身)%这个解叫做个体极值pBest pBest(i,:,1)=P(i,:,1); end %计算第一代粒子中目标函数的最优值 FB(1,1,1)=TargetFun(G(1,1,1)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %从第二代开始迭代 fort=2:tnum V(:,1,t)=W(t-1)*V(:,1,t-1)+c1*rand*(pBest(:,1,t-1)-P(:,1,t-1))+c2*rand*(gBest(:,1,t-1)-P(:,1,t-1)); P(:,1,t)=P(:,1,t-1)+V(:,1,t); fori=1:pnum ifP(i,1,t)<xmin P(i,1,t)=xmin; end ifP(i,1,t)>xmax P(i,1,t)=xmax; end end fori=1:pnum %求第t代所有粒子的适应度值 F(i,1,t)=TargetFun(P(i,1,t)); end Newfit=mean(F(:,1,t)); Meanfit=[MeanfitNewfit]; %求第t代所有粒子适应度值的最大值(函数最大值)及最大值对应的位置 [maxfit,k]=max(F(:,:,t)); B(1,1,t)=maxfit;%将第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,:))