收藏 分销(赏)

二维粒子群优化算法.docx

上传人:pc****0 文档编号:6867038 上传时间:2024-12-22 格式:DOCX 页数:4 大小:16.55KB 下载积分:10 金币
下载 相关 举报
二维粒子群优化算法.docx_第1页
第1页 / 共4页
二维粒子群优化算法.docx_第2页
第2页 / 共4页


点击查看更多>>
资源描述
% 二维粒子群优化算法 %function GoodPSOMVP222 % P--粒子位置数组 % V--粒子速度数组 % W--惯性因子横向量 % F--适应度值列向量 % B--每代最优值列向量 % G--前t代全局最优值位置 % FB--每代最优值列向量 % c1--局部加速因子 % c2--全局加速因子 % pnum--粒子数目 % dnum--自变量维数 % tnum--迭代次数(代数) % xymin--自变量下限 % xymax--自变量上限 % gBest--每代所有粒子全局最优值位置 % pBest--前t代每个粒子局部最优值位置 % fBest--前t代最优值列向量 % maxfit--最大适应度值 % Meanfit--每代平均适应度值数组 % Newfit--新平均适应度值数组 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc clear all close all c1=2; c2=2; wmin=0; wmax=0.9; pnum=50; dnum=1; tnum=200; xmin=0; xmax=9; step=0.05; for t=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表示第一代 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:pnum %求第一代所有粒子的适应度值 F(i,1,1)=TargetFun(P(i,1,1)); end newfit=mean(F(:,1,1)); Meanfit=[Meanfit newfit]; %求第一代所有粒子适应度值的最大值(函数最大值)及最大值对应的位置 [maxfit,k]=max(F(:,1,1)); B(1,1,1)=maxfit;%将第一代适应度值的最大值存储到列向量B中 %第一代的最大值也就是目前整个种群找到的最优解%这个极值是全局极值G G(1,1,1)=P(k,1,1); for p=1:pnum %整个种群目前找到的最优解%这个极值是全局极值G gBest(p,1,1)=G(1,1,1); end %把前1代的最优值保存列向量fBest中 fBest(1,1,1)=TargetFun(gBest(1,1,1)); for i=1:pnum %第一代每个粒子本身所找到的最优解位置(即第一代粒子本身)%这个解叫做个体极值pBest pBest(i,:,1)=P(i,:,1); end %计算第一代粒子中目标函数的最优值 FB(1,1,1)=TargetFun(G(1,1,1)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %从第二代开始迭代 for t=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); for i=1:pnum if P(i,1,t)<xmin P(i,1,t)=xmin; end if P(i,1,t)>xmax P(i,1,t)=xmax; end end for i=1:pnum %求第t代所有粒子的适应度值 F(i,1,t)=TargetFun(P(i,1,t)); end Newfit=mean(F(:,1,t)); Meanfit=[Meanfit Newfit]; %求第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,:)); if maxfit>FB(1,1,t) G(1,1,t)=P(1,1,k); end for p=1:pnum %第t代所有粒子的全局最优位置调整 gBest(p,1,t)=G(1,1,t); end %求前t代的最优值 fBest(1,1,t)=TargetFun(gBest(1,1,t)); %对第t代所有粒子的局部最优位置调整 for i=1;pnum %第i个粒子的前t代最优值定位 [maxfit,k]=max(F(i,1,:)); if F(i,1,t)>=maxfit pBest(i,1,t)=P(i,1,t); else pBest(i,1,t)=P(i,1,k); end end end Gend=G(1,:,tnum) %粒子的最优值位置(即最优函数值位置) fend=fBest(1,1,tnum) %最优值(即最优函数值) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure(1) figure(1) fplot(TF,[xmin,xmax]) grid on hold on %标记初始蚂蚁的位置% scatter(P(:,1,1),F(:,1,1),'k*') xlabel('x') ylabel('y') title('粒子的初始位置') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure(2) fplot(TF,[xmin,xmax]) grid on hold on plot(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 on plot(Meanfit,'r') hold off xlabel('迭代次数') ylabel('函数值') title('最优及平均函数值变化趋势') 功能函数: function TF=TargetFun(X) TF=X+10*sin(X.*5)+7*cos(X.*4)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服