1. 鲸鱼算法简介
(以下描述,均不是学术用语,仅供大家快乐的阅读)
鲸鱼算法(Whale Optimization Algorithm)是根据鲸鱼围捕猎物的行为而提出的算法。鲸鱼是一种群居的哺乳动物,在捕猎时它们也会相互合作对猎物进行驱赶和围捕。鲸鱼算法提出时间并不长,也是一个新兴的优化算法,研究应用案例不多。
鲸鱼算法中,每个鲸鱼的位置代表了一个可行解。在鲸鱼群捕猎过程中,每只鲸鱼有两种行为,一种是包围猎物,所有的鲸鱼都向着其他鲸鱼前进;另一种是汽包网,鲸鱼环形游动喷出气泡来驱赶猎物。在每一代的游动中,鲸鱼们会随机选择这两种行为来进行捕猎。在鲸鱼进行包围猎物的行为中,鲸鱼将会随机选择是向着最优位置的鲸鱼游去还是随机选择一只鲸鱼作为自己的目标,并向其靠近。
2. 算法流程
鲸鱼算法,显而易见,主角就是鲸鱼了。
在D维解空间内每个鲸鱼的位置为
每只鲸鱼随机选择进行包围猎物或者是使用汽泡网驱赶猎物,每只鲸鱼选择这两种行为的该率是等的,即P(包围)=P(汽泡网)=0.5。
2.1 包围猎物
鲸鱼在包围猎物时会选择向着最优位置的鲸鱼游动或者向着一只随机鲸鱼游动。
2.1.1向着最优位置鲸鱼游动
该鲸鱼的位置更新公式入下:
其中 为当前最优的鲸鱼的位置,A的每一维为均匀分布在(-a,a)内的随机数,a的初始值为2,随着迭代次数线性递减至0;C为均匀分布在(0,2)内的随机数。||表示数的绝对值,即每一维的值都是非负数。
2.1.2 向着随机鲸鱼的位置游动
该鲸鱼的位置更新公式入下:
其中 为当前群体中随机选择的鲸鱼的位置。
那么鲸鱼在什么时候选择向最优个体游动,什么时候选择随机个体为目标呢?
这个将由A的值决定
当 时,鲸鱼选择向着最优个体游动。注意A是一个D维的向量,所以是A的模小于1时,鲸鱼向着最优个体游动。
当 时,鲸鱼选择向着随机个体游动。
可以看出在包围猎物的过程中,鲸鱼算法的搜索模式为在距最优个体较近的周围搜索或者在距随机个体较远的附近搜索。
2.2气泡网
鲸鱼在捕猎时会喷出汽包形成气泡网来驱赶猎物。
鲸鱼为了使用气泡网来驱赶猎物,也会不断的更新自身的位置。使用气泡网时,鲸鱼的位置更新公式如下:
其中b为常数(没找到定义,默认取1),l为均匀分布在[-1,1]内的随机数。
每次行动之前,每只鲸鱼都会抛个硬币,来决定是选择包围猎物还是使用气泡网来驱赶猎物。
从上面的描述可以看出,鲸鱼算法的流程也十分的简单。
总体上看,鲸鱼算法的搜索有两种模式:围绕最优个体搜索(包围猎物,气泡网)以及围绕随机个体搜索(包围猎物),可以明显的看出,鲸鱼算法没有跳出局部最优的操作,若快速收敛,则很可能陷入局部最优。
3. 实验
适应度函数
实验一:标准鲸鱼算法
参数 | 值 |
---|---|
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
搜索次数(最大迭代次数) | 50 |
a | 2->0 |
b | 1 |
取值范围 | (-100,100) |
实验次数 | 10 |
值 | |
---|---|
最优值 | 3.5627355776420206E-18 |
最差值 | 2.7797831025283263E-12 |
平均值 | 6.101150190284387E-13 |
从图上可以看出算法的收敛性还是很强的,在第35代左右就已经完全收敛。再看最后的结果,已经是非常好的结果了,同样也说明的算法的局部搜索能力很强。这样印证了上一节我的说法,算法收敛速度快,缺少跳出局部最优的能力。
从算法的流程我们可以看出,算法的收敛性大概是由参数a来决定的,由于a从2递减为0,使算法的搜索范围越来越小,从而加速算法的收敛。这应该是一个优化后的参数,现在我们固定住a,来弱化算法,减弱其收敛性,看看全局搜索和跳出局部最优能力是否有所加强。
实验二:固定参数a
参数 | 值 |
---|---|
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
搜索次数(最大迭代次数) | 50 |
a | 1.5 |
b | 1 |
取值范围 | (-100,100) |
实验次数 | 10 |
从图像可以看出,算法几乎没有收敛的了,算法的收敛速度依旧很快。
看看实验结果。
值 | |
---|---|
最优值 | 1.1232782623533376E-7 |
最差值 | 0.10303082420493381 |
平均值 | 0.011153458726807865 |
结果比标准鲸鱼算法差,能说明参数a影响了算法的搜索精度,参数a对算法收敛性的影响在于a对向量A的影响。固定a=1.5时使A的模较之前相比有更大的概率大于1,此时鲸鱼们在包围猎物的行为中选择游向最优个体的概率更小,从而使算法的收敛速度更慢,同时算法的全局搜索能力有一定的提升。
4. 总结
鲸鱼算法作为一个新兴算法,我对它的研究也不是太多。纵观算法的流程,可以看出标准的鲸鱼算法和萤火虫算法有相似之处,它们都是在算法前期进行全局搜索,而在算法的后期进行局部搜索,也都没有跳出局部最优的操作。在面对简单问题上表现出的优秀性能到了复杂问题上可能会有所下降,但是由于算法流程、结构相对简单,算法的改进点感觉也不是太多。
以下指标纯属个人yy,仅供参考
指标 | 星数 |
---|---|
复杂度 | ★★☆☆☆☆☆☆☆☆ |
收敛速度 | ★★★★★★★☆☆☆ |
全局搜索 | ★★★★☆☆☆☆☆☆ |
局部搜索 | ★★★★★★★☆☆☆ |
优化性能 | ★★★★★☆☆☆☆☆ |
跳出局部最优 | ★☆☆☆☆☆☆☆☆☆ |
改进点 | ★★☆☆☆☆☆☆☆☆ |
参考文献
Mirjalili S, Lewis A. The Whale Optimization Algorithm[J]. Advances in Engineering Software, 2016, 95:51-67.提取码:b13x
目录
上一篇 优化算法笔记(十二)烟花算法
下一篇 优化算法笔记(十四)水波算法