1. 帝王蝶算法简介
(以下描述,均不是学术用语,仅供大家快乐的阅读)
上一篇记录了蝴蝶算法(Butterfly Algorithm),这一篇接着记录帝王蝶算法(Monarch butterfly optimization)。
介绍之前我们先看看帝王蝶的百科,了解其特性,这将有利于我们对算法的理解和记忆。
帝王蝶算法(Monarch butterfly optimization)是根据帝王蝶的迁徙行为提出的优化算法。帝王蝶算法也是于2015年提出,相关的论文也比较多了(这两个蝴蝶算法都有这么多人关注吗?)。其流程相对蝴蝶算法来说有点复杂,不过其论文对算法描述非常的清晰,大家可以去阅读原文。
帝王蝶算法中,每只蝴蝶的位置代表一个可行解,蝴蝶群体将会被分布在两个大陆上,这两块大陆上的帝王蝶分别有不同的行为:1.迁徙,2适应环境。帝王蝶算法组合了这两种行为来搜索解空间中的最优位置。
2.算法流程
帝王蝶算法中每只蝴蝶的为,该位置的优劣由其适应度函数F(X)计算得出。
帝王蝶群体分布在两块大陆上,分别是land1和land2上。对于一只随机帝王蝶来说,它位于land1上的概率为p,位于land2上的概率为1-p。以此可以将总群分为2个群体,论文中p取值维5/12。
Land1上的群体的行为为迁徙,而land2上的群体的行为为适应环境。
2.1迁徙
位于land1上的群体的行为为迁徙,这部分个体在种群中的比例为p。其计算公式如下:
其中为新个体的第d维,r1为land1中的随机个体,r2为land2中的随机个体,rand为0-1之间的均匀随机数,peri为常数,取值为1.2,p的值也是5/12。公式的含义即新产生的个体每一维由选自种群中的其他个体,其中有 (5/(12*1.2)=34.7%的维度来自land1中的个体, 1-5/(12*1.2)= 65.3%的维度来自land2中的个体。或者也可以说从两个群体中各选了D/2个个体的不同的维度组成了新个体。
新个体属于land1群体,如果该个体优于对应的父类个体则取代父类位置,否则将被抛弃。
从公式中也可以看出,这是一个无法脱离局部最优的操作,没有产生新的位置,当群体收敛于一点后新个体将不会有太大变化,有点类似遗传算法的交叉操作。
2.2适应环境
不同与land1上的群体,land2上的群体的行为为适应环境,其计算公式如下:
其中为最优个体的第d维,r3为land2中的随机个体,S_max为帝王蝶的最大步长,一般取值为1,t为当前的迭代次数,levy为列维飞行随机,rand1和rand2为为0-1之间的均匀随机数,BAR为一个常数,取值为5/12。
计算可以得出新维度取上述3个值的概率为5/12=41.7%, (7/12)*(5/12)=24.3%, (7/12)*(7/12)=34.0%。
论文中的常数取的非常的不对称,其来源是根据帝王蝶在各地停留、活动的月数站全年的比例计算而来,非常的写实。
2.3总体流程
从2.2和2.3可看出,帝王蝶算法的流程也非常的简单,过程中也只有两个公式。
可以看出,帝王蝶算法的流程和蝴蝶算法的流程几乎一模一样(废话,流程图直接copy的,当然一样),两个算法的个体都是拥有两种行为,蝴蝶算法的行为比较整体,宏观操作,新个体由2-3个个体得出,而帝王蝶算法的行为比较零散,微观操作,每一维来自一个个体。两个算法也都使用了levy飞行,考虑到两个算法竟然还是同一年的,莫非,难道……
不过从细节来看,两个算法差异还是比较大的,不过两个算法的性能也都算是中规中矩的那种,没有特别突出的特点。
3.实验
适应度函数。
实验一:
值 | |
---|---|
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
最大迭代次数 | 50 |
取值范围 | (-100,100) |
实验次数 | 10 |
p | 5/12 |
peri | 1.2 |
BAR | 5/12 |
S_max | 1 |
值 | |
---|---|
最优值 | 6.616787285876675E-7 |
最差值 | 0.2237125217553702 |
平均值 | 0.02237985875889385 |
从图像中可以看出,帝王蝶算法收敛的非常之快,几乎在10代以内就聚集在了目标解附近。从结果中也可以看出,10次结果中仅有一次较差,其它结果也都很接近0。效果比较好,我总觉得参数的设置不太对称,改成对称试试结果。
实验二:修改参数p=0.5,peri = 1,BAR=0.5,即迁徙操作两个种群各占一半维度,适应环境操作最优个体站一半维度,1/4进行levy飞行。
值 | |
---|---|
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
最大迭代次数 | 50 |
取值范围 | (-100,100) |
实验次数 | 10 |
p | 1/2 |
peri | 1 |
BAR | 1/2 |
S_max | 1 |
值 | |
---|---|
最优值 | 5.316420564900669E-8 |
最差值 | 305.487133867145 |
平均值 | 46.55311876057846 |
从结果可以看出,将参数改为对称后效果差了不少。图像我选取一副较差的图像,从图像可以看出在最后,种群收敛到了目标解外的一点。收敛的过程很像遗传算法和差分进化算法,个体的运动轨迹在一个类似十字架的图案上。但是这个适应度函数非常简单,不存在局部最优解,问题应该出在步长上。整个算法只有levy飞行那一步会产生新的位置,其他步骤都是现有位置的组合。
下面将最大步长改大试试。
实验三:在实验二的基础上,将S_max改为100。
值 | |
---|---|
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
最大迭代次数 | 50 |
取值范围 | (-100,100) |
实验次数 | 10 |
p | 1/2 |
peri | 1 |
BAR | 1/2 |
S_max | 100 |
值 | |
---|---|
最优值 | 0.03327980532491267 |
最差值 | 1.372619091077949 |
平均值 | 0.2681765191162244 |
结果比实验二好了不少,但精度有所下降,但是比不上实验一。最大步长设的太大会影响精度,设得太小又会让种群提前收敛。实验三中最大步长为100,最大迭代次数为50,则由最大步长影响的精度为100/(50*50)=0.04,这与实验结果相差不太多。权衡利弊,S_max的取值还是大一点的好,否则,种群未在正解附近收敛得到的结果会很差,结果会很不稳定。
实验四: 在实验一的基础上将S_max修改为100,与实验三比较原文其他参数是否合适。
值 | |
---|---|
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
最大迭代次数 | 50 |
取值范围 | (-100,100) |
实验次数 | 10 |
p | 5/12 |
peri | 1.2 |
BAR | 5/12 |
S_max | 1 |
值 | |
---|---|
最优值 | 0.0041091205735400115 |
最差值 | 0.6353414477079234 |
平均值 | 0.1801414787350149 |
从结果可以看出,这次的结果要好于实验三的结果,这说明原文中给出的这一系列不对称的参数效果还是好于实验二实验三中的对称参数。图像与实验三的图像类似,步长改大之后个体很容易飞出边界,然后由越界的处理方法使其留在边界上,所以在算法开始后不久就可以看到群体都停留在了边界上,不过问题不大,最终还是会收敛与正解附近。
与实验一相比,实验四的结果差了不少,这是因为测试函数比较简单,当选用较为复杂的测试函数后,较大的步长能够提高算法的全局搜索能力,让算法的结果更加稳定。
4.总结
帝王蝶算法是根据帝王蝶的迁徙行为提出的算法。位于两块大陆上的帝王蝶群体有着不同的行为,迁徙行为类似于进化算法的杂交操作,适应环境行为类似于进化算法的变异操作,不过其变异位置在当前最优个体附近。算法中的levy飞行是其变异操作的具体实现,不过由于受最大步长的影响,levy飞行的作用并不明显。帝王蝶的最大飞行步长对结果的影响较为明显,步长较小时算法的全局搜索能力较差,局部搜索能力较强,精度较高,反之,全局搜索能力较强,局部搜索能力较差,精度较低但是更加稳定。
帝王蝶算法的参数非常奇特,按论文中所说是根据蝴蝶在各地活动的月数而设定的。虽然不是最佳参数,但也优于均匀对称的参数。有兴趣的同学可以试试怎么设置能让算法的性能达到最佳。
接连两篇笔记记录了都是蝴蝶算法,它们的总体流程结构相差不大,一个是宏观行为,个体之间互动,一个是微观行为,维度之间互动。这两个蝴蝶算法的性能也相差不多,中规中矩,没有太亮眼的地方,而且都用了levy飞行来提供跳出局部最优的能力。不过levy作为非常规武器,不应该在原始算法中给出,其操作与levy飞行不搭且没有提供相应的能力(可能我看到的不是原始论文)。
参考文献
Monarch butterfly optimization[J]. Neural Computing and Applications, 2015, 31:1995-2014. 提取码:fg2m
Wang G G , Zhao X , Deb S . A Novel Monarch Butterfly Optimization with Greedy Strategy and Self-adaptive Crossover Operator[C]// 2015 2nd Intl. Conference on Soft Computing & Machine Intelligence (ISCMI 2015). IEEE, 2015. 提取码:9246
以下指标纯属个人yy,仅供参考
指标 | 星数 |
---|---|
复杂度 | ★★☆☆☆☆☆☆☆☆ |
收敛速度 | ★★★★★★★☆☆☆ |
全局搜索 | ★★★☆☆☆☆☆☆☆ |
局部搜索 | ★★★★★☆☆☆☆☆ |
优化性能 | ★★★☆☆☆☆☆☆☆ |
跳出局部最优 | ★★★☆☆☆☆☆☆☆ |
改进点 | ★★★☆☆☆☆☆☆☆ |