第一范文网 - 专业文章范例文档资料分享平台

PSO算法简介

来源:用户分享 时间:2025/7/14 6:54:32 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

%限制位置的范围

TempPos=ParSwarm(row,1:ParCol)+a*TempV; for h=1:ParCol

if TempPos(:,h)>ParticleScope(h,2) TempPos(:,h)=ParticleScope(h,2); end

if TempPos(:,h)<=ParticleScope(h,1)

TempPos(:,h)=ParticleScope(h,1)+1e-10; end end

%更新位置

ParSwarm(row,1:ParCol)=TempPos;

%计算每个粒子的新的适应度值

ParSwarm(row,2*ParCol+1)=AdaptFunc(ParSwarm(row,1:ParCol)); if ParSwarm(row,2*ParCol+1)>AdaptFunc(OptSwarm(row,1:ParCol)) OptSwarm(row,1:ParCol)=ParSwarm(row,1:ParCol); end end

%for循环结束

%寻找适应度函数值最大的解在矩阵中的位置(行数),进行全局最优的改变 [maxValue,row]=max(ParSwarm(:,2*ParCol+1));

if AdaptFunc(ParSwarm(row,1:ParCol))>AdaptFunc(OptSwarm(ParRow+1,:)) OptSwarm(ParRow+1,:)=ParSwarm(row,1:ParCol); end

这两个函数给出以后,需要一个函数来把这两个函数组装起来,以此实现一个完整的粒子群算法,这个函数就是PsoProcess 代码如下:

function [Result,OnLine,OffLine,MinMaxMeanAdapt]=PsoProcess(SwarmSize,ParticleSize,ParticleScope,InitFunc,StepFindFunc,AdaptFunc,IsStep,IsDraw,LoopCount,IsPlot) %功能描述:一个循环n次的PSO算法完整过程,返回这次运行的最小与最大的平均适应度,以及在线性能与离线性能

%[Result,OnLine,OffLine,MinMaxMeanAdapt]=PsoProcess(SwarmSize,ParticleSize,ParticleScope,InitFunc,StepFindFunc,AdaptFunc,IsStep,IsDraw,LoopCount,IsPlot) %输入参数:SwarmSize:种群大小的个数 %输入参数:ParticleSize:一个粒子的维数

%输入参数:ParticleScope:一个粒子在运算中各维的范围; % ParticleScope格式:

% 3维粒子的ParticleScope格式: % [x1Min,x1Max % x2Min,x2Max % x3Min,x3Max] %

%输入参数:InitFunc:初始化粒子群函数

%输入参数:StepFindFunc:单步更新速度,位置函数 %输入参数:AdaptFunc:适应度函数

%输入参数:IsStep:是否每次迭代暂停;IsStep=0,不暂停,否则暂停。缺省不暂停 %输入参数:IsDraw:是否图形化迭代过程;IsDraw=0,不图形化迭代过程,否则,图形化表示。缺省不图形化表示

%输入参数:LoopCount:迭代的次数;缺省迭代100次

%输入参数:IsPlot:控制是否绘制在线性能与离线性能的图形表示;IsPlot=0,不显示; % IsPlot=1;显示图形结果。缺省IsPlot=1 %

%返回值:Result为经过迭代后得到的最优解 %返回值:OnLine为在线性能的数据 %返回值:OffLine为离线性能的数据

%返回值:MinMaxMeanAdapt为本次完整迭代得到的最小与最大的平均适应度 %

%用法[Result,OnLine,OffLine,MinMaxMeanAdapt]=PsoProcess(SwarmSize,ParticleSize,ParticleScope,InitFunc,StepFindFunc,AdaptFunc,IsStep,IsDraw,LoopCount,IsPlot); %

%异常:首先保证该文件在Matlab的搜索路径中,然后查看相关的提示信息。 %

%编制人:XXX %编制时间:2007.3.26 %参考文献:XXXXX%

%修改记录:

%添加MinMaxMeanAdapt,以得到性能评估数据 %修改人:XXX %修改时间:2007.3.27 %参考文献:XXX.

%容错控制 if nargin<4

error('输入的参数个数错误。') end

[row,colum]=size(ParticleSize); if row>1|colum>1

error('输入的粒子的维数错误,是一个1行1列的数据。'); end

[row,colum]=size(ParticleScope); if row~=ParticleSize|colum~=2

error('输入的粒子的维数范围错误。'); end

%设置缺省值 if nargin<7 IsPlot=1; LoopCount=100; IsStep=0; IsDraw=0; end if nargin<8 IsPlot=1; IsDraw=0; LoopCount=100; end if nargin<9 LoopCount=100; IsPlot=1;

end if nargin<10 IsPlot=1; end

%控制是否显示2维以下粒子维数的寻找最优的过程 if IsDraw~=0

DrawObjGraphic(ParticleSize,ParticleScope,AdaptFunc); end

%初始化种群

[ParSwarm,OptSwarm]=InitFunc(SwarmSize,ParticleSize,ParticleScope,AdaptFunc)

%在测试函数图形上绘制初始化群的位置 if IsDraw~=0 if 1==ParticleSize

for ParSwarmRow=1:SwarmSize

plot([ParSwarm(ParSwarmRow,1),ParSwarm(ParSwarmRow,1)],[ParSwarm(ParSwarmRow,3),0],'r*-','markersize',8);

text(ParSwarm(ParSwarmRow,1),ParSwarm(ParSwarmRow,3),num2str(ParSwarmRow)); end end

if 2==ParticleSize

for ParSwarmRow=1:SwarmSize

stem3(ParSwarm(ParSwarmRow,1),ParSwarm(ParSwarmRow,2),ParSwarm(ParSwarmRow,5),'r.','markersize',8); end end end

%暂停让抓图 if IsStep~=0

disp('开始迭代,按任意键:')

搜索更多关于: PSO算法简介 的文档
PSO算法简介.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7kyc07ly687f1wk0kidz_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top