海鸥算法(Seagull optimization algorithm,SOA),是由Gaurav Dhiman和Vijay kumar于2018年提出的一种新型群体智能优化算法,该算法主要模拟了自然界中海鸥迁徙以及迁徙过程中的攻击行为(觅食行为)。
海鸥算法主要模拟了海鸥的迁徙行为和攻击行为 。迁徙行为即海鸥从一个现阶段不适宜生存的地方飞往另一个适宜生存的地方,迁徙行为影响着SOA算法的全局探索能力;攻击行为即海鸥在飞行过程中对地面、水域内食物的攻击觅食,攻击行为影响着SOA算法的局部开发能力。
根据原始文献所述,海鸥在迁徙行为即算法中个体从一个位置探索至另一个位置。在这个阶段,需要注意三点:避免碰撞、向最优个体靠拢、与最优代理保持密切联系。
为了避免与周围海鸥发生碰撞,算法采用附加变量A调整海鸥的位置。
C s = A ∗ P s ( x ) C_s=A*P_s(x) Cs=A∗Ps(x)其中A代表海鸥在给定搜索空间中的迁徙行为,A的大小通过 f c f_c fc进行控制。。 A = f c − ( x ∗ f c / M a x i t e r a t i o n ) A =f_c-(x*f_c/Max_{iteration}) A=fc−(x∗fc/Maxiteration)最终A的大小根据迭代次数,从2→0呈线性下降。
在保证海鸥个体之间不会发生碰撞之后,令所有海鸥向着最佳海鸥靠拢。 M s = B ∗ ( P b e s t ( x ) − P s ( x ) ) M_s=B*(P_{best}(x)-P_s(x)) Ms=B∗(Pbest(x)−Ps(x))其中, M s M_s Ms表示个体向最佳海鸥的收敛方向, B B B作为平衡算法探索和开发能力的重要算参数,其变化遵循: B = 2 ∗ A 2 ∗ r a n d B=2*A^2*rand B=2∗A2∗rand
在计算出每个海鸥的收敛方向后,海鸥开始向着这个位置进行移动:
D s = ∣ C s + M s ∣ D_s=|C_s+M_s| Ds=∣Cs+Ms∣其中 D s D_s Ds即海鸥的新位置。
海鸥在觅食时产生的攻击行为呈螺旋状下降,通过不断改变角度和半径在空中进行移动。海鸥在三维空间中的具体位置为:
x = r ∗ c o s ( k ) x=r*cos(k) x=r∗cos(k) y = r ∗ s i n ( k ) y=r*sin(k) y=r∗sin(k) z = r ∗ k z=r*k z=r∗k r = u ∗ e k v r=u*e^{kv} r=u∗ekv其中, k k k是一个位于 [ 0 , 2 π ] [0,2\pi] [0,2π]的随机数,算法通过 u u u和 v v v控制螺旋半径 r r r, u u u和 v v v通常取1。
结合海鸥新位置,得到整体海鸥位置更新公式如下:
P s ( x ) = ( D s ∗ x ∗ y ∗ z ) + P b e s t ( x ) P_s(x)=(D_s*x*y*z)+P_{best}(x) Ps(x)=(Ds∗x∗y∗z)+Pbest(x)
step1:初始化参数
step2:计算每只海鸥的适应度值,即目标函数值
step3:根据上述公式(1-5)计算 D s D_s Ds
step4:根据上述公式(6-10)计算 P s ( x ) P_s(x) Ps(x)
step5:更新最佳海鸥的位置信息和适应度值, i n e r a t i o n = i t e r a t i o n + 1 ineration=iteration+1 ineration=iteration+1
step6:如果 i n t e r a t i o n > M a x i t e r a t i o n interation>Max_{iteration} interation>Maxiteration,跳转至step7,否则跳转至step3
step7:输出最佳海鸥位置和适应度值
以CEC标准测试函数——单峰函数、多峰函数进行2维和30维测试,测试结果如下图所示。
测试函数为:30维下的Sphere函数,所测结果可以看出SOA算法具有非常优秀的寻优能力!
具体Matlab代码链接如下:
https://mianbaoduo.com/o/bread/aZqamJc=
有网友私聊我,想让我分享一下海鸥算法的改进与创新,那么他来了。大家可以去看我的第三篇文章——基于量子的鸽群优化算法,将两者结合可以发表不错的文章哦。文章链接https://blog.csdn.net/qq_38643813/article/details/109730959