找回密码
 立即注册
查看: 384|回复: 4

第四十七弹——乌燕鸥优化算法&&海鸥优化算法对比

[复制链接]
发表于 2023-8-18 15:53 | 显示全部楼层 |阅读模式
引言

本期为大师介绍乌燕鸥优化算法(Sooty Tern Optimization Algorithm,STOA)。该算法由Gaurav Dhiman等人(也是海鸥优化算法(SOA)的作者哦~)提出,主要模拟了乌燕鸥群体的迁徙和捕猎行为。相信研究过海鸥的同学也看出来了,两算法很相似,那就让我们来看看它们有什么分歧吧~
乌燕鸥优化算法

乌燕鸥属于海鸟中的一种,因其颜色分明的毛色而得名。乌燕鸥是杂食性动物,主要以爬步履物、虫豸、蚯蚓、鱼类、两栖动物等为食。有趣的是,为了吸引隐藏在地下的蚯蚓,乌燕鸥会用它们的脚发出雨滴落的声音,好生神奇。。。
乌燕鸥最显著的特点是它们的迁徙和攻击行为。迁徙行为被定义为黑燕鸥从一个处所到另一个处所的季节性迁徙,以寻找最丰硕的食物来源。首先原文对迁徙行为进行一些定义:
(1).迁徙期间,乌燕鸥成群结队,但他们的初始位置分歧,以避免彼此之间的碰撞。
(2).在一个群体中,位置较差的乌燕鸥会朝着位置最好的乌燕鸥前进。
下面我们对算法布局进行介绍:
迁移行为(全局搜索过程)
在迁移过程中,黑燕鸥应满足以下三个条件:

  • 避免碰撞
作者引入参数SA用于计算个体st 的新位置Cst,以避免相邻个体之间的冲突:


式中Pst为旧位置,z 暗示当前迭代次数。SA的更新方式为:


这里Cf =2,Maxiteration为最大迭代次数。可以看出,这一部门和海鸥优化算法是不异的。

  • 确定相对间距
更新位置后,当前个体会向最优个体挨近,以获得更好的位置:


此中Mst 可以理解为当前个体与最优个体的相对间距,Pbst 为当前最优个体的位置。CB 的引入使得个体能够更好地进行全局搜索,毕竟对于间距的判断不成能直接就采纳相减的方式,分歧个体间是存在差异的。CB 的计算方式为:


式中Rand为[0,1]内一随机数。注意,这里就与SOA算法有差异了:


SOA算法中的”B ”对应”CB ”,”A”对应”SA”,”rd ”对应”Rand ”。可以看出,CB 的范围是[0,0.5],而B 为[0,8],这就说明SOA算法很大程度上耽误了当前个体与最优个体的间距,这样个体不才一步的位置更新中能够以较大的步长接近最优个体,整体收敛速度快一些;相反STOA算法大大减小了步长,使得全局搜索能力得到大幅提升。

  • 向最优个体挨近
确定了无碰撞位置和相对间距后,下面开始向最优个体挨近:


这里不存在绝对值,而SOA算法中对Dst 增添了绝对值。关于这个绝对值的影响,有待验证。
攻击行为(局部搜索过程)
定位猎物后,乌燕鸥会改变它们的速度和移动角度进行攻击,这也是我们熟悉的一种螺旋方式:


式中Radius(就是下面的r )为螺旋飞翔半径,u=v=1定义了螺旋形状,i 为[0,2π]内的螺旋角,但是原文中解释的怪怪的:
  represents the variable lies between the range of [0 ≤   ≤ 2 ]
所以这个k 是什么鬼?正常理解就是其实k=i,不知道是不是打错字母了?在SOA算法中的x=R*cos(i),但是考虑到公式中的并列挨次,所以仍认为未变化。接下来就是最终的位置更新:


在这里两算法可就相当分歧了:


对于STOA算法,就仿佛是把最优个体拆分到螺旋的三个维度后再重组,突出了螺旋坐标的感化;而SOA算法中反而更想表达出当前个体对最优个体呈远离或靠近的趋势。至此,算法迭代伪代码为:


性能测试

首先当然要强调一下,作者给出的源代码和论文描述的有很大区别。。。所以我按照原文复现了这两个算法并进行测试(注意,原文中并没有控制边界,但我在测试时发现有大量的个体越界现象。所以为了来更好地浮现算法性能,我对个体越界的维度从头初始化)。本次拔取部门尺度测试函数,部门CEC2017测试函数,三种尺度工程优化问题进行对比测试,看看这两个算法到底有什么区别?
尺度测试函数系列
取种群规模为30,最大迭代次数为500,维度为30,优化成果如下:



图1 两算法在Sphere函数上的性能对比



图2 两算法在Rastrigin函数上的性能对比



图3 两算法在Ackley函数上的性能对比

可以看出当面对极小值分布均匀的Rastrigin函数时STOA算法具有很强的迭代优势,但对于简单的Sphere函数,迭代精度差距属实有点大。。。
CEC2017系列
取种群规模为30,最大迭代次数为30000,维度为30,优化成果如下:



图4 两算法在function3函数上的性能对比



图5 两算法在function5函数上的性能对比



图6 两算法在function21函数上的性能对比



图7 两算法在function25函数上的性能对比

可以看出,STOA算法在迭代前期具有更快的收敛速度,但收敛精度仍不及SOA算法。我认为这与STOA算法位置更新最后一步直接采纳相乘的方式有很大关系。
尺度工程优化问题
取种群规模为30,最大迭代次数为500,优化成果如下:



图8 两算法对于焊接梁优化问题的迭代过程



图9 两算法对于压缩弹簧优化问题的迭代过程



图10 两算法对于压力容器优化问题的迭代过程

在尺度工程优化问题上得到的结论与CEC2017测试函数不异,这也验证了上文提到的STOA算法相对而言具有较好的全局搜索能力,但是它的位置更新方式并没有很好的浮现出最优个体的引导性,即使它也用到了最优位置。如果有读者想深入了解这三种方式可以参考我的毒爆虫优化算法:
总结

总体来看,STOA算法在大都情况下性能是不如SOA算法的,我想这也是为什么海鸥优化算法受到较多存眷的原因。但是!通过测试会发现越界的个体太多了!这个确实是很值得改良的一个点。原文与源代码不相符的这种情况是真的很想让人吐槽。。。不外话说回来,这里面蕴含的螺旋设置方式还是很值得我们学习的~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-8-18 15:54 | 显示全部楼层
棒[赞同]
发表于 2023-8-18 15:55 | 显示全部楼层
怎么实现对比的代码
发表于 2023-8-18 15:55 | 显示全部楼层
这个作者Gaurav Dhiman提的算法别再更新了,自己发布的源代码和论文公式对不上,而且源代码还是和鲸鱼优化算法不能说一样吧,反正也大差不差,感觉这个人涉嫌造假。
发表于 2023-8-18 15:56 | 显示全部楼层
求代码
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-3 01:21 , Processed in 0.102289 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表