布谷鸟算法是将布谷鸟育雏行为与Levy飞行算法相结合的一种算法。
在布谷鸟算法中,有两个算法或者说两个位置更新是关键:
第一个是布谷鸟寻找最优解时的算法:
一个是布谷鸟寻找鸟窝下蛋的寻找路径是采用早已就有的萊维飞行3,如上图所示,无敌的走位是一种长步长与短步长相间的走位,这其实就是萊维飞行的主要特点,学者们也证实了自然界中很多鸟类的飞行也遵从萊维飞行,这也是最有效寻找目标的方法之一 。所以采用萊维飞行更新鸟窝位置的公式被定义如下:
其中 , α是步长缩放因子,Levy(β)是萊维随机路径,⨂ 就是.∗.∗运算
第二个是发现新巢的位置更新
宿主鸟以一定概率Pa发现外来鸟后重新建窝的位置路径,这个路径可以用萊维飞行或者随机方式4,(本文采用随机) , 除此之外,这个位置普遍采用偏好随机游动的方式,即利用了其他鸟窝的相似性。所以新建的鸟窝的位置的公式被定义如下:
其中,r,
是服从均匀分布的随机数,Heaviside(x) 是跳跃函数(x>0,=1;x<0,=0) ,
,
是其他任意的两个鸟窝。
布谷鸟算法的流程图:
举一个例子:
为了使大家容易理解,我还是用y=(x-0.5)^2+1来举例子,例如我们有4个布谷鸟蛋(也就是4个x坐标),鸟妈妈发现不是自己的宝宝的概率是0.25,我们x的取值范围是[0,1]之间,于是我们就可以开始计算了。
目标:求x在[0,1]之内的函数y=(x-0.5)^2+1最小值
(1)初始化x的位置,随机生成4个x坐标,x1=0.4,x2=0.6,x3=0.8,x4=0.3 ——> X=[0.4, 0.6 ,0.8, 0.3]
(2)求出y1~y4,把x1~x4带入函数,求得Y=[1,31, 1.46, 1.69, 1.265],并选取当前最小值ymin= y4=1.265
(3)开始定出一个y的最大值为Y_global=INF(无穷大),然后与ymin比较,把Y中最小的位置和值保留,例如Y_global=INF>ymin=1.265,所以令Y_global=1.265
(4)记录Y_global的位置,(0.3,1.265)。
(5)按概率0.25,随机地把X中的值过塞子,选出被发现的蛋。例如第二个蛋被发现x2=0.6,那么他就要随机地变换位子,生成一个随机数,例如0.02,然后把x2=x2+0.02=0.62,之后求出y2=1.4794。那么X就变为了X=[0.4, 0.62 ,0.8, 0.3],Y=[1,31, 1.4794, 1.69, 1.265]。
(6)进行莱维飞行,这名字听起来挺高大上,说白了,就是把X的位置给随机地改变了。怎么变?有一个公式
。
获得x1=0.3985
之后同理计算:
x2=0.6172
x3=0.7889
x4=0.3030
(7)更新矩阵X,X=[0.3985, 0.6172, 0.7889, 0.3030]
(8)计算Y=[1.3092, 1.4766, 1.6751, 1.2661],并选取当前最小值ymin= y4=1.2661,然后与ymin比较,把Y中最小的位置和值保留,例如Y_global=1.265<ymin=1.2661,所以令Y_global=1.265
(9)返回步骤(5)用更新的X去循环执行,经过多次计算即可获得y的最优值和的最值位置(x,y)