首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

PSO 粒子群算法 Matlab源码

PSO 粒子群算法 Matlab源码

%%%声明:这是本人结合网络上提供的一些源码经过修改 并得到验证的PSO代码
  
  
  %PSO标准算法 其中w c1 c2 a可以改变
%包含初始化函数  迭代函数 还有总体的PSO算法函数
function [Result,OnLine,OffLine,MinMaxMeanAdapt]=PSO_Stand(SwarmSize,ParticleSize,ParticleScope,IsStep,IsDraw,LoopCount,IsPlot)
%function [Result,OnLine,OffLine,MinMaxMeanAdapt]=PSO_Stand(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,以得到性能评估数据
%修改人:Jeary
%修改时间:2012.12.12
%参考文献:XXX.
  %容错控制
if nargin<3
%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<4
%if nargin<7
    IsPlot=1;
    LoopCount=100;
    IsStep=0;
    IsDraw=0;
%elseif nargin<8
elseif nargin<5
    IsPlot=1;
    IsDraw=0;
    LoopCount=100;
%elseif nargin<9
elseif nargin<6
    LoopCount=100;
    IsPlot=1;
%elseif nargin<10
elseif nargin<7
    IsPlot=1;
end
继承事业,薪火相传
返回列表