麻雀搜索算法(SSA)是薛建凯等人[1]提出的一种群体智能优化算法,是受麻雀觅食和躲避捕食者行为启发而设计出的算法。该算法于2020年首次提出,具有局部搜索能力强、调整参数少等特点,已成功应用于CT图像的现场检测、电池堆参数的优化识别、机器学习算法的参数优化等实际问题中。
但麻雀搜索算法在面对复杂优化问题时仍有全局搜索能力较弱、容易陷入局部最优、对初始解的依赖性等问题。为克服以上缺陷,卡卡(我)在本文提出了混合灰狼层次结构的自适应麻雀搜索算法。
00 目录
1 麻雀搜索算法原理
2 改进的麻雀搜索算法
3 代码目录
4 算法性能
5 源码获取
01 麻雀搜索算法原理
麻雀搜索算法原理及其MATLAB代码在卡卡往期文章中有过叙述,这里不再说明,感兴趣的朋友可以找我的往期文章
02 改进的麻雀搜索算法
2.1 混沌初始化策略
群体的算法的初始化影响其搜索性能。由于没有先验信息,SSA中的麻雀通常是由随机初始化产生的。这种策略在某种意义上是有用的。但是,有时候麻雀在搜索域中的分布并不均匀,这可能会使麻雀远离全局最优解,导致收敛速度较低。混沌具有遍历性、随机性和规律性等特征,是非线性系统中的一种普遍现象。
目前文献中常用的混沌扰动方程有Logistic映射和Tent映射等。由文献[2]可知Logistic映射的分布特点是:中间取值概率比较均匀,但在两端概率特别高,因此当全局最优点不在设计变量空间的两端时,对寻找最优点是不利的。而Tent混沌映射结构简单,具有比Logistic混沌映射更好的遍历均匀性和更快的搜索速度,但 Tent映射迭代序列中存在小周期, 还存在不稳定周期点, 为避免Tent混沌序列在迭代时落入小周期点和不稳定周期点,在原有的Tent 混沌映射表达式上引入一个随机变量rand(0, 1) × 1 /N[3]。则改进后的Tent混沌映射表达式如下:
其中: N 是序列内粒子的个数。引入随机变量rand(0, 1) /N 不仅仍然保持了Tent混沌映射的随机性、遍历性、规律性,而且能够有效避免迭代落入小周期点和不稳定周期点内。本文算法引入的随机变量,既保持了随机性, 又将随机值控制在一定的范围之内,保证了Tent混沌 的规律性。
图显示了Logistic、Tent和改进的Tent混沌映射产生的混沌序列在二维区域中的初始分布,可以观察到,改进后的Tent混沌映射的分布均匀性较好,因此本文以改进Tent混沌性来代替麻雀搜索算法的随机初始化,以提高和改善初始种群在搜索空间上的分布质量,加强其全局搜索能力,从而提高算法求解精度。
2.2 比例自适应变化
在 SSA算法中,发现者和加入者的数目比例保持不变,这会导致在迭代前期,发现者的数目相对较少,无法对全局进行充分的搜索,在迭代后期,发现者的数目又相对较多,此时已不需要更多的发现者进行全局搜索,而需要增加加入者的数量进行精确的局部搜索。为解决这个问题,提出发现者-加入者自适应调整策略,该策略在迭代前期,发现者可以占种群数目的多数,随着迭代次数的增加,发现者的数目自适应减少,加入者的数目自适应增加,逐步从全局搜索转为局部精确搜索,从整体上提高算法的收敛精度。发现者和加入者数目调整式为
式中:pNum 为发现者数目;sNum为加入者数目;b为比例系数,用于控制发现者和加入者之间的数目;k为扰动偏离因子,对非线性递减值 r 进行扰动。如图,本文提出的发现者和追随者的数量之比随着迭代的进行逐渐收敛,可以在早期的全局搜索和后期的局部优化之间达到平衡。
2.3 动态惯性权重
根据SSA算法机制,注意到从每次迭代开始发现者向最优解的移动过程容易呈现出“跳跃式”的步进状态,该模式固然有利于提高算法的收敛速度,但种群在较短的时间内大量汇集将在一定程度上降低搜索过程的多样性,并出现因忽略搜索盲点和搜索范围不足而陷入局部极值。同时,且发现者在其更新过程中对自身位置的利用程度始终未发生改变。受粒子群优化算法以及文献[4]启发,本文将惯性权重的扰动策略引入到麻雀搜索算法中来更新发现者的位置,从而提高发现者的全局搜索能力,使原种群中适应度较好的个体在其原位置的不同地点之间扰动,改善麻雀种群之间的信息交换,改进的发现者位置更新公式如下:
其中,wmax和wmin是权重变化的最大和最小值,Tmax为最大迭代数,t为当前迭代次数。在迭代前期,较大的惯性权值有利于发现者的全局探索, 而迭代后期较小的惯性权值有利于发现者的局部搜索.提高算法的收敛速度和精度。
2.4 等级制度
根据侦察者位置更新的公式:
在遇到危险时,麻雀个体逃生方式单调狭窄,并在更新中仅考虑当前状态的最优解,没有考虑其他次优解,将过早使全部个体收敛于当前最优个体,若当前最优个体非全局极值点,将使结果容易陷入局部解。所以引入灰狼优化算法(GWO)中的等级制度策略,选取前3个历史最优位置{Xα, Xβ,Xγ}以得到潜在的最优解,该策略能够更为灵活搜索附近的可靠解,降低了SSA陷入局部最优的概率。改进后的侦察者位置更新公式为:
其中,各头狼对应权重θi 计算公式如下:
通过引入等级制度,使得SSA的逃生范围扩大,但是个体在向最优解靠近的过程中,由式得到的个体更新位置是当前最优解、次优解和再次优解的加权平均和,具有一定的随机性,所以更新的位置不一定更优,即算法可能不会收敛,甚至出现发散现象。为了使算法能够收敛到最优解,根据差分进化中的“贪婪”策略,个体的更新位置只选取当前的代价最优值。当得到的更新位置Xnew(t+1)的适应度优于当前的位置,即fnew<=fcurrent,新个体位置才被接受,否则个体的位置保持当前最优而不进行更新。位置更新函数为:
2.5 算法流程
混合灰狼层次结构的自适应麻雀搜索算法流程图如下:
可以看到,算法的改进整体上并没有增加额外的计算负担。
03 代码目录
其中,Main_GWHASSA.m为主程序,代码注释详细,一键运行Main_GWHASSA即可得到所有运行结果。
运行结果包括:混沌序列比较图、自适应参数变化图、惯性权重图以及算法在各测试函数上的迭代图,最后将生成excel表,包含算法在各函数迭代n次的平均值,均值、运行时间、最优解。同时,文件也有乱码解决,给出了主要代码的txt文件。
部分源码:
04 算法性能
为了评估该算法的有效性,在多个测试函数上进行性能测试,并与多个算法进行对比,结果显示改进有效果。
05 源码获取
公众号(KAU的云实验台)后台回复: GWHASSA
除这些改进措施外,还可以在算法最后对最优个体增加一个随机游走等策略来使其避免陷入局部最优,进一步提高其性能。
卡卡将在后面的文章中继续更新其他没有介绍过的智能优化算法,并免费提供经卡卡注释过的源码,从这些改进的方法中可以看到,各种不同的算法更新机制将是算法创新性的重要来源,也许从这些算法中你也可以受到启发创造出高性能的算法,因此对不同的算法多进行了解对于算法的改进是必要的,卡卡也将尽可能兼顾简洁和逻辑性帮大家更多的了解其他算法,为各位提供帮助,看到这里,不妨点个赞吧。
参考文献
[1]XUE J K, ShEN B. A novel swarm intelligence optimization approach: sparrow search algorithm [J]. Systems Science & Control Engineering, 2020, 8(1): 22-34.
[2] 江善和,王其申,汪巨浪.一种新型SkewTent映射的混沌混合优化算法[J.控制理论与应用, 2007,24(2): 269-273.
[3] 张娜,赵泽丹,包晓安,等.基于改进的Tent混沌万有引力搜索算法[J].控制与决策,2020,35(4):893-900.
[4]张顶学, 关治洪, 刘新芝. 一种动态改变惯性权重的自适应粒子群算法[J]. 控制与决策, 2008, 23(11): 1253-1257.
另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。
如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行)