在上一个博客中作者介绍了标准粒子群及其实现,并给出了许多改进方向,那么从这一期开始就会陆续更新关于粒子群的改进,这一期的改进主要有三个方向,1.混沌初始化粒子群
2 非线性调整惯性权重
3 学习因子动态变化。
下面将对这些改进策略进行详细阐述。
00 文章目录
1 粒子群改进策略
2 代码目录
3 问题导入
4 仿真
5 源码获取
01 粒子群改进策略
粒子群算法在解决复杂优化问题方面展现出了较大的优势.但和其它智能算法一样,粒子群算法也具有较难克服的缺陷,例如早熟问题等。
PSO算法中惯性权重、学习因子等参数的取值对算法的收敛性能起着非常重要的作用,而研究者对于这些参数大都按常规取值,这样势必会影响算法的收敛性和收敛速度,同样初始化也对其精度和速度有较大影响,解空间不均匀的分布往往会陷入局部最优。
1.1 混沌初始化
传统粒子群算法一般采用随机初始化来确定初始种群的位置分布,由计算机生成随机数,再根据下式随机生成各个粒子的初始位置。
Positions 代表生成的粒子位置;rand 代表生成的 随机数,取值范围为[0,1];ub,lb 分别为解空间的上下界。
通常这种随机初始化能生成每次不一样的初始种群,使用起来比较方便。但也存在弊端,就是初始粒子在解空间的分布并不均匀,常常遇到局部区域的粒子过于密集,同时一部分区域的初始粒子却过于稀疏。这样的情况对优化算法的前期收敛是非常不利的,对于容易陷入局部最优的群体优化算法,可能导致收敛速度下降甚至无法收敛的情况发生。
而混沌初始化则可以有效地避免这些问题。混沌 初始化具有随机性、遍历性和规律性的特点,是在一定范围内按照自身规律不重复地遍历搜索空间,这样生成的初始种群在求解精度和收敛速度方面有着明显改进。 本文中的混沌初始化选用 Logistic混沌模型,其公式如下:
其中,lamda为混沌模型映射参数,若μ∈[3.57,4],则该系统处于混沌态;若μ=4,系统处于完全混沌状态。一般取μ为4。
上述两种初始化方法生成的解空间分布图如下:
可以看到,经混沌初始化后的解空间分布较之随机初始化更加均匀,没有过于密集或过于稀疏的区域。
1.2 自适应惯性权重
惯性权重因子影响PSO算法性能,其值较大时有利于全局范围的搜索,较小的权重值有利 于加快算法的收敛速度,对于局部的细致开发益处较大。
为了平衡PSO算法的全局搜索能力和局部改良能力,采用非线性的动态惯性权重系数公式,其表达式为:
其中,f表示粒子实时的目标函数值﹐favg和fmin分别表示当前所有粒子的平均值和最小目标值。从上面公式可以看出,惯性权重随着粒子目标函数值的改变而改变。当粒子目标值分散时,减小惯性权重;粒子目标值一致时,增加惯性权重。
1.3 动态学习因子
在标准粒子群算法中,c1、c2为学习因子,一般取固定的值,学习因子c1表示粒子对自身的思考,即粒子从自身学习的部分;学习因子c2 体现了粒子的社会性,即粒子向全局最优粒子学习的特性.
粒子群算法进行过程中,算法开始时应该在空间广泛搜索,增加粒子多样性,而在后期应该注重算法的收敛性,体现在算法中应该是学习因子c1,c2分别随着算法的进行其权值是变化的而不应该固定.
因此,为了防止粒子在进化初期快速聚集在局部最优解周围,使粒子在全局领域内大范围的搜索,让c1取较大的值,c2取较小的值。在搜索后期为了便于让粒子快速、准确地收敛于全局最优解,提高算法收敛速度和精度,设置c1取较小的值,c2取较大的值。因此本文构造C1为单调递减函数,构造C2为单调递增函数,二者表达式如下:
其中t为当前迭代次数。Tmax为粒子群最大迭代次 数,由上可知,通过动态调整学习因子的取值,使得进化 初期,群体能在较短时间内快速搜索到最优值,进化后期能够快速准确收敛到最优解。
C1,C2函数图像如下:
02 代码目录
首先运行main_ipso.m与main_pso.m,再运行compare.m即可看到迭代对比
03 问题导入
为验证算法的性能,采用Benchmark中的1个常用的测试函数Rastrigrin函数:
‘
将该函数取负,则适应度为越大越佳。
该函数为多峰函数,收敛于(0,0,…,0)。
04 仿真
将上述的改进策略加入标准粒子群中,并通过Rastrigrin函数进行对比,得到如下结果:
其中,IPSO的取值以及适应度为:
PSO的取值以及适应度为:
显然,PSO陷入局部最优,且很难跳出局部解。自适应混沌粒子群算法性能更佳。
05 源码获取
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
https://mbd.pub/o/bread/ZJqbmpdv
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
如果这篇文章对你有帮助或启发,可以点击右下角的赞 (ง •̀_•́)ง(不点也行),若有定制需求,可私信作者。