1. 算法简介
(以下描述,均不是学术用语,仅供大家快乐的阅读)
海洋捕食者算法(Marine Predators Algorithm)见名知意,就是根据海洋中掠食者捕获猎物的行为提出的优化算法。该算法发表于2020年,也算法是一个新算法了。
该算法根据迭代次数分均三个阶段,每个阶段使用不同的随机策略计算步长并移动猎物位置。如果猎物的位置好于捕食者的位置,那么捕食者就移动到该猎物的位置。
海洋捕食者算法就像一个缝合怪,缝合了布朗运动,levy飞行等随机生成策略,在不同的阶段使用不同的策略。虽然是缝合怪,但是也有着不错的寻优能力,我们也可以学习学习其策略。
(因为是缝合怪,甚至找不到对标的动物,可能作者也没找到,这次就算是鲨鱼吧。)
2. 算法流程
海洋捕食者算法中有两个概念,捕食者和猎物,在每个阶段,只有猎物会进行随机移动,而捕食者则是在猎物完成移动后,移动到优于自己的猎物处。
在蚁狮算法中也是这样的模型,不过这里更简单,我们可以将海洋捕食者算法中的捕食者对标粒子群算法中的粒子。捕食者的位置就是粒子的历史最优位置,猎物的位置就是粒子的当前位置。猎物(粒子)不断的移动改变位置,如果找到优于捕食者(粒子的历史最优)的位置,那么捕食者移动到该猎物处(粒子更新历史最优位置)。
初始时海洋捕食者数量为N。捕食者的位置表示为,猎物的位置为,最大迭代次数为。
2.1阶段1
迭代次数在内。
根据如下公式计算猎物的新位置:
公式(1)用于计算步长,其中Rb为标准正态分布随机数,公式(2)用于计算新位置,其中R为[0,1]内均匀随机数,公式(3)是我将公式(1)代入公式(2)的到的,由于后面太多随机数相乘,其结果可以近似为0,即该阶段在当前猎物周围小范围搜索。
2.2阶段2
迭代次数在内。
该阶段,种群被均分为二组,第一组的猎物的位置更新公式如下:
公式(4)用于计算步长,其中Rl为levy分布随机数,公式(5)用于计算新位置,其中R为[0,1]内均匀随机数,公式(6)是我将公式(4)代入公式(5)的到的,levy随机数的结果大多接近0,少数会取到较大的值,其结果仍可以近似为0,即组个体在当前猎物周围小范围搜索。
第二组猎物按照如下公式更新位置:
其中Rb为标准正态分布随机数。
公式(9)的图像如下
由于取值范围为,CF的取值可以近似看做从0.7631线性递减至0.2311。此时仍可以判定公式(8)加号右侧部分近似为0,该组的猎物将在其对于的捕食者周围运动。
2.3阶段3
迭代次数在内。
该阶段猎物的位置更新公式如下:
:
该阶段与阶段2中第二组的区别仅是将其正态分布随机数改为了levy分布随机数。可以看出三个阶段的更新公式其实相差不大,就是将随机数在正态分布和levy分布中挑一个,搜寻目标在猎物和捕食者中选一个,一共四种组合。
2.4 更新捕食者位置
捕食者对比自己的猎物,如果猎物的位置更好,则更新自己的位置到猎物的位置。
2.5 鱼类聚集效应更新猎物位置
根据鱼类的聚集效应(Fish Aggregating Devices (FADs) effects),再次更新猎物的位置,其具体更新公式如下:
其中FADs取值为0.2,R,r为[0,1]内均匀分布的随机数,U为{0,1}内随机数,r1,r2为群体中的随机个体编号。
从公式中可以看出,该步骤第一个公式对猎物位置的部分维度进行了“重置“,不过这样有较大可能会超出边界,第二个公式类似于差分进化的变异公式,让猎物随机移动。
2.6 流程图
可以看出海洋捕食者算法步骤还是挺复杂的,它的捕食者包含有贪心步骤,但是猎物没有贪心步骤。这一点也和粒子群相似,可以认为它是粒子群的子类,猎物的步长相当于粒子群的速度,但是没有向粒子群一样利用全局最优,这也是一个可以改进的地方。
3. 实验
适应度函数。
实验一:
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
最大迭代次数 | 50 |
取值范围 | (-100,100) |
实验次数 | 10 |
FADs | 0.2 |
从图中可以看出海洋捕食者算法的初期收敛速度并不是很快,而后期则是会迅速收敛,。通过前面对公式的分析,该算法在局部搜索方面有着较强的性能,从图中也可以得到相似的结论。
值 | |
---|---|
最优值 | 1.2331494391841926E-8 |
最差值 | 4.9616331058766115E-5 |
平均值 | 6.0291224699999E-6 |
从结果来看,算法效果还是很不错的,虽然是个缝合怪,但该有的步骤和性能都不差。
实验二:分别对阶段1、2、3,进行测试,即整个算法中只有阶段1、阶段2或者阶段3中的一个。
阶段1图像如下:
阶段二图像如下:
阶段三图像如下:
可以看出阶段一类似于全局搜索,种群较为分散,阶段二有全局搜索也有局部搜索,效果不错,阶段三局部搜索能力较强,几乎只用该阶段就搜索到了最优。
其实按照作者的设计,阶段一应该全局搜索,阶段二全局搜索和局部搜索,阶段三局部搜索和跳出局部最优。
不过我总觉得步长公式中随机数用的太多,下面,小小改动一下。
实验三:修改公式如下:
公式(1)(4)(7)(10)四个步长公式中,移出了括号内的随机数,公式(8)(11)中将捕食者的位置修改为了全局最好的位置。
图像看上去好了不少,在最后群体能够收敛到一起,集中在正解附近,结果应该不差
值 | |
---|---|
最优值 | 1.4459518186224542E-11 |
最差值 | 8.470000479932672E-7 |
平均值 | 1.393247456998955E-7 |
结果相对于原算法好了一丢丢。不过这个测试函数十分的简单,这个修改只能说是在该函数上较好,总体的性能还需要更全面的测试函数来测试。总的来说海洋捕食者算法的性能不错,但能够改进的地方也不少。
4.总结
海洋捕食者算法是根据海洋中的捕食者搜捕猎物的行为而提出的优化算法。该算法分为三个阶段,第一阶段,进行全局搜索,第二阶段,融合全局搜索和局部搜索,第三阶段,进行局部搜索和levy飞行跳出局部最优。该算法就算一个缝合怪,可以从中看出不少算法的特点。
参考文献
Faramarzi A , Heidarinejad M , Mirjalili S , et al. Marine Predators Algorithm: A Nature-inspired Metaheuristic[J]. Expert Systems with Applications, 2020, 152:113377.
提取码:7wfn
以下指标纯属个人yy,仅供参考
指标 | 星数 |
---|---|
复杂度 | ★★★★★☆☆☆☆☆ |
收敛速度 | ★★★☆☆☆☆☆☆☆ |
全局搜索 | ★★★☆☆☆☆☆☆☆ |
局部搜索 | ★★★★★☆☆☆☆☆ |
优化性能 | ★★★★☆☆☆☆☆☆ |
跳出局部最优 | ★★★★☆☆☆☆☆☆ |
改进点 | ★★★★☆☆☆☆☆☆ |