粒子群算法

粒子群优化算法(PSO)

学习记录,欢迎大家前来讨论,另外文章中有部分引用内容后期我会把链接补充上去。



一、粒子群算法的起源

粒子群优化算法(PSO:Particle swarm optimization)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。

粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.

二、问题描述和问题抽象

1.问题描述

一群鸟在一片固定的区域中搜索食物,该地区只有一块食物,所有鸟都不知道食物在哪里,但是他们可以感知到自己离食物还有多远,他们通过相互交流来搜索食物。
小鸟们在微信群里公布自己的位置信息,发现鸟A离得食物最近,然后鸟儿们就向着鸟A的方向移动进行搜寻,鸟B突然发现,哦!刚才我经过的某个位置离得食物好像也很近,我也要到那附近去搜寻一下。就是这么一个过程

在这里插入图片描述

2.问题抽象

在这里插入图片描述

将每个小鸟抽象成一个粒子,而每个粒子对应于解集中的一个解。
在一个D维空间中,有N个粒子组成一个群落。每个粒子就有以下结果参数

1、位置信息

在这里插入图片描述

2、 速度表示

在这里插入图片描述

3、 适应值

在这里插入图片描述

4、最优值

(1)个体最优pbest

在这里插入图片描述

(2)全局最优pbest

在这里插入图片描述

该处使用的url网络请求的数据。


三、算法原理

3.1更新规则

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

基础标准式

在这里插入图片描述
设置Vmax是为了控制每次的步长,以防搜索步长过大错过最优解。
在这里插入图片描述
第一部分记忆项是惯性保持部分,粒子沿着当前的速度和方向惯性飞行,不偏移的趋势,
第二部分是自我认知部分,粒子受到自身历史最好位置的吸引力,有回到自身历史最好位置的意愿。
第三部分是社会认知部分,粒子处在一个社会中(种群中),社会上有更好的粒子,粒子受到最佳位置的吸引力,有去社会最佳位置的意愿。

两种极端情况

在这里插入图片描述

3.2 更新示意图

1、步骤示意图
在这里插入图片描述
2、全局直观示意图(引用别人的博客的图)
在这里插入图片描述

3.2 算法流程图

在这里插入图片描述

四、算法的小优化

标准的PSO算法存在一定的局限性,在实际问题中的应用效果不太理想,比较难以兼顾局部搜索和全局搜索,也很难保证收敛的速度 。针对这个问题,演化出两种改进措施:
(1)引入惯性权重因子𝝎
(2)引入收缩因子𝝋

4.1 引入惯性权重因子

在这里插入图片描述
·𝝎称为惯性权重因子,其值非负
𝝎较大时,全局寻优能力强,局部寻优能力弱
𝝎较小时,全局寻优能力弱,局部寻优能力强
对𝝎进行动态化处理可以获得比固定值更好的寻优结果,动态化𝝎
可以在PSO搜索过程中动态变化,或者根据PSO性能的某个测度函数动态改变。
𝝎的引入,使得PSO算法性能有了很大的提高,针对不同的搜索问题可以调整全局和局部搜索的能力。

个人理解:就是当𝝎变大的时候,下一步的位置更新中惯性的权重变大,那么该粒子就较小的偏离原来的方向,下一步搜索的随机性降低。

权重因子动态变化(这里的ini和end好像有的搞反了 我后期再改改)

动态变化主要按照以下四种函数进行,权重因子递减:
在这里插入图片描述
下面是这几个函数的图像
在这里插入图片描述
最后一个公式中的c值,我取了一个较大的数这个具体是多少我还不知道。
一般𝝎最初取0…9,终值取0.4

线性权值递减

一般最常用最方便的是线性权值递减
由于较大的权重因子有利于跳出局部最小点,便于全局搜索,而较小的惯性因子则有利于对当前的搜索区域进行精确局部搜索,以利于算法收敛,因此针对PSO算法容易早熟以及算法后期易在全局最优解附近产生振荡现象,可以采用线性变化的权重,
在这里插入图片描述

4.2 收缩因子

在这里插入图片描述
学习因子cl和c2决定了微粒本身经验信息和其他微粒的经验信息对微粒运行轨迹的影响,反映了微粒群之间的信息交流。设置c1较大的值,会使微粒过多地在局部范围内徘徊,而较大的c2的值,则又会促使微粒过早收敛到局部最小值。微粒有效地控制微粒的飞行速度,使算法达到全局探测与局部开采两者间的有效平衡,Clerc构造了引入收缩因子的PSO模型,采用了压缩因子,这种调整方法通过合适选取参数,可确保PSO算法的收敛性,并可取消对速度的边界限制
此函数在C大于四之后呈现单调递减的趋势,所以C越大收缩的约厉害,但是这个是不是没单独考虑到C1和C2呢???

五、评价标准

目前评价(改进)粒子群算法的标准已经非常成熟。业内已经整理出了许多不同维度的标准测试函数。需要从准确率(与最优解的偏差),成功率(计算到最优解的概率),计算速度以及稳定性(均值,中位数,方差)等方面对算法进行考量。
用于测试的几个函数如下(图是引用过来的 后期我再把网址添加上去)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七 、优缺点

优点

  1. 收敛速度较快
  2. 需要调整的参数少,原理简单,容易实现,这是PSO的最大优点。
  3. 协同搜索,同时利用个体局部信息和群体全局信息进行指导搜索

缺点

  1. 算法局部搜索能力较差,搜索精度不高。

  2. 算法不能保证搜索到全局最优解,主要有一下两个方面:
    有时粒子群在俯冲过程中会错失全局最优解。
    应用PSO算法处理高位复杂问题是,算法可能过早收敛。

  3. PSO算法是一种概率算法

    八、小例子(参考代码后期放他的链接)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到有时候并不稳定会陷入局部最优值

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页