PSO粒子群优化算法

1算法简介

粒子群优化算法,在1995年由Eberhart博士和kennedy博士提出,源于对鸟群捕食的行为研究。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。算法流程图如下所示。

粒子群优化算法流程图

核心公式( 更新速度和位置):
在这里插入图片描述
在这里插入图片描述
这里   w \ w  w称为惯性因子,   C 1 \ C1  C1   C 2 \ C2  C2 称为加速常数,一般取   [ 0 , 4 ] \ [0,4]  [0,4]   P i d \ Pid  Pid 表示第   i \ i  i 个变量的个体极值的第   d \ d  d 维。   P g d \ Pgd  Pgd 表示全局最优解的第   d \ d  d维。

2 算法优缺点

PSO算法是一种随机的、并行的优化算法。

优点 是:不要求被优化函数具有可微、可导、连续等性质,收敛速度较快,算法简单,容易编程实现。

然而,PSO算法的 缺点 在于:

(1)对于有多个局部极值点的函数,容易陷入到局部极值点中,得不到正确的结果。

造成这种现象的原因有两种,其一是由于待优化函数的性质;其二是由于微粒群算法中微粒的多样性迅速消失,造成早熟收敛。这两个因素通常密不可分地纠缠在一起。

(2)由于缺乏精密搜索方法的配合,PSO算法往往不能得到精确的结果。

造成这种问题的原因是PSO算法并没有很充分地利用计算过程中获得的信息,在每一步迭代中,仅仅利用了群体最优和个体最优的信息。

(3)PSO算法虽然提供了全局搜索的可能,但是并不能保证收敛到全局最优点上。

因此,PSO算法一般适用于一类高维的、存在多个局部极值点而并不需要得到很高精度解的优化问题。

3 算法原理伪代码(matlab)

 for i=1:N
    for j=1:D
        x=xmin+rand(N,D)*(xmax-xmin); %随机初始化位置
        v=rand(N,D); %随机初始化速度
    end 
 end
 
 %------先计算各个粒子的适应度,并初始化Pi和Pg---------------------- 
 for i=1:N
     p(i)=fitness(x(i,:));  %计算初始粒子的适应度值
     y(i,:)=x(i,:);         %个体极值中的变量值等于粒子的初始值---为了后期进行保存全局最优值 
 end 
  
 pg=x(N,:);           %Pg为全局最优值---将初始位置的最后一列元素赋给全局最优值---目的在于保存全局最优值 
  
 for i=1:(N-1)
     if fitness(x(i,:)) <fitness(pg)   
         pg=x(i,:);          %更新全局最优值,保存最优值
     end 
 end
 
 %------进入主要循环,按照公式依次迭代,直到满足精度要求------------ for t=1:M   %做一个主循环,用于迭代
 time(t)=t;
     
 for i=1:N  %更新速度、位移
 	 v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        
     if v(i,:)<xmin %防止越界
          v(i,:)=xmin;
     end
     if v(i,:)>xmax
          v(i,:)=xmax;
     end 
        
     x(i,:)=x(i,:)+v(i,:);     % 更新之后的点
     if fitness(x(i,:))< p(i)      % 使用选择函数
         p(i)=fitness(x(i,:));
         y(i,:)=x(i,:);%更新个体极值    
     end
     if p(i)<fitness(pg)           %选择保存最优值
        pg=y(i,:);
        % pg=x(i,:);
     end       
 end
 Pbest(t)=fitness(pg);     %将全局最优值赋给Pbest end
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值