标准粒子群算法(PSO)matlab实现

标准PSO算法的核心公式如下:
在这里插入图片描述
其中,w,c1,c2是预置好的:
w称为惯性权重,大小一般在[0.5,1.5]。
c1,c2称为学习因子,一般取值[1,4],通常设置的c1=c2,但是c1与c2不必完全相同。

此实验是在二维空间寻找最小值,设置多峰函数:
z = x^2 + y-7cos(pix)-8cos(2pi*y);
它的图像如下所示,我们要找的是z的最小值,也是z轴的最低点。
在这里插入图片描述

下面是一些参数设置的变化对粒子收敛情况的影响
本次实验中,种群规模为100,迭代次数为100,其他参数进行不断的变化
(1)w=0.8 , c1=1.4 , c2=1.4 这是一般情况下参数的设置。
在这里插入图片描述
上图是粒子群在三维图上的变化,可以看出粒子的分布越来越集中,由于寻找的是最小值,后期的分布很难看出,以下是x-y的一个俯视图,看出粒子越来越集中。
在这里插入图片描述
后面为了更加直观的了解粒子的收敛情况,只给出粒子在二维平面(x,y)的一个运动情况。
在这里插入图片描述

(2)w=1.2 , c1=1.4 , c2=1.4 惯性权重变大,使得粒子对上一代的速度继承了更多,可能会导致粒子收敛困难。

在这里插入图片描述

(3)w=0.8 , c1=3 , c2=1.4。这里将w继续设置为0.8,个体学习因子c1变大,对收敛会有部分影响,通过多次实验发现它会导致最终寻找的最优解的变化范围变大。
在这里插入图片描述

(4)w=0.8 , c1=1.4 , c2=3。群体学习因子c2变大,对收敛会有部分影响,但是影响程度没有w剧烈。
在这里插入图片描述
结论:
1.c1的值如果较大会缺乏搜索指导,虽然有时会得到最优解,但实验的结果随机性过大。
2.c2的值如果较大会影响最优值,但影响不大。
3.w的值如果较大会让粒子迅速拉向目标区域或者越过目标区域,进而影响算法性能。
4.对算法性能影响最大的是惯性权重,其次是加速系数。
5. 在种群规模不太小的情况下,适当的增加迭代次数会使结果更优。

改进:
1.初始使用较大的c1值和较小的c2值,增加多样性,后期让c1的值线性降低,c2的值线性增加,增强粒子收敛能力。
2.w的值在前期设置较大有助于全局搜索,后期减小加强局部搜索。

以上就是PSO的简单总结,初次更博,可能存在很多不足。matlab代码放出可能重复率较高,若有读者感兴趣可私信。

猜你喜欢

转载自blog.csdn.net/wendy3orz/article/details/85345762