优化算法笔记(二十七)蜉蝣算法

Python021

优化算法笔记(二十七)蜉蝣算法,第1张

(以下描述,均不是学术用语,仅供大家快乐的阅读)

蜉蝣算法(mayfly optimization algorithm)是根据蜉蝣的飞行和繁衍行为提出的优化算法。该算法提出与2020年(论文接收在2019年),算是一个新算法。算法的流程和结构其实与蜉蝣的关系不大,可以看作是对粒子群的一个修改。

蜉蝣算法中群体分为雄性和雌性,雄性的行为与粒子群相似,通过全局最优和自身历史最优移动,而雌性则是向优于自己的配偶移动,若配偶弱于自己则自行局部搜索。然后这对雌性和雄性会产生两个后代,并保留群体中的较优个体。

算法的流程结构都有些许复杂,不过有粒子群基础的小伙伴应该能很好的理解。

这次我们的主角就是蜉蝣了(虽然关系不太大)。

蜉蝣算法中有两种角色,雄性蜉蝣和雌性蜉蝣,其数量均为N/2,N为群体总数, 其位置为 ,速度 为了方便描述,下面使用XM表示雄性蜉蝣的位置,XF表示雌性蜉蝣的位置。

整个算法的每次迭代流程大致可以分为四步:

1. 将蜉蝣群体均分为雄性组和雌性组,每组内按优劣顺序排列。

2. 雄性个体移动

3. 雌性个体移动

4. 雄性雌性交配产生两个后代

5. 在这2N个个体中选出N个作为下一代

可以看出每次迭代算法产生了2N个新个体,所以说蜉蝣算法的计算速度会比其他算法更慢,因为蜉蝣算法多计算了N个个体的适应度值。(其他大多数算法每次迭代只计算N个值)。

由于1.分组和5.选择比较简单,不需要再详细描述,下面只介绍2,3,4这三个步骤。

雄性蜉蝣的移动方式与粒子群中的粒子相似,新位置当前位置和速度决定:

其中 表示第n代群体中的第i个个体的第j维的位置。

其速度则有以下公式决定:

其中如果该个体使群体中的最优个体则使用公式(3)进行移动,其他个体则使用公式(2)进行移动。 表示第n代群体中的第i个个体的第j维的速度,pbest为该个体所到过的最好位置,gbest为全局最好位置,a1,a2,beta为常数,一般取值为2,rp为当前位置与pbest的欧式距离,rg为当前位置与gbest的欧式距离,e为自然常数,d为常数,一般取值为0.1,r为[-1,1]内的随机数。

公式2是不是和粒子群的速度更新公式很像?下面是粒子群的速度更新公式

与粒子群相比雄性蜉蝣的速度更新公式将两个随机数r1与r2替换成了与距离相关的值,个人认为这不是一个好的修改,不过后面可以看出,该改动为算法提供了强大的局部搜索能力。

下面做一个试验:现在将蜉蝣算法中所有个体全部划分为雄性,即没有雌性的搜索行为和交配产生后代的行为。也可以认为是在粒子群算法中将公式(3)替换为公式(2),我们看看效果。(唯一不同的是蜉蝣算法中雄性中的全局最优个体使用公式(3)进行移动)。

可以看出,只有最优个体在缓慢的移动,并且在略过最优解附近后仍在移动。问题出在哪呢?

有两个原因:

1 .如下公式的值

我们上述的实验中取值范围(-100,100),初始化时两个个体之间的欧式距离r的取值范围在10以下的都比较少,此时自身的历史最优就是自己本身,也不会产生速度。

当r=10时,其分母为e^200,其值约等于0,此时公式(2)如下

即速度不会发生任何变化。

下面,我们把解空间缩小100倍看看效果。

可以看出仅仅是修改了取值范围,雄性蜉蝣们的行为就发生了巨大的改变。因为距离参数会受到解空间范围的影响,当距离足够小时,公式(2)中的距离参数所算出的速度不在是0,所以雄性蜉蝣们便活跃了起来。

当然这是一个不好的现象,算子不应该受解空间范围改变有如此大的影响。

2 .初始速度

每个蜉蝣都有初始速度呀,就像粒子群一样,所以一开始应该也会移动。

蜉蝣确实有初始速度,不过速度的每一维都是0。为什么呢?不能是一个不是0的值吗?可以但又不完全可以,因为蜉蝣算法没有给出速度的上下限范围,没有范围就无法初始化到该范围内的值。作者将速度的上下限作为了一个改进点放到了文章的后部!

结合上述1,2两点,雄性个体中除最优个体外,其他个体的速度几乎都是0,可以说是以肉眼不可见的方式在缓慢移动。或者也可以理解为该步骤的主要作用是局部搜索,当个体之间距离较远时则不会移动,将雄性单独拿出来实验是没有意义的。如果必须单独拿出来用则需要设置速度上下限,并在初始化中为个体设置随机速度。

其实论文中的速度上下限,以及惯性系数递减等粒子群中已有的步骤,完全可以直接沿用到原始的蜉蝣算法中,而不应作为改进单独拎出来说明。此处也可以直接沿用粒子群算的速度更新公式。

每只雌性个体会有自己对应的雄性个体作为配偶,雌雄两组顺序配对,即最优的雌性配对最优的雄性,次优的雌性配对次优的雄性。

雌性的移动方式为向由于自己的配偶移动,若配偶弱于自己则自行搜索。

其位置的计算公式与雄性相同均为公式(1),速度的更新公式如下:

其中xm为该雌性个体配对的雄性个体的位置,xf为该雌性个体的位置,rmf为这两只蜉蝣之间的位置,fl为常量一般取值为0.1,r为[-1,1]内的随机数。

当该雌性个体差于雄性个体时,使用公式(7)中的上式,当雌性个体优于该雄性个体时,使用公式(7)中的下式。

与雄性的速度更新公式相似的问题,因为距离参数rmf的值可能非常大,会导致公式(7)中的上式做小范围的局部搜索,速度更新幅度较小。可以试着用随机数去代替距离参数:

其中r2为[0,1]内的随机数。

交配行为中一对雌性和雄性会产生两个后代,其产生公式如下:

其中L为随机数,取值范围应该是(0,1),xm为雄性蜉蝣,xf为雌性蜉蝣,可以看出产生的两个个体关于这对雌性的中心对称。该步骤为蜉蝣算法提供了全局搜索能力,并结合选择操作加快了算法的收敛速度。

整个蜉蝣算法的流程如下:

其流程看上去还是挺简单的,不过由于分了雌性和雄性两种,导致所需操作的步骤细节很多,同时由于父辈母辈更新自身位置后还产生了后代,其实每次迭代计算了2N个个体的适应度值,导致其速度慢。

适应度函数 。

实验一 : 原算法

从图像可以看出,蜉蝣算法的收敛速度非常的快,在解附近聚集后群体仍然能够移动并向着正解运动,并最终收敛在正解附近。和之前的全是雄性蜉蝣的实验大相径庭,应该是因为交配产生的后代优于了父辈母辈,父辈母辈被替代了,所以看上去移动了。当距离变小后,雌性雄性蜉蝣的速度更新公式则开始生效了。

不过,结果并不太好,但是在预期内,可以看出,其精度是非常高的,但是算法不太稳定,会出现非常差的结果。

因为距离较远时全靠着交配产生的后代更新位置,此时会快速收敛到当前的最优个体附近。当距离变小后,雌性和雄性的速度更新公式开始生效,此时的群体较为集中,其运动轨迹就像贪吃蛇一样。

综上,可以看出算法的前期收敛很快,算法的局部搜索精度很高,同时全局搜索能力较弱,依靠局部搜索花上跟多时间也能找到最优解。由于全局搜索能力不强,且收敛过快,算法应该比较容易陷入局部最优。

实验二 : 去除距离操作,还原成类似粒子群的速度更新方式,使用公式(4)(8)

实验二的图像中蜉蝣的收敛速度比实验一中慢了一点,而且也没有那么集中,最终也聚集在了正解附近,这个图像其实和粒子群也有了几分相似。不过由于选择操作的作用,蜉蝣算法的总是会收敛的更快,即使设置了速度上限依然如此,因为即使该个体迭代数次可以飞到最优解,但后代可是可以直接降生与最优解附近的,如此一来该个体会被取代,剩下的个体则集中在了最优解附近。

从结果上看,实验二损失了不上精度有点不能接受,但是也稳定了不少,局部搜索能力也有所削弱。蜉蝣算法的收敛行为主要由交配繁衍后代和选择下一代来提供,如果要调整其搜索速度需要修改交配操作。原论文中也写出了相关的改进,如,父代母代产生一雌一雄两个子代,子代雄性优于父代则保留,子代雌性优于母代则保留。此处不再赘述,可以阅读原文。

蜉蝣算法受雌雄蜉蝣的运动和交配产生后代的行为启发而提出的优化算法,个人感觉该算法与蜉蝣关系不大,而是更像是对粒子群的一种改进。算法的流程较为复杂,不过有粒子群作为基础也很好理解。算法的性能比我想象的要好,其中雌性和雄性的移动为算法提供了局部搜索能力,而交配繁衍后代进行选择提供了全局搜索能力。算法的局部搜索能力很强但是稳定性较差,容易陷入局部最优。由于每次迭代产生了更多的新个体数,为了保证公平,它的迭代次数应为其他算法的1/2。

其实原文中还有许多的优化和改进步骤,这里也不一一实验了,还是推荐去看看原论文。

看到蜉蝣算法,想起了之前一个写着玩的算法,也是将种群分为了雌雄两类。不过没有蜉蝣算法这么复杂的操作,只是通过雌雄交配产生后代进行更新迭代,通过母辈生育有几率死亡以及近亲繁殖的后代有几率死亡来控制跳出局部最优,效果中规中矩,不提了。

参考文献

Zervoudakis, K., Tsafarakis, S., A mayfly optimization algorithm, Computers &

Industrial Engineering (2020) 提取码:ogl4

以下指标纯属个人yy,仅供参考

目录

上一篇优化算法笔记(二十六)和声搜索算法

下一篇优化算法笔记(二十八)蝗虫算法

我们还能从那些化身景区的断壁残垣里推演出 历史 变迁,从遗编野史里读出些无法被认定被史实的旧事,然而过去的终究是过去了。

时代的残忍并不在于它遗落了那些无法紧追其后的人;而是它以一种迅雷不及之势,将那些尚未清醒的人在无知无觉时就裹挟而去。

是的, 人类天生就具有适应力,却并不常拥有质疑力。 我们习惯顺应改变而做出调整,至于为什么改变? 如何实现的改变? 那些背后制定和把控规则的手,我们一概不知。

尽管往后总会出现三两一群后知后觉者(他们或许还会自称“先行者”)高呼复古、复兴运动;尽管还会有回潮, 会有小部分聪明人能以“顺风而呼”的方式,让我们重新审视、重视那些我们遗落在飞行途中的美丽。

但,新事物终究会取代旧事物,岁月的大刀阔斧,掩盖了所有夙夜兴叹的声音。而改变,又从来都是双刃剑。 算法在内容推荐领域的广泛运用,亦曾带给微弱尘埃的我,惊喜、哀愁与鼓舞。未来我们要做的,还有很多。

当一切内容幻化为一道道餐品,在精心挑选后,不停地端到最喜欢它的人面前,每个个体的甜区,都在被尝试着被完美击中。 而当它对你了解越深,击中你的甜区就变得越来越容易,你会发现,没有人比它更了解你,它简直贴心至极。

然而潜移默化间, 它对你的掌握愈加精准,将你固化进你的舒适圈里就愈深。 设想一下,如果作为人类的你,不幸变成了那只知道如何获取多巴胺的老鼠,以人类的智慧和毅力, 真的能控制自己不去频繁按下按钮么?被完美命中软肋,就很难不被捕获其中 ;当一个人的心理动向在无数数据分析下被完全掌控,如同你熟知一个人的肌肉记忆,你知道他有百分之80的概率就是会出右拳,如何回击,就太容易。

于是人类的渴望、贪婪、忧虑、仇恨……也通通在算法面前一览无余, 最潜隐的心理,在你所关注的、追逐的内容里显化并被掌握 。在亿万数据里,作为个体的你仅仅由一堆标签组成,about what you are and what do you want。 它是一面镜子,你有尝试过去看它么 ?很少有人通过它看清自己。

人生,终究是苦多;糖,也不能当饭吃。被喜欢的东西包裹是幸福的, 但幸福亦是最容易使人下陷的棉花糖 ,当你越来越只被令自己喜悦和舒适的事物包裹,你的世界,就会越来越狭隘,你越来越不愿意直面人生真实的课题—— 因为那些曾经要拼命才能获取到的成就感与满足感,它等量的快乐可以来得那么轻易。

如此下去,人类如何愈来愈广博呢?如果星辰依旧愈加明亮(虽然被漫天沙尘掩盖), 蝣之辈的我们在这场群体愉悦之中,只是愈加平庸至化为尘土 ;对于人类整体来说,这个过程是下坠的。本质上写到这里,我也非常迷茫:一方面我很难去评判那些沉浸在自己喜欢的、即便是没营养的内容里的人,因为那是他们的自由;另一方面我觉得这对于个体、集体的发展都是无益的,因为如果人不能突破自己边界,去认识到更多更远,人类也只会越来越无法走向广博。

不过也许我没有担心的必要,真正睡着的人很难叫醒他; 何况他们也很难能读到我所写,如此令人不舒适的诚恳建议,不会是他们的甜区范围。

这个时代除了爆款套路,机器都可以写诗了,它纵可将千百年的佳作名篇纳入脑中,横可啃下世界各国的优秀文学理论,再加上熟读人的心理;最终那个冰冷的没有心脏的机器,一定也会写出感动世界的文字。 因为它,能比任何一个优秀头脑,都更懂得讨好阅读者;踩中的每一个点,都能击穿你的心脏。

算法在各个领域的普及化,仿佛迎合,才正确的趋势。文学也要成为一种迎合么? 这是一个人人可以写作的年代, 蝣群起的年代。 用蜉蝣作喻,因其小而微弱,曾经不被看到、如今却被看到。只是尽管这一天到来, 它们也不过是继续朝生暮死、生生灭灭 ,因为永远有不停制造的热点,有更新鲜刺激的话题赶着我们去追逐。

在这样的时代,却越来越向往里尔克笔下寂静的生活——可以诚实地面对苦难、困境,以哲学式的耐心去应对一切,从不将疑难埋藏进心底遗忘、亦不将其投入热闹中逃离。难怪他说:“谁此刻孤独,就永远孤独。” 选择不被芸芸众生同化,真正沉心笃行、时刻保有独立的思想认知的,终究是少数派。

往好处想,这样一个时代,对于创作者来说,也是有利的。因为有更多有才华之人可以被挖掘被展示,只要你的内容足够好;至于这个好,它的标准又是什么?

在那个人人诗情画意的年代,沈三白普通得不能再普通,但他一部《浮生六记》却为后世带来诸多沉醉与安心。那个讽刺小说与八股文并行的奇绝时代,他描写着自己和芸娘最日常的生活,仿佛只为记录而作的日记,语言平白质朴、故事清丽温柔。

而如今我们最盛传的内容是什么呢? 是情爱纠葛,还是纸醉金迷? 权力、暴力、美色、金钱…… 全然关乎人类灵魂最低阶的欲念。

算法出现在这个全民自媒体时代,更是放大了那些不堪。 那些为博人眼球夸大其词的文字、那些哗众取宠的文字、那些公然愚弄大众的文字……我无法适从,只能在自己与世界间构建了一个巨大的屏障,门外巨浪滔天,我只在屋内静心绣花就好。可是到最后,却也是这场浪潮,鼓舞了我——它我让同样看到了许多勇于表达的人、用心分享的人、坚持自我的不一样却依旧被大众认可的人……原来一切不够完满的,还可以由你我去扭转。

我曾经说,发光吧,即便微弱;如今我想说,发光吧,尽管热烈一点、沸腾一点。未有宏图大志,便努力做当代其貌不扬的沈三白, 以手写心、以文作舟,或许有一日能载着三两者,渡向更光亮的对岸。

你看,这是最坏的时代,也是最好的时代。

写在最后:作为蜉蝣,我无法扯住时代的车轱辘;作为文科生,我亦无法将其中的更学术性的东西呈现透彻;仅仅作为一个记录者,我尚能谈谈自己微弱的所感。算法这把双刃剑,切勿全然任其导之、切记避其锋利而用之;而它亦是一面镜子,是这个时代放在我们每个人面前的镜子, 我们一定不能放弃的,是努力跳出局限、跨越自己的甜区,走向更开阔的、不设限的人生。