粒子群算法 PSO(Particle Swarm Optimization)——原理及实现

这篇具有很好参考价值的文章主要介绍了粒子群算法 PSO(Particle Swarm Optimization)——原理及实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 粒子群算法的概念

粒子群优化算法(PSO:Particle swarm optimization)是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。

2. 粒子群算法分析

  • 基本思想

粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:

粒子群算法 PSO(Particle Swarm Optimization)——原理及实现
  • 更新规则

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

v i = v i + c 1 × r a n d ( ) × ( p b e s t i − x i ) + c 2 × r a n d ( ) × ( g b e s t i − x i ) (1) v_{i}=v_{i}+c_{1}\times\mathrm{rand}()\times(pbest_{i}-x_{i})+c_{2}\times\mathrm{rand}()\times(gbest_{i}-x_{i}) \tag{1} vi=vi+c1×rand()×(pbestixi)+c2×rand()×(gbestixi)(1)

x i = x i + v i (2) x_{i}=x_{i}+v_{i} \tag{2} xi=xi+vi(2)

其中 i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N N N N是此群中粒子的总数;
v i v_{i} vi是粒子的速度, v i v_{i} vi的最大值为 V max ⁡ > 0 V_{\max}>0 Vmax>0,如果 v i > V max ⁡ v_{i}>V_{\max} vi>Vmax,则 v i = V max ⁡ v_{i}=V_{\max} vi=Vmax
r a n d ( ) \mathrm{rand}() rand()是介于(0,1)之间的随机数;
x i x_{i} xi为粒子的当前位置;
c 1 c_{1} c1 c 2 c_{2} c2是学习因子,通常 c 1 = c 2 = 2 c_{1}=c_{2}=2 c1=c2=2

公式(1)的

  1. 第一部分称为记忆项,表示上次速度大小和方向的影响;
  2. 第二部分称为自身认知项,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;
  3. 第三部分称为群体认知项,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

以上面两个公式为基础,形成了PSO的标准形式

v i = ω × v i + c 1 × r a n d ( ) × ( p b e s t i − x i ) + c 2 × r a n d ( ) × ( g b e s t i − x i ) v_{i}=\omega\times v_{i}+c_{1}\times \mathrm{rand}()\times(pbest_{i}-x_{i})+c_{2}\times\mathrm{rand}()\times(gbest_{i}-x_{i}) vi=ω×vi+c1×rand()×(pbestixi)+c2×rand()×(gbestixi)

其中 ω \omega ω叫做惯性因子,其值为非负。其值较大,全局寻优能力强,局部寻优能力弱;其值较小,全局寻优能力弱,局部寻优能力强。动态 ω \omega ω能获得比固定值更好的寻优结果。动态 ω \omega ω可在PSO搜索过程中线性变化,也可以根据PSO性能的某个测度函数动态改变。

目前采用较多的是线性递减权值(Linear Decreasing Weight,LDW)策略:

ω ( t ) = ( ω i n i − ω e n d ) ( G k − g ) / G k + ω e n d \omega^{(t)}=(\omega_{ini}-\omega_{end})(G_{k}-g)/G_{k}+\omega_{end} ω(t)=(ωiniωend)(Gkg)/Gk+ωend

其中 G k G_{k} Gk是最大迭代次数;
ω i n i \omega_{ini} ωini是初始惯性权值;
ω e n d \omega_{end} ωend是迭代至最大进化代数时的惯性权值;
典型权值为:

ω i n i = 0.9 , ω e n d = 0.4 \omega_{ini}=0.9,\omega_{end}=0.4 ωini=0.9,ωend=0.4

ω \omega ω的引入,使用PSO算法性能有了很大的提高,针对不同的搜索问题,可以调整全局和局部搜索能力,也使PSO算法有成功地应用于很多实际问题。

公式(2)(3)被视为标准PSO算法。文章来源地址https://www.toymoban.com/news/detail-447448.html

3. PSO算法的流程和伪代码

粒子群算法 PSO(Particle Swarm Optimization)——原理及实现

4. PSO算法举例

粒子群算法 PSO(Particle Swarm Optimization)——原理及实现

5. PSO算法的matlab实现


% PSO algorithm:
% velosity: vi=w*vi+c1*rand()*(pbesti-xi)+c2*rand()*(gbesti-xi);
% position: xi=xi+vi;
% Objective Funtion:y=f(x1,x2)=x1^2+x2^2,-10<=x1,x2<=10
 
%% -------------- set the weight of parameters ----------------
w=0.5;  % the weight of velocity
c1=2;   % the first weight of position
c2=2;   % the second weight of position
N=1000;       % the number of particles
NP=3;       % the number of parameters per particle
Nstep=1000;   % the step number of iteration
xmin=-100;    % the upper limit for x
xmax=100;    %the lower limit for x
vmax=1;  % to be modified according to experience
 
 
%% -------------- initialize --------------------------
x=unifrnd(xmin,xmax,N,NP)   % position
v=unifrnd(-vmax,vmax,N,NP)   %velosity
 
pbest=x;   % the best position 
% f=x(:,1).^2+x(:,2).^2;  % objective function
%f=(x-5).^2;
% f=(x(:,1)-5).^2+(x(:,2)-10).^2;
f=(x(:,1)-5).^2+(x(:,2)-10).^2+(x(:,3)-20).^2;
flbest=f;  % the optimal value per particle
fgbest=min(flbest);  % for optimal value all particle
[p1,p2]=find(flbest==fgbest); % the position of the global optimal value
p3=size(p1);
if p3(1)==1
    p4=p1;
else
    p4=p1(1);
end
gbest=pbest(p4,:); % the position of the global optimal value
 
 
%% ----------- to iterate PSO------------------------
for i=1:Nstep
    gbesttemp=repmat(gbest,N,1); % extend 1D matrix into 2D matrix
    vtemp=w*v+c1*rand()*(pbest-x)+c2*rand()*(gbest-x);
    vtemp(vtemp>vmax)=vmax;
    vtemp(vtemp<-vmax)=-vmax;
    v=vtemp;
    xtemp=x+v;
    xtemp(xtemp>xmax)=xmax;
    xtemp(xtemp<xmin)=xmin;
    x=xtemp;
    
%     f=x(:,1).^2+x(:,2).^2; % to be improved
%    f=(x-5).^2;
%    f=(x(:,1)-5).^2+(x(:,2)-10).^2;
    f=(x(:,1)-5).^2+(x(:,2)-10).^2+(x(:,3)-20).^2;
    
    flbest=min(f,flbest); % compare two matrix for the minimum value
    [temp1,temp2]=find((flbest-f)==0); % the location of the optimal value change
    if isempty(temp1)==0    % prevent null matrix
        x(temp1,:);
        pbest(temp1,:)=x(temp1,:);
    end
 
    fgbest=min(flbest);  % for optimal value per particle's position
    [p1,p2]=find(flbe
    st==fgbest);  %the position of the global optimal value
    p3=size(p1);
    if p3(1)==1 % prevent matrix elements from being greater than one
        p4=p1;
    else
        p4=p1(1);
    end
    gbest=pbest(p4,:); %the position of the global optimal value
        
end

到了这里,关于粒子群算法 PSO(Particle Swarm Optimization)——原理及实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 智能优化算法之粒子群算法(PSO)的实现(Python附源码)

    粒子群算法(Particle Swarm Optimization,PSO)是于1995年被Kennedy等人提出的一种模拟自然界中鸟群进行觅食过程的一种群智能优化算法,该算法将待求解问题的每一个候选解视作鸟群中的每一个个体的具体位置信息,每个候选解对应的最优适应度值作为每个个体在该位置处所能搜

    2024年02月04日
    浏览(51)
  • 智能优化之粒子群算法(PSO)(Matlab,python,C++实现)

    一、算法简介 粒子群算法(Particle swarm optimization, PSO)是一种仿生算法,它是一种 在求解空间中寻找最优解 的简单算法。它与其他优化算法的不同之处在于,它只需要 目标函数,不依赖于目标的梯度或任何微分形式。它也有很少的超参数。 由Kennedy和Eberhart于1995年提出; 群体

    2024年02月16日
    浏览(56)
  • Python实现PSO粒子群优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、

    2024年02月13日
    浏览(38)
  • Python实现PSO粒子群优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、

    2024年02月15日
    浏览(50)
  • Python实现PSO粒子群优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、

    2024年02月13日
    浏览(50)
  • 基于粒子群优化算法(PSO)的Matlab、Python、Java、C++四种仿真实现(附上多个完整仿真源码)

    9.1 泛型的概述和好处 泛型 :是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型它的本质是 参数化类型 ,也就是说所操作的数据类型被指定为一个参数 一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。

    2024年02月15日
    浏览(66)
  • PSO粒子群优化算法

    粒子群算法(Particle Swarm Optimization) 优点: 1)原理比较简单,实现容易,参数少。 缺点: 1)易早熟收敛至局部最优、迭代后期收敛速度慢的。 算法拓展 针对标准PSO的缺点,通常有如下的改进: 实现参数的自适应变化。 引入一些其他机制。比如随机的因素,速度、位置的边界

    2024年02月14日
    浏览(41)
  • 时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来

    预测效果 基本介绍 1.Matlab实现PSO-LSSVM时间序列预测未来(粒子群优化最小二乘支持向量机,优化RBF核函数的gam和sig); 2.运行环境Matlab2018及以上,data为数据集,单变量时间序列预测,运行主程序PSO_LSSVMTSF即可,其余为函数文件,无需运行; 3.递归预测未来数据,可以控制预测

    2024年02月10日
    浏览(59)
  • 回归预测 | MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测

    效果一览 基本介绍 回归预测 | MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测 MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测(Matlab完整程序和数据) 输入7个特征,输出1个,即多输入单输出; 运行环境Matlab2018及以上,运

    2024年02月12日
    浏览(56)
  • 粒子群优化算法(PSO)附代码

    粒子群优化算法(Particle Swarm Optimization,PSO)是一种经典的群智能算法,该算法灵感源自于鸟类飞行和觅食的社会活动,鸟群通过个体之间的信息交互来寻找全局最优点。PSO算法具有原理简单、较少的参数设置和容易实现等优点,因此近年来受到学者们的广泛关注和研究。 粒子

    2023年04月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包