一种基于非线性惯性权重的海鸥优化算法-附代码

一种基于非线性惯性权重的海鸥优化算法


摘要:针对海鸥算法(SOA)在求解最优化问题中的不足和算法性能依赖于参数的选取等缺点,提出一种基于惯性权重的海鸥优化算法(Inertia Seagull optimization algorithm,I-SOA),采用非线性递减的惯性权重计算附加变量A的值来调整的海鸥的位置,通过莱维飞行和随机指数值增加海鸥飞行的随机性,增强算法搜索寻优的全局能力,避免算法寻优搜索陷入局部优值;

1.海鸥优化算法

基础海鸥优化算法的具体原理参考,我的博客:

2. 改进海鸥优化算法

2.1 改进海鸥优化算法惯性权重

海鸥的迁徙行为是海鸥优化算法的一个重要 部分, 其中附加变量 A mathrm{A} A 用来控制海鸥群位置, 避 免海鸥在飞行的过程中发生个体间的碰撞, 不产生 重复的优化值, 附加变量 A mathrm{A} A 对解决优化问题以及 平衡算法有着重要作用。常用的 A mathrm{A} A 的更新方式如 下: A ( i ) = f c − i ∗ ( f c / m a x g e n ) (11) A(i)=f c-i^{*}(f c / m a x g e n) ag{11} A(i)=fc−i∗(fc/maxgen)(11)

其中, i i i 为当前迭代次数; maxgen 为最大迭代 次数; fc 为频率控制参数, 初始值设置为 2 ; 式 (11) 表示 A mathrm{A} A 的值由 2 线性递减至 0 。记海鸥优化算法为 SOA。 本文提出的非线性递减控制因子的海鸥优化 算法 (I-SOA), 该方法中 A 的值在递减的过程中 呈现一个非线性的变化趋势, 可以更好的改善全局 寻优能力, 每次迭代既能避免海鸥之间的位置冲突, 也可以更好的平衡探索与开发。该策略可以被形式 化描述,如式 (12) 所示: A ( t ) = f c − f c ∗ ( 2 ∗ ( t / T ) exp ⁡ ( h ) − ( ( t / T ) ∧ 2 ) ) (12) mathrm{A}(mathrm{t})=mathrm{fc}-mathrm{fc}^{*}left(2^{*}(mathrm{t} / mathrm{T}) exp (mathrm{h})-left((mathrm{t} / mathrm{T})^{wedge} 2 ight) ight) ag{12} A(t)=fc−fc∗(2∗(t/T)exp(h)−((t/T)∧2))(12) 其中, t mathrm{t} t 为算法当前执行迭代次数, T mathrm{T} T 是算法 执行的最大迭代次数。

2.2 莱维飞行

莱维飞行提供了一种随机游走机制来正确控 制局部搜索, 这种机制被用来进一步缓解 SOA 过 早收玫的缺点, 它是由法国数学家 Paul Levy 提出, Le ⁡ ( γ ) ≈ μ − 1 − φ μ = D ∣ G ∣ 1 / φ σ 2 = { Γ ( 1 + φ ) φ Γ ( ( 1 + φ ) / 2 ) sin ⁡ ( π φ / 2 ) 2 ( 1 + φ ) / 2 } 2 φ egin{aligned} &operatorname{Le}(gamma) approx mu^{-1-varphi} \ &mu=frac{mathrm{D}}{|mathrm{G}|^{1 / varphi}} \ &sigma^{2}=left{frac{Gamma(1+varphi)}{varphi Gamma((1+varphi) / 2)} frac{sin (pi varphi / 2)}{2^{(1+varphi) / 2}} ight}^{frac{2}{varphi}} end{aligned} Le(γ)≈μ−1−φμ=∣G∣1/φDσ2={ φΓ((1+φ)/2)Γ(1+φ)2(1+φ)/2sin(πφ/2)}φ2 其中, 0 < φ ≤ 2 , D 、 G ∼ N ( 0 , σ 2 ) , Γ ( x ) 0<varphi leq 2, mathrm{D} 、 mathrm{G} sim mathrm{N}left(0, sigma^{2} ight), Gamma(mathrm{x}) 0<φ≤2,D、G∼N(0,σ2),Γ(x) 是 Gamma 函数, μ mu μ 表示步长, φ = 2 / 3 varphi=2 / 3 φ=2/3 。 增加莱维飞行后更新的海鸥群体更新位置算法部分为: P → s ( i ) = ( D → s × x × y × z ) × Le ⁡ ( θ ) + P → g s ( i ) (16) overrightarrow{mathrm{P}}_{mathrm{s}}(mathrm{i})=left(overrightarrow{mathrm{D}}_{mathrm{s}} imes mathrm{x} imes mathrm{y} imes mathrm{z} ight) imes operatorname{Le}( heta)+overrightarrow{mathrm{P}}_{mathrm{gs}}(mathrm{i}) ag{16} P s(i)=(D s×x×y×z)×Le(θ)+P gs(i)(16)

3.实验结果

4.参考文献

[1]秦维娜,张达敏,尹德鑫,蔡朋宸.一种基于非线性惯性权重的海鸥优化算法[J/OL].小型微型计算机系统:1-8[2021-05-06].http://kns.cnki.net/kcms/detail/21.1106.TP.20210330.1445.028.html.

5.Matlab代码

6.Python代码

经验分享 程序员 微信小程序 职场和发展