基础麻雀算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108830958
随着仿生学的不断发展, 模拟布谷鸟巢寄生行为的 CS 算法应运而生。生物学的研究表 明: 布谷鸟利用餒育寄生的方式繁衍后代, 表现为产卵寄生于其他宿主鸟巢并在其他宿主鸟 的帮助下孵化和育雉的一种生物行为, 其繁殖行为关于选巢位置的变化正好体现出莱维飞行 的搜索特性。
CS 算法是将布谷鸟寻窝产卵和莱维飞行的搜索机制形成搜索策略。该算法约定以下 3 条 规则:1)每只布谷鸟每次只产卵一个, 并随机选择寄生巢来卿化;2)在随机选择的一组寄生 巢中, 将最好的寄生巢保留到下一代;3)约定寄生巢的数量, 且宿主鸟按一定的概率发现寄 生卵。在这 3 条规则的约束下, 宿主鸟可以将产卵抛出, 或放弃该鸟巢以建新巢。Levy (λ)(\lambda)(λ) 是 一个随机搜索路径, 其随机步长表现为一个 Levy 分布, 具体计算公式为
Levy∼u=t−λ,1<λ⩽3(6)Levy \sim u=t^{-\lambda}, \quad 1<\lambda \leqslant 3 \tag{6} Levy∼u=t−λ,1<λ⩽3(6)
布谷鸟通过莱维飞行寻窝搜索的路径和位置更新公式为
xit+1=xit+δ⊕Levy(λ)(7)x_i^{t+1}=x_i^t+\delta \oplus \operatorname{Levy}(\lambda)\tag{7} xit+1=xit+δ⊕Levy(λ)(7)
式中: xitx_i^txit 表示第 iii 个鸟窝在第 ttt 代的位置; δ\deltaδ 表示步长大小, δ>0\delta>0δ>0, 通常设置为 δ=1;⊕\delta=1 ; \oplusδ=1;⊕ 表 示点对点乘法。
在 CS 算法中, 采用莱维飞行可以产生变化多样的随机步长。在搜索过程中, 如果步长较 大, 全局搜索范围较广, 则搜索精度会降低, 易产生不稳定的震荡现状; 如果步长较小, 局部 寻优能力增强, 则搜索精度会显著增强。因此, 采用莱维飞行产生的步长具有遍历性和随机 性, 但自适应能力不够。SSA 为了弥补这一不足, 利用发现者-跟随者-警戒者的模型机制, 提 高了全局搜索能力和局部求解精度。
本文受 CS\mathrm{CS}CS 算法启发构建莱维飞行步长扰动方法, 扰动步长 SpS_pSp 的计算公式如式 (8) (11) 所示:
si=u∣v∣1/β(8)u∼N(0,δu2),v∼N(0,δv2)(9)δu={Γ(1+β)sin(πβ/2)Γ[(1+β)/2]β2(β−1)/2}1/β,δv=1(10)Sp=τsixbest j(11)\begin{aligned} s_i &=\frac{u}{|v|^{1 / \beta}} &(8)\\ u & \sim N\left(0, \delta_u^2\right), \quad v \sim N\left(0, \delta_v^2\right) &(9)\\ \delta_u &=\left\{\frac{\Gamma(1+\beta) \sin (\pi \beta / 2)}{\Gamma[(1+\beta) / 2] \beta 2^{(\beta-1) / 2}}\right\}^{1 / \beta}, \quad \delta_v=1 &(10)\\ S_p &=\tau s_i x_{\text {best }}^j&(11) \end{aligned} siuδuSp=∣v∣1/βu∼N(0,δu2),v∼N(0,δv2)={Γ[(1+β)/2]β2(β−1)/2Γ(1+β)sin(πβ/2)}1/β,δv=1=τsixbest j(8)(9)(10)(11)
式中: i∈{1,2,⋯,n},j∈{1,2,⋯,D},ui \in\{1,2, \cdots, n\}, j \in\{1,2, \cdots, D\}, ui∈{1,2,⋯,n},j∈{1,2,⋯,D},u 和 vvv 属于正态分布, β=1.5\beta=1.5β=1.5 。麻雀搜索位置步长 扰动定义为
vi,j=vi,jSp(12)v_{i, j}=v_{i, j} S_p \tag{12} vi,j=vi,jSp(12)
本文对传统的 SSA 进行了初始化搜索策略的改进。根据 Sin 混沌模型初始化种群分布, 增加种群搜索的多样性, 则产生不同数值的混沌序列可以定义为
xn+1=sin(2xn)(13)x_{n+1}=\sin \left(\frac{2}{x_n}\right) \tag{13} xn+1=sin(xn2)(13)
式中: xn∈[−1,1]x_n \in[-1,1]xn∈[−1,1] 且 xn≠0,n=0,1,⋯,Nx_n \neq 0, n=0,1, \cdots, Nxn=0,n=0,1,⋯,N 。
LSSA 的伪代码算法步骤如下:
步骤 1 参数设置
设置麻雀种群规模数 nnn 、麻雀发现者数量 PdP_dPd 、警戒者数量 SdS_dSd 、寻食步数计数器 ttt 为 0 、最 大寻食迭代次数为 TmaxT_{\max }Tmax 。
步骤 2 初始化种群
在搜索区域内按式 (13) 产生 nnn 个向量 Xi(i=1,2,⋯,n)X_i(i=1,2, \cdots, n)Xi(i=1,2,⋯,n), 计算适应度值并记录适应度 值的最佳和最差个体位置。
步骤 3 发现者搜索
根据式 (3) 搜索更新发现者位置。
步骤 4 加入者搜索
根据式 (4) 搜索更新加入者位置。
步骤 5 檠戒者搜索
根据式 (5) 搜索更新警戒者位置。
步骤 6 根据适应度值更新位置
比较 yminy_{\min }ymin 与 GminG_{\min }Gmin, 若 ymin⩽Gminy_{\min } \leqslant G_{\min }ymin⩽Gmin, 则令 Gmin=ymin,Xg(t)=Xg′(t)G_{\min }=y_{\min }, X_g(t)=X_g^{\prime}(t)Gmin=ymin,Xg(t)=Xg′(t), 记录当前所有麻 雀找到的最优位置, 即全局最优解 s∗s^*s∗ 。
步骤 7 莱维飞行机制
随机生成一个数 rrr, 设置概率 pip_ipi, 如果 r
[1]马卫,朱娴.基于莱维飞行扰动策略的麻雀搜索算法[J].应用科学学报,2022,40(01):116-130.