布谷鸟搜索算法

布谷鸟搜索算法

布谷鸟搜索算法(Cuckoo Search Optimization,CS)是一种模拟布谷鸟孵化行为的群智能优化算法,由Yang Xin She和Suash Deb于2009年提出。CS算法利用莱维飞行进行全局搜索,具有良好的全局寻优能力。

算法原理

布谷鸟算法以寄生巢位置表示问题的可行解,通过莱维飞行和随机选择两种寄生策略对寄生巢位置进行更新,改良种群,搜索问题的最优解。CS算法与优化问题的对应关系如下表所示。

CS优化问题
鸟巢位置可行解: X i = ( x i 1 , x i 2 , … , x i D ) X_i=(x_{i1},x_{i2},\dots,x_{iD}) Xi=(xi1,xi2,,xiD)
位置优劣适应度

算法假设条件如下:

  • 每只布谷鸟只产一次卵,并随机选择一个位置的鸟巢进行孵化。
  • 在随机选择的鸟巢中,优质的鸟巢将会被保留到下一代。
  • 可利用的鸟巢数量固定,鸟巢主人发现外来鸟蛋的概率为 p a ∈ [ 0 , 1 ] p_a \in [0,1] pa[0,1]。当鸟巢主人发现外来的布谷鸟蛋时,它会将布谷鸟蛋丢弃或者重新建立新的鸟巢。

算法超参数

  • α \alpha α:步长因子,通常取值为1;
  • p a p_a pa:布谷鸟蛋被宿主鸟发现的概率;
  • NP:种群大小;
  • Gmax:最大迭代数。

莱维飞行

莱维飞行是一种步长服从莱维分布的随机游走过程,由高频率的短距离飞行和低频率的长距离飞行组成。算法搜索前期,大步长有利于增加种群多样性,扩大搜索范围,增强算法的全局搜索能力,有利于搜索到全局最优;算法搜索后期,小步长缩小搜索范围,增强算法的局部开发能力,有利于算法收敛。

位置更新公式
X i t + 1 = X i t + α × L ( s , λ ) (1) X_{i}^{t+1}=X_{i}^t + \alpha \times L(s,\lambda) \tag{1} Xit+1=Xit+α×L(s,λ)(1)
其中莱维飞行步长公式为
L ( s , λ ) = λ Γ ( λ ) s i n ( π λ / 2 ) π 1 s 1 + λ (2) L(s,\lambda)=\frac{\lambda \Gamma(\lambda)sin(\pi\lambda/2)}{\pi}\frac{1}{s^{1+\lambda}} \tag{2} L(s,λ)=πλΓ(λ)sin(πλ/2)s1+λ1(2)
莱维飞行代码

from math import gamma
beta = 1.5
n = 2
num = gamma(1+beta)*np.sin(np.pi*beta/2)
den = gamma((1+beta)/2)*beta*(2**((beta-1)/2))
sigmau = (num/den)**(1/beta)
sigmav = 1
u = np.random.normal(0, sigmau, n)
v = np.random.normal(0, sigmav, n)
S = u/(np.abs(v)**(1/beta))

莱维飞行路线图

初始化

初始解应当覆盖整个搜索空间,一般采用均匀分布随机生成初始解。
x i j 0 = x i , j m i n + r a n d ( 0 , 1 ) ⋅ ( x i , j m a x − x i , j m i n ) (3) x_{ij}^0=x_{i,j}^{min}+rand(0,1) \cdot (x_{i,j}^{max} - x_{i,j}^{min}) \tag{3} xij0=xi,jmin+rand(0,1)(xi,jmaxxi,jmin)(3)
其中,rand(0,1)表示0-1之间的随机数, x i j m a x x_{ij}^{max} xijmax x i j m i n x_{ij}^{min} xijmin分别表示该问题第j个维度变量的上下界。

伪代码


输入:超参数 ( α , p a , N P , G m a x ) (\alpha,p_a,NP,Gmax) (α,pa,NP,Gmax)和搜索边界 X m i n X_{min} Xmin, X m a x X_{max} Xmax
输出:最优解
1:初始化
2:根据式(3)初始化位置种群X
3:记录群体最优gbest
4:优化搜索
5:For G = 1:Gmax
6: \qquad 按照式(1)更新鸟巢位置
7: \qquad 生成随机数r与 p a p_a pa比较,决定是否对鸟巢位置进行随机更新
8: \qquad 新鸟巢位置与原鸟巢位置采取最优保留策略,以保持种群大小不变
9: \qquad 更新群体最优 g b e s t gbest gbest
10:End


注:优化算法并不保证能够得到问题的最优解,因此,算法输出的最优解并非问题的整体最优解,而是搜索过程中最好的一个解。

实验

实验选取二维的平方和函数,函数的最小值在点(a,b)取得,最小值为0。
f ( x 1 , x 2 ) = ( x 1 − a ) 2 + ( x 2 − b ) 2 (4) f(x_1,x_2) = (x_1 - a)^2 + (x_2-b)^2 \tag{4} f(x1,x2)=(x1a)2+(x2b)2(4)

实验参数如下:

参数
问题维度D2
种群数NP30
最大进化次数Gmax50
α \alpha α1
p a p_a pa0.25
取值范围(-100,100)

CS算法搜索过程

相对而言,CS算法群体收敛较慢,一定程度上增大了种群的多样性。
CS算法收敛曲线

最优值最差值平均值标准差
0.208e-27.6580.4231.402

代码获取

关注微信公众号数学模型与算法回复 CS算法获取python代码

参考文献

[1] Yang X S, Deb S. Cuckoo search: recent advances and applications[J]. Neural Computing and applications, 2014, 24: 169-174.
[2] 张晓凤, 王秀英. 布谷鸟搜索算法综述[J]. 计算机工程与应用, 2018, 54(18): 8-16.

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值