基于混沌的正余弦鲸鱼优化算法-附代码

基于混沌的正余弦鲸鱼优化算法


摘要: 为了改善鲸鱼优化算法( WOA) 的不足,如容易陷入局部最优,收敛速度慢等问题,本文提出了改进鲸鱼优化算法。首先,通过混沌 Tent 映射随机生成算法的初始种群位置,让种群分布更均匀,加快算法的收敛速度; 其次,将正余弦算法与鲸鱼优化算法融合,对领导者位置进行筛选,一定程度上避免了算法容易早熟的缺陷; 最后,提出自适应策略,保留了鲸鱼优化算法优越性的同时,加入惯性权重,以平衡算法全局探测和局部寻优的能力。

1.鲸鱼优化算法

基础鲸鱼算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107559167

2. 改进鲸鱼优化算法

2.1 混沌初始化种群和参数优化

Tent 映射初始化种群位置的时候, 算法寻到的 最优解和收敛速度明显比其他混沌映射要好, 同时 也证明了鱼京鱼优化算法对 Tent 映射的每感度更 高 [7]。因此, 本文通过式(9), 采用 Tent 映射的方式 来生成分布更加均匀的混沌序列, 提高了算法的寻优性能。
x i + 1 = { 2 x i , x i < 0.5 2 ( 1 − x i ) . x i ⩾ 0.5 (9) x_{i+1}=\left\{\begin{array}{cc} 2 x_{i}, & x_{i}<0.5 \\ 2\left(1-x_{i}\right) . & x_{i} \geqslant 0.5 \end{array}\right. \tag{9} xi+1={ 2xi,2(1xi).xi<0.5xi0.5(9)

2.2 正余弦鲸鱼优化算法

正余弦算法( Sine cosine algorithm, SCA) 是近 年来提出的一种新的全局优化算法, 有别于其他受 生物启发机理的群体智能优化算法, 其结简单、鲁棒 性好、容易实现, 主要利用正弦函数和余弦函数的数 学性质, 通过迭代达到寻找最优解的目的。在 SCA 中, 假设第 t t t 代种群中个体 X i t = ( x i 1 t , x i 2 t , ⋯   , x i D t ) X_{i}^{t}=\left(x_{i 1}^{t}, x_{i 2}^{t}, \cdots, x_{i D}^{t}\right) Xit=(xi1t,xi2t,,xiDt), 其 中, i = 1 , 2 , ⋯   , N , N i=1,2, \cdots, N, N i=1,2,,N,N 为种群大小, D D D 为个体维度。算 法在空间中随机生成 N N N 个种群的位置, 计算每个个 体的适应度值, 通过对适应度值排序存优, 保存最优 位置及其对应的适应度值, 个体更新位置方式为 ( 10 ) ) ) :
X d i ( t + 1 ) = { X d i ( t ) + a × sin ⁡ ( r 3 ) × ∣ r 4 X ∗ − X d i ( t ) ∣ , r 5 < 0.5 X d i ( t ) + a × cos ⁡ ( r 3 ) × ∣ r 4 X ∗ − X d i ( t ) ∣ . r 5 ⩾ 0.5 (10) \begin{aligned} &X_{d}^{i}(t+1)= &\left\{\begin{array}{l} X_{d}^{i}(t)+a \times \sin \left(r_{3}\right) \times\left|r_{4} X^{*}-X_{d}^{i}(t)\right|, r_{5}<0.5 \\ X_{d}^{i}(t)+a \times \cos \left(r_{3}\right) \times\left|r_{4} X^{*}-X_{d}^{i}(t)\right| . r_{5} \geqslant 0.5 \end{array}\right. \end{aligned} \tag{10} Xdi(t+1)={ Xdi(t)+a×sin(r3)× r4XXdi(t) ,r5<0.5Xdi(t)+a×cos(r3)× r4XXdi(t) .r50.5(10)
其中, X d i X_{d}{ }^{i} Xdi 是第 i i i 个个体第 t t t 代第 d d d 维的位置分 量; X ∗ X^{*} X 是当前最优位置; 参数 a a a 控制搜索方向, 变化 方式同式 (4), r 3 r_{3} r3 [ 0 , 2 π ] [0,2 \pi] [0,2π] 上的随机数, 用来控制 算法的搜索距离; r 4 r_{4} r4 [ 0 , 2 ] [0,2] [0,2] 上的随机数; r 5 r_{5} r5 [ 0 [0 [0, 1] 上的随机数, 决定第 t + 1 t+1 t+1 代的位置更新方式是正 弦方式还是余弦方式。

考虑到在鲸鱼优化算法中,每次迭代时将适应度值最好的位置赋值给鲸鱼群领导者,这样的方式导致算法容易陷入局部最优区域,往往导致寻优精度较低。而在 SCA 中,算法可以随机选取正余弦交叉寻优,使得二者位置更新方式相互补充,更好的协调全局探索和局部开发,使 SCA 逐步收缩并徘徊在目标解附近。因此,在本文所提的正余弦鲸鱼优化算法中,经过排序存优的领导者不是直接进行下一次迭代过程,而是记录当前领导者位置,同时对种群中每个个体的位置根据式( 10) 进行正弦( 余弦) 位置更新,再计算每个个体的适应度值,通过比较适应度䇞选出一个新的领导者位置, 最后引入贪婪机制, 比较正余弦操作之前的领导者和新的领导者之间的 适应度值大小, 更新全局最优位置, 再进入到下一次 的迭代过程。值得注意的是, 对于在 SCA 中出现的 随机参数 r 3 、 r 4 、 r 5 r_{3} 、 r_{4} 、 r_{5} r3r4r5, 本文都通过 Tent 混沌映射产生, 一定程度上加快了算法的收敛速度。

2.3 混沌自适应的惯性权重

在当前大多数群智能优化算法中,权重对算法的全局探索和局部开发能力的平衡扮演着重要的角色。重反映的是后一个追随者摆脱前一个位置束缚的能力,通常较大的惯性权重能够让算法具有较好的全局探索能力,而较小的惯性权重会使算法具有较好的局部开发能力。在算法迭代早期应使用较大的权重,让算法以较大步伐快速到达目标值附近; 而在迭代后期,应使用较小的权重,让鲸鱼较小的步伐移动,以便在目标解的附近精确搜索,更好的局部寻优。标准 WOA 算法在搜索包围和位置更新时,权重是定值,受 PSO 的启发,本文提出一种基于混沌自适应的惯性权重为式( 11) :
ω = ω s + ( ω e − ω s ) × log ⁡ 10 ( 1 + 10 t T max ⁡ ) . \omega=\omega_{s}+\left(\omega_{e}-\omega_{s}\right) \times \log _{10}\left(1+\frac{10 t}{T_{\max }}\right) . ω=ωs+(ωeωs)×log10(1+Tmax10t).
其中, T max ⁡ T_{\max } Tmax 表示最大迭代次数; ω s \omega_{\mathrm{s}} ωs 表示惯性权 重初始值; ω e \omega_{e} ωe 是最大迭代次数的惯性权重。实验表 明, 当 ω \omega ω [ 0.4 , 0.9 ] [0.4,0.9] [0.4,0.9] 之间变化时, 算法具有较好的 寻优性能。随着迭代的变化, 将惯性权重从 0.9 0.9 0.9 非 线性递减至 0.4 0.4 0.4, 实现了权重的动态变化, 使算法的 全局搜索和局部开发得到较好的平衡, 一定程度上 也增加了算法跳出局部最优区域的概率。考虑到搜 索猎物阶段选取的随机鲸鱼位置向量, 本文 EWOA 位置更新为公式 ( 12 ) ∼ ( 14 ) (12) \sim(14) (12)(14) :
X ( t + 1 ) = ω ⋅ X ∗ ( t ) − A ⋅ D , ∣ A ∣ < 1 , p Tent  < 0.5 (12) X(t+1)=\omega \cdot X^{*}(t)-A \cdot D,|A|<1, p^{\text {Tent }}<0.5 \tag{12} X(t+1)=ωX(t)AD,A<1,pTent <0.5(12)

X ( t + 1 ) = ω ⋅ X rand  − A ⋅ D rand  , ∣ A ∣ ⩾ 1 , p Tent  < 0.5 (13) X(t+1)=\omega \cdot X_{\text {rand }}-A \cdot D_{\text {rand }},|A| \geqslant 1, p^{\text {Tent }}<0.5 \tag{13} X(t+1)=ωXrand ADrand ,A1,pTent <0.5(13)

X ( t + 1 ) = D ′ ⋅ e b l ⋅ cos ⁡ ( 2 π l ) + ω X ∗ ( t ) ⋅ p Tent  ⩾ 0.5 (14) X(t+1)=D^{\prime} \cdot e^{b l} \cdot \cos (2 \pi l)+\omega X^{*}(t) \cdot p^{\text {Tent }} \geqslant 0.5 \tag{14} X(t+1)=Deblcos(2πl)+ωX(t)pTent 0.5(14)

请添加图片描述

3.实验结果

请添加图片描述

4.参考文献

[1]林杰,何庆,王茜,杨荣莹,宁杰琼.基于混沌的正余弦鲸鱼优化算法[J].智能计算机与应用,2020,10(09):43-48+52.

5.Matlab代码

6.Python代码

猜你喜欢

转载自blog.csdn.net/u011835903/article/details/125832200
今日推荐