多方向螺旋搜索的混沌海鸥优化算法-附代码

多方向螺旋搜索的混沌海鸥优化算法


摘要:针对海鸥优化算法(SOA)寻优路径单一、寻优精度较低、易陷入局部最优等问题,提出新的多方向螺旋搜索的混沌海鸥优化算法(Multi-directional Exploring Seagull Optimization Algorithm Based On Chaotic Map MESOA)。首先,利用混沌序列对海鸥种群进行初始化,令海鸥个体分布更加均匀,能够更加准确地接近目标;其次,让海鸥选择不同方向的螺旋飞行路径,使海鸥飞行路径不再单一,增加算法多样性;最后,根据算法收敛情况进行围绕目标的小范围搜索,避免算法过早收敛,提高算法跳出局部最优的能力。

1.海鸥优化算法

基础海鸥优化算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107535864

2. 改进海鸥优化算法

2.1 Kent映射初始化

原本的海鸥优化算法初始化是在上下界内随机生成海 鸥个体的位置, 这样的初始化可能会使海鸥在空间中位置分 布得不均匀, 导致算法早熟, 陷入局部最优解。为了解决这 一问题,本文提出基于 Kent 混沌序列的初始化形式。
由于混沌映射的随机性、遍历性等性质, 可将其用于群 智能算法种群的初始化中。其原理是利用混沌映射产生的在 [0,1]之间的序列, 再根据混沌因子对海鸥种群进行初始化。 这样可以控制海鸥在最初的分布更加合理, 避免早熟。Kent 映射的数学模型由式 (11) 给出:
x n + 1 = { x n a 0 < x n ≤ a 1 − x n ( 1 − a ) a < x n < 1 (11) \begin{aligned} &x_{n+1}= &\left\{\begin{array}{lr} \frac{x_n}{a} & 0<x_n \leq a \\ \frac{1-x_n}{(1-a)} & a<x_n<1 \end{array}\right. \end{aligned}\tag{11} xn+1={ axn(1a)1xn0<xnaa<xn<1(11)
a = 0.5 a=0.5 a=0.5 时, 系统会呈现短周期状态, 故本文中 a a a 的取 值范围是 (0.01,0.5)。利用混沌映射初始化的模型由式 (12) 给出。
x = x min ⁡ + Chaos ⁡ ∗ ( x max ⁡ − x min ⁡ ) (12) x=x_{\min }+\operatorname{Chaos} *\left(x_{\max }-x_{\min }\right) \tag{12} x=xmin+Chaos(xmaxxmin)(12)
其中, x min ⁡ x_{\min } xmin x max ⁡ x_{\max } xmax 分别代表自变量取值的下限和上限。 Chaos为Kent 映射函数产生的混沌因子。

2.2 多方向螺旋飞行路径

在初始的海鸥算法中, 攻击阶段的位置更新方式如按照 公式(6)所示。从式中可以看出, 海鸥在经过迁移过后, 基 于迁移过后的位置依照给定的行动模型寻找攻击位置。由于 行动模型单一化, 海鸥移动时存在飞行死角, 导致有可能错 过最优位置。即搜索过程中找不到最优值, 只能找到局部最 优值的情况。为解决这一问题, 本文提出以下这种新的海鸥 攻击位置更新方式。
P s ( t ) = { T s ( t ) ∗ x ∗ y ∗ z + P b s ( t ) r 1 < a ( T s ( t ) + x + y + z ) ∗ P b s ( t ) r 1 ≥ a (13) P_s(t)=\left\{\begin{array}{cc} T_s(t) * x * y * z+P_{b s}(t) & r 1<a \\ \left(T_s(t)+x+y+z\right) * P_{b s}(t) & r 1 \geq a \end{array}\right. \tag{13} Ps(t)={ Ts(t)xyz+Pbs(t)(Ts(t)+x+y+z)Pbs(t)r1<ar1a(13)
其中 r 1 r 1 r1 是在 ( 0 , 1 ) (0,1) (0,1) 之间的随机数, a a a 为海鸥选择更新方 式的阈值, 在多次实验之后得出取值为 0.8 0.8 0.8 最为合适, 此时 T s ( t ) T_s(t) Ts(t) 为适应多方向螺旋的海鸥迁移位置, 如式 (14) 所示。
T s ( t ) = C s ( t ) + M s ( t ) (14) T_s(t)=C_s(t)+M_s(t) \tag{14} Ts(t)=Cs(t)+Ms(t)(14)
P b s ( t ) 、 C s ( t ) 、 M s ( t ) P_{b s}(t) 、 C_s(t) 、 M_s(t) Pbs(t)Cs(t)Ms(t) 含义已在海鸥优化算法中介绍 过。经过改进的位置更新方式让海鸥根据阈值选择攻击方式, 两种不同的攻击方式使海鸥的飞行轨迹不再单一, 能够搜索 更多的区域。两种不同攻击方式交替进行, 缩小了海鸥飞行 死角, 减少了飞行斍区。以不同的方式, 可以得到不一样的 结果, 即以不同的角度更新最优值, 增加了算法的多样性。

2.3 根据收敛情况进行小范围搜索

基于原始的海鸥算法存在易陷入局部最优值这一问题, 本文提出一种新的位置更新机制。在每次迭代时计算种群中 海鸥适应度的方差, 根据方差的大小来判断是否围绕目标位 置进行小范围的搜索。具体数学表达如式(15)和(16)所 示。
δ = ∑ i n ( ( P s ( i ) − P a v g P b s − P l s ) ∧ 2 ) (15) \delta=\sum_i^n\left(\left(\frac{P_s(i)-P_{a v g}}{P_{b s}-P_{l s}}\right)^{\wedge} 2\right) \tag{15} δ=in((PbsPlsPs(i)Pavg)2)(15)
其中 δ \delta δ 表示方差, n \mathrm{n} n 为海鸥的种群数量, P S ( i ) P_S(i) PS(i) 为第 i \mathrm{i} i 个 海鸥种群的适应度, P a v g P_{a v g} Pavg 为海鸥种群的平均适应度, P b s P_{b s} Pbs 为种 群中的最优适应度, P l s P_{l s} Pls 为种群的最差适应度。
δ < b \delta<b δ<b 时, 为了避免算法过快收敛, 新的位置更新公 式如式 (11):
P s ( t ) = P s ( t − 1 ) ∗ ( 1 + sin ⁡ ( R ) ) (16) P_s(t)=P_s(t-1) *(1+\sin (\mathrm{R})) \tag{16} Ps(t)=Ps(t1)(1+sin(R))(16)
其中 P s ( t − 1 ) P_s(t-1) Ps(t1) 表示上一次迭代时的位置, R \mathrm{R} R 为在 ( − 2 , 2 ) (-2,2) (2,2) 区间内服从正态分布的随机数。

请添加图片描述

3.实验结果

请添加图片描述

4.参考文献

[1]张冰洁,何庆,戴松利,杜逆索.多方向螺旋搜索的混沌海鸥优化算法[J/OL].小型微型计算机系统:1-10[2022-01-18].http://kns.cnki.net/kcms/detail/21.1106.TP.20211213.1750.028.html.

5.Matlab代码

6.python代码

猜你喜欢

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