1. 算法简介
(以下描述,均不是学术用语,仅供大家快乐的阅读)
之前没见过这玩意,从百度百科截个图。樽海鞘看起来像是透明的鱼但又不是鱼,是一种无脊椎动物,不知道它能不能吃,味道如何 :)。
樽海鞘算法借鉴了樽海鞘聚集的生活习性,算法提出于2017年,距今也有几年时间了。在有性时期和无性时期,樽海鞘有着不同的行为,无性时期,樽海鞘们会组成长链。
为了模拟樽海鞘的习性,在樽海鞘算法中,将群体分为了两部分,头部和尾部,头部寻找食物,而尾部则跟随头部。
2. 算法流程
樽海鞘算法中每只樽海鞘的位置为 ,该位置的优劣由其适应度函数计算得出。
种群在解空间内随机初始化后,会根据其适应度函数,从优到劣排序,随后将种群按顺序分为两组,第一组为leader,第二组为follower。Leader会在全局最优位置附近寻找新位置,而follower则是紧跟着自己的前一个个体。
2.1 leader的行为
种群中有1/2的个体为leader,它们会在当前全局最优位置附近搜索,其具体实现如下:
其中C2为[0,1]内均匀随机数,为解空间的上界和下界。
C1取值范围为的图像如下:
每个个体会随机选择公式(2)(3)其中的一个进行移动。公式(2)(3)的含义很明显,已最优位置为起点,以解空间内随机位置为步长和方向走了一步。
结合图像公式(2)(3)可以看出leader其实是在做全局搜索,搜索范围比较大。即使迭代到最后C1取值最小时仍有0.0366,乘以较大的步长,应该也是一个不小的值,故其搜索范围较大。
2.2 follower行为
跟随者的行为特别简单,就是移动到排在自己前面的个体和自己的中点位置。
从公式(4)可以得知,该部分个体在群体较为分散时作用不太大,当群体集中时能够快速提高算法的精度,属于小范围局部搜索。
2.3 流程图
该算法没有贪心步骤,樽海鞘的新位置即使差于原位置,它依然会移动到新位置。加之follower的行为,它的运动图像一定非常的有意思。
3. 实验
适应度函数。
实验一:
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
最大迭代次数 | 50 |
取值范围 | (-100,100) |
实验次数 | 10 |
从图像可以看出群体组成的樽海鞘链还是有比较明显的辨识度的。群体收敛速度虽然一般但是明显是找到了最优位置。
值 | |
---|---|
最优值 | 1.1132229918179271E-10 |
最差值 | 2.9571940843091835E-9 |
平均值 | 6.819800231198109E-10 |
从结果可以看出算法非常的稳定,得到的结果也有非常高的精度。
该算法没有使用贪心算法,依旧能快速收敛。这主要由于全局最优位置其实是一个单调变优的位置,随着迭代次数的增加,C1的值会越来越小,leader的搜索范围也会逐渐集中到最优位置附近。
4. 总结
樽海鞘算法模拟了樽海鞘的聚集成链的生活习性而提出的优化算法。算法将群体分为leader和follower,leader以全局最优为中心进行搜索,为算法提供了全局搜索能力,保证种群收敛,follower跟随自己的前一个个体,为算法提供了局部搜索能力,保证算法精度。
可以看出樽海鞘算法的模型十分简单,实现过程也简单明了,同时算法也有的不错的效果。可能唯一的不足之处就是算法后期缺少跳出局部最优的步骤,不过前期的搜索范围还是比较广泛的,(如果问题不太复杂)陷入局部最优的概率应该也不大。
参考文献
Mirjalili S , Gandomi A H , Mirjalili S Z , et al. Salp swarm algorithm: a bio-inspired optimizer for engineering design problems[J]. Advances in Engineering Software, 2017, 114(dec.):163-191. 提取码:175q
原文代码 提取码:175q
以下指标纯属个人yy,仅供参考
指标 | 星数 |
---|---|
复杂度 | ★☆☆☆☆☆☆☆☆☆ |
收敛速度 | ★★★★☆☆☆☆☆☆ |
全局搜索 | ★★★★☆☆☆☆☆☆ |
局部搜索 | ★★★★★★☆☆☆☆ |
优化性能 | ★★★★★☆☆☆☆☆ |
跳出局部最优 | ★★☆☆☆☆☆☆☆☆ |
改进点 | ★★☆☆☆☆☆☆☆☆ |