通俗易懂的布⾕鸟算法与莱维飞⾏,(附求解函数最⼩值matlab源码)
1 从布⾕鸟的育雏到布⾕鸟算法
布⾕鸟不会做窝,也不会育雏,在春末夏初,向北飞,趁别的鸟(宿主鸟)外出觅⾷时,将卵蛋产在宿主鸟窝⾥,让宿主鸟抚养⾃⼰孩⼦ 。当然,布⾕鸟在产卵前,为了不被宿主鸟发现鸟窝的异常,会把宿主的卵移⾛。⽽⼀旦靠养母孵化的雏鸟,也有将宿主鸟本⾝的雏鸟推出巢⽳的本性,并且会模仿其他鸟的⾏为来增⼤不被宿主鸟发现的概率
2009年,Xin-She Yang 与Suash Deb在《Cuckoo Search via Levy Flights》⼀⽂中提出了布⾕鸟算法(简称CS)。假设每只布⾕鸟⼀次只产⼀枚卵 ,并且宿主鸟发现外来鸟蛋后,就舍弃该鸟窝,另寻他地建造新的鸟窝 ,那么可以认为 :鸟窝=卵蛋=解,卵蛋是否能够成功被宿主鸟孵化并茁长成长是衡量解好坏的唯⼀标准 。布⾕鸟寻鸟窝下蛋的过程就是在D维空间中寻解的过程 ,⽽鸟窝的好坏象征着解的好坏。
2 布⾕鸟算法
布⾕鸟算法是布⾕鸟育雏⾏为和维飞⾏结合的⼀种算法 。
在CS算法中,有两个路径(或者说成是两个位置的更新)备受关注:
⼀个是布⾕鸟寻鸟窝下蛋的寻路径是采⽤早已就有的维飞⾏,如上图所⽰,⽆敌的⾛位是⼀种长步长与短步长相间的⾛位,这其实就是维飞⾏的主要特点,学者们也证实了⾃然界中很多鸟类的飞⾏也遵从维飞⾏,这也是最有效寻⽬标的⽅法之⼀ 。所以采⽤维飞⾏更新鸟窝位置的公式被定义如下:
, 公式(1)
其中 , 是步长缩放因⼦,是维随机路径, 就是运算
另⼀个是宿主鸟以⼀定概率Pa发现外来鸟后重新建窝的位置路径,这个路径可以⽤维飞⾏或者随机⽅式,(本⽂采⽤随机) , 除此之外,这个位置普遍采⽤偏好随机游动的⽅式,即利⽤了其他鸟窝的相似性。所以新建的鸟窝的位置的公式被定义如下:
, 公式(2)
其中, 是服从均匀分布的随机数, 是跳跃函数(x>0,=1;x<0,=0) , 是其他任意的连个鸟窝。
CS算法的执⾏过程如下:
3 维飞⾏与公式(1)的深层含义
从数学的发展史上说,早在1937年, P. Levy确定了对称Levy稳定分布的积分形式为 ,但是该积分并没有明确的解析,要⽣成⼀个服从该分布的随机数是难上加难的问题,不过当时, ,通常 。这个近似的分布呈现幂律⾏为(重尾或长尾巴),这个⾏为类似于⼆⼋原则[^6],或者说少部分⼈集中了世界⼤部分的财富,正如下图所⽰的,这个分布总是有⼀个长尾巴或者称之为重尾巴,有时也叫做⼀个翼。
维飞⾏的⽅差随时间呈现指数的关系,即,所以维飞⾏⽐布朗运动更加的出⾊。
此后,不少学者根据这个近似部分提出很多⽤于⽣成服从维分布的随机数的实现⽅法,其中就包含了Mantegna在1994年提出的⼀种⽤正太分布求解随机数的⽅法,有时也叫Mantegna⽅法,⽣成服从维分布的随机步长的⽅法如下:
其中,,
在matlab中⽤Mantegna⽅法模拟⼆维平⾯维飞⾏:
% Mantegna⽅法模拟维飞⾏
%author zhaoyuqiang
x = [0,0];
y = [0,0];
beta = 1.5;
sigma_u = (gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
normrnd函数用法sigma_v = 1;
for i=1:1000
u = normrnd(0,sigma_u);
v = normrnd(0,sigma_v);
s = u/(abs(v))^(1/beta);
x(:,1) = x(:,2);
x(:,2) = x(:,1)+1*s;
u = normrnd(0,sigma_u);
v = normrnd(0,sigma_v);
s = u/(abs(v))^(1/beta);
y(:,1) = y(:,2);
y(:,2) = y(:,1)+1*s;
plot(x,y);
hold on;
end
axis square;
从模拟上来看,图形的路径确实符合维飞⾏的长短相间的特征,Mantegna⽤正太分布实现了⽣成服从维分布随机步长的⽅法是可靠的。
时间到了2009年,Xin-She Yang 与Suash Deb提出了布⾕鸟算法,同时,Yang把Levy分布函数经过简化和傅⽴叶变换后得到其幂次形式的概率密度函数 : 。并把维飞⾏⽤在了鸟窝位置的更新上,于是产⽣了公式(1) 。这个计算式其实就是 ,就是服从Levy分布的随机步长,考虑到具体怎么计算时,Yang采⽤的正是1994年的Mantegna⽅法 。
所以在布⾕鸟算法中,我们可以⽤下⾯的具体计算公式来计算鸟窝的更新位置:
其中,,通常,
这在matlab等⼀些编程⼯具中都是可以计算的。
值得⼀提的是,是步长缩放因⼦,通常,在之后的布⾕鸟算法发展中,针对 有各种各样的变种,如Yang[^8]为了让算法适应不同的解,让,为任意不同的解 。
4 附:CS算法求解函数最⼩值代码
求函数最⼩值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。