优化算法学习|布谷鸟算法原理及Python实现

哈喽,小伙们好~

又到了算法学习的时间,那么今天就给大家介绍一个不是太新的算法——布谷鸟算法。快来一起学习吧~

01 算法背景

布谷鸟算法(Cuckoo search algorithm,CS),顾名思义,肯定是和布谷鸟有关。没错,这个算法就是英国学者 Xin-She Yang 和 Suash Deb 于2009年模仿布谷鸟育雏行为而提出的一种新兴基于自然元启发式算法。

布谷鸟这种鸟很懒,不会筑巢,自己生娃自己不会孵,直接扔到其他种类鸟的鸟巢中,但是有时候会被宿主鸟妈妈发现不是自己的蛋,然后就会被抛弃,甚至放弃这个巢。但是布谷鸟一般会比其他的鸟更早破壳,他们还有另外一种隐藏技能,幼鸟会模仿宿主鸟孩子的叫声来骗取鸟妈妈的信任,同时他们还会本能地把其他的蛋推下巢,从而获得更多的食物。

因此,我们可以这样理解:鸟巢=蛋=问题解,蛋能否成功被宿主鸟孵化并茁长成长是衡量问题解好坏的唯一标准 。布谷鸟在寻找鸟巢下蛋的过程就是在D维空间中寻找解的过程,而鸟巢的好坏象征着解的好坏。

02 算法原理

在自然界中,布谷鸟寻找适合自己产卵的鸟窝位置是随机的或是类似随机的方式,为了模拟布谷鸟寻窝的方式,首先,需要设定以下3个理想的状态

(1)布谷鸟一次只产一个卵,并随机选择鸟窝来孵化它;

(2)在随机选择的一组鸟窝中,最好的鸟窝将会被保留到下一代;

(3)可利用的鸟窝数量n是固定的,一个鸟窝的主人能发现一个外来鸟蛋的概率Pa∈[0,1]

可能会有人会问,怎么随机去寻找鸟窝的位置。因为更新位置的方法十分重要,关系到后面算法收敛的速度。那这个时候,我们就不得不提到另外一个概念——“莱维飞行”。一些研究证明,使用莱维飞行(Levy Flight)的方式可以让布谷鸟更有效地去寻找全局最优解而不至于陷入局部最优解中。

03 莱维飞行

我们可以先来看一下莱维飞行的演示图。

通过相关概念我们知道:莱维飞行是由较长时间的短步长和较短时间的长步长组成

通俗点说就是,点大多数时间只有小距离移动,偶尔会有大距离移动的情况。这和自然界中大多数动物觅食方式类似。找到一块区域后细致的查找猎物,如果没找到,就换一片区域。

假设布谷鸟寻找鸟窝首先随机选择一个方向,然后确定要走多远。Levy分布要求大概率落在值比较小的位置,小概率落在值比较大的位置,刚好满足这种均匀分布。

04 搜索机制

对于这个算法来说,执行两种类型的搜索方式:局部搜索和全局搜索。

局部搜索可以通过局部随机行走实现:


其中xj和xk为随机选择的解,H(µ)为赫维赛德函数,pα是用于平衡局部和全局随机游走的切换参数,s为步长,ε为均匀分布的随机数。

全局搜索通过莱维飞行实现:

其中α>0为步长缩放因子,且:


其中:

莱维飞行是步长服从Lévy分布的随机游走:

通过莱维飞行生成的随机数由通过正态分布创建的随机方向选择组成,步长使用Mantegna算法生成:

其中µ和ν服从正太分布:

05 算法流程

1. 初始化:目标函数f(x)、鸟巢个数n、最大迭代次数MaxGeneration、最大发现概率Pa,解空间上下界Lb与Ub等;

2. 随机产生初始解x(i)(鸟巢位置),计算相应的初始适应度值F(i),并记录当前的最优函数值;

3. 利用Levy飞行更新解(产生新的鸟蛋),计算相应的适应度值F(j);

4. 比较Fi与Fj适应度值,如果Fj(新解)更小,将该适应度值及鸟蛋所代表的解赋给原来的鸟巢x(i);

5. 判断鸟蛋是否会被发现:用随机数r与最大发现概率Pa比较,若r>Pa,被发现,宿主找新家,鸟巢位置x(i)随机改变,反之,则不变;

6. 对各解(鸟巢位置或者鸟巢中的鸟蛋)进行适应度值排序,保留最优适应度值的解(鸟巢位置或鸟巢中的鸟蛋);

7. 循环步骤3-6,直至达到最大迭代次数或者满足终止条件,则算法终止。

伪代码

06 Python实现

布谷鸟算法提出者之一的Xin-She Yang教授试了多组参数,发现种群规模在15到40,布谷鸟蛋被发现的概率 pa 取0.25时,对于大多数优化问题已足够,并且结果和分析也表明收敛速度在一定程度上对所使用的参数不敏感。

以下列目标函数为例,应用布谷鸟算法进行求解:

得到最优解,与迭代图分别为:

07 参考文献

[1] Yang X S . Cuckoo Search and Firefly Algorithm: Overview and Analysis[M]. Springer International Publishing, 2014.

[2] Yang X S ,  Deb S . Cuckoo Search via Lévy flights[C]// World Congress on Nature & Biologically Inspired Computing. IEEE, 2010.

[3] Yang X S ,  Deb S . Cuckoo Search via Levy Flights[J]. mathematics, 2010.

好啦,今天的分享就结束啦。布谷鸟算法的Python源码我已经放到公众号“土博在路上”啦,感兴趣的小伙伴们关注公众号“土博在路上”,后台回复布谷鸟自行获取吧!(ps:需要MATLAB源码的话可以留言告诉我,看到后就会回复!)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • “布——咕,布——咕,布——咕......”声音仿佛能传的很远,也许是因为山林树木多面积大的原因,布谷鸟的...
    璇慧慧阅读 1,564评论 1 2
  • 概念: 定义:CuckooHash(布谷鸟散列)是为了解决哈希冲突问题而提出,利用较少的计算换取较大的空间。 特点...
    大海孤了岛阅读 16,746评论 1 7
  • “芒种”是农历的二十四个节气之一。芒种到来,农民们便开始忙碌地在田间耕种。 每年芒种前后,在农家房前屋后的大树顶上...
    花知语阅读 1,037评论 0 11
  • 一只布谷鸟,飞过山脉,飞过森林,飞了七天七夜,落到田野的一角。 她从口中吐出一颗种子,这是一颗橡树种子,一颗不像样...
    桃木梳梳阅读 296评论 0 3
  • 除了热映的《解忧杂货店》,东野圭吾的这本《布谷鸟的蛋是谁的》也是一部不错的小说。《布谷鸟的蛋是谁的》是由马杰译、2...
    简美路上阅读 1,573评论 0 2