混合策略改进的蝴蝶优化算法-附代码

混合策略改进的蝴蝶优化算法


摘要:针对蝴蝶优化算法存在的求解精度低、易陷入局部最优等缺陷,提出混合策略改进的蝴蝶优化算法。首先,利用Circle映射初始化蝴蝶个体的位置,增加初始个体的多样性;其次,在局部搜索阶段利用动态切换概率控制改进正弦余弦算法与蝴蝶优化算法的转换,充分利用少量的蝴蝶个体,增强算法的局部开发能力;然后,在全局和局部位置更新处引入自适应余切权重系数,控制蝴蝶个体下一代的移动方向和距离,提高算法的收敛速度和精度;最后,引入逐维变异策略,对全局最优位置变异,引导种群向最优位置进化,避免陷入局部最优。

1.蝴蝶优化算法

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

2. 改进蝴蝶优化算法

2.1 混沌映射初始化

蝴蝶优化算法是在搜索空间中随机初始化种群的位置,
但是利用这种随机化方式生成初始种群, 有可能会导致蝴蝶 个体的位置分布不均匀。考虑到混沌具有随机性、非周期性 等特点, 可以利用混沌序列对蝴蝶个体位置进行初始化。目 前存在多种不同的混沌映射 [14], 主要有 Logistic 映射、 Chebyshev 映射、Tent 映射、Circle 映射等。而利用 Circle 映 射初始化种群的方法在智能优化算法中还很少被使用, 因此 本文采用 Circle 映射初始化蝴蝶个体位置, 先利用 Circle 映 射关系将变量映射到混沌变量空间内, 然后再将产生的混沌 变量通过线性变换映射到需要优化的解空间, Circle 映射具 体表达式如下:
x i + 1 =   m o d   ( x i + 0.2 − ( 0.5 / 2 π ) sin ⁡ ( 2 π x i ) , 1 ) (6) x_{i+1}=\bmod \left(x_{i}+0.2-(0.5 / 2 \pi) \sin \left(2 \pi x_{i}\right), 1\right) \tag{6} xi+1=mod(xi+0.2(0.5/2π)sin(2πxi),1)(6)
其中, i i i 在本文中表示维度。

2.2 融合改进正弦余弦算法的局部搜索

B O A \mathrm{BOA} BOA 算法在局部搜索过程中, 由于蝴蝶个体移动的范围 较小, 容易陷入局部最优。而 S C A \mathrm{SCA} SCA 算法具有较强的全局探测 能力和局部开发能力, 因此在 BOA 算法的局部搜索阶段中 融入 SCA 算法, 可以使局部搜索过程中少量的蝴蝶个体得到 充分地利用, 并且指引蝴蝶个体向目标位置移动, 增强算法 的局部开发能力。若切换概率设为常数, 不利于平衡 S C A \mathrm{SCA} SCA 算 法和 BOA 算法的局部开发能力, 因此本文利用一个随迭代 次数自适应变化、函数范围变化较小、前期变化较慢后期变 化较快的切换概率来控制在局部搜索阶段使用哪种位置更新 方式, 在算法局部寻优的前期能够充分利用局部范围内的个 体, 在局部寻优的后期能够快速地收玫到最优个体, 切换概 率 P s P_{s} Ps 的计算公式如下:
P s = 0.01 × ( t N − i t e r ) 3 + 1 (7) P_{s}=0.01 \times\left(\frac{t}{N_{-} i t e r}\right)^{3}+1 \tag{7} Ps=0.01×(Nitert)3+1(7)
其中 t 、 N − t 、 N_{-} tNiter 分别为当前迭代代数和最大迭代次数。当 rand < P s <P_{s} <Ps 时, 算法采用正弦余弦算法进行位置更新操作, 反之, 算法采用 B O A \mathrm{BOA} BOA 算法原来的局部位置更新公式, 这里的 rand 并不是 [ 0 , 1 ] [0,1] [0,1] 之间的随机数, 其范围为 [ 1 , 1.01 ] [1,1.01] [1,1.01]
1.2 1.2 1.2 节可知, 在 SCA 算法中, 转换参数 R 1 R_{1} R1 发挥着关键 作用, 正弦与余弦的范围通过式(5)自适应的改变, 从而平衡 算法的全局搜索和局部开采。但是这种线性递减的方式使算法容易陷入局部最优, 因此提出一种非线性单调递减的凸函 数作为转换参数来更好地平衡全局搜索和局部开发。改进后 的转换参数公式如下:
R 1 = δ + b exp ⁡ ( 4 × ( t N − iter  ) 4 ) + 1 (8) R_{1}=\delta+\frac{b}{\exp \left(4 \times\left(\frac{t}{N_{-} \text {iter }}\right)^{4}\right)+1} \tag{8} R1=δ+exp(4×(Niter t)4)+1b(8)
其中 b b b 为常数, 取值为 0.1 ; δ 0.1 ; \delta 0.1;δ 为调节因子, 经过多次实验证 明, 当 δ = 0.95 \delta=0.95 δ=0.95 时, 实验结果为最优。与式 ( 5 ) (5) (5) 的线性递减方式 不同, 式(8)在算法迭代前期 R 1 R_{1} R1 下降缓慢, 可以更好地利用 B O A \mathrm{BOA} BOA 算法局部搜索阶段的蝴蝶个体; 迭代后期 R 1 R_{1} R1 下降快速, 可以指引蝴蝶个体尽快向目标值移动。改进后的正弦余弦算 法位置更新公式如下:
X i d ( t + 1 ) = { X i d ( t ) + R 1 × sin ⁡ ( R 2 ) × ∣ R 3 P ∗ d ( t ) − X j d ( t ) ∣ R 4 < 0.5 X i d ( t ) + R 1 × cos ⁡ ( R 2 ) × ∣ R 3 P ∗ d ( t ) − X j d ( t ) ∣ R 4 ≥ 0.5 (9) X_{i}^{d}(t+1)= \begin{cases}X_{i}^{d}(t)+R_{1} \times \sin \left(R_{2}\right) \times\left|R_{3} P_{*}^{d}(t)-X_{j}^{d}(t)\right| & R_{4}<0.5 \\ X_{i}^{d}(t)+R_{1} \times \cos \left(R_{2}\right) \times\left|R_{3} P_{*}^{d}(t)-X_{j}^{d}(t)\right| & R_{4} \geq 0.5\end{cases} \tag{9} Xid(t+1)={ Xid(t)+R1×sin(R2)× R3Pd(t)Xjd(t) Xid(t)+R1×cos(R2)× R3Pd(t)Xjd(t) R4<0.5R40.5(9)
其中 X j d ( t ) X_{j}^{d}(t) Xjd(t) 表示第 t t t 次迭代中在种群内部随机选择的第 j j j 个个 体在第 d d d 维上的解。

2.3 自适应权重系数

根据 BOA 算法原理可知, 蝴蝶个体利用当前位置和当 前最优个体位置/随机蝴蝶个体位置来进行位置更新, 然而, 无论是在算法的全局搜索阶段还是局部搜索阶段, 这些个体 的位置都没得到充分的利用。因此本文在 BOA 算法的全局 搜索和局部搜索阶段共同引入一种随迭代次数变化的自适应 权重 w ( t ) w(t) w(t), 使三种个体位置信息都能够得到充分地利用, 同 时控制当前蝴蝶个体的移动方向和移动距离, 从而提高算法 寻优精度和收敛速度。自适应权重 w ( t ) w(t) w(t) 的数学表达式如下:
w ( t ) = α [ cosh ⁡ ( 2 × ( 1 − 10 t N − iter  ) 4 ) − 1 ] (10) w(t)=\alpha\left[\cosh \left(2 \times\left(1-\frac{10 t}{N_{-} \text {iter }}\right)^{4}\right)-1\right] \tag{10} w(t)=α[cosh(2×(1Niter 10t)4)1](10)
其中, α ∈ [ 0 , 1 ] \alpha \in[0,1] α[0,1] 。因此, BOA 算法引入自适应权重系数后全局 搜索阶段的位置更新公式为
x i t + 1 = w ( t ) × ( x i t + ( r 2 × g ∗ − x i t ) × f i ) (11) x_{i}^{t+1}=w(t) \times\left(x_{i}^{t}+\left(r^{2} \times g^{*}-x_{i}^{t}\right) \times f_{i}\right) \tag{11} xit+1=w(t)×(xit+(r2×gxit)×fi)(11)
局部搜索阶段的位置更新为
x i t + 1 = w ( t ) × ( x i t + ( r 2 × x j t − x k t ) × f i ) (12) x_{i}^{t+1}=w(t) \times\left(x_{i}^{t}+\left(r^{2} \times x_{j}^{t}-x_{k}^{t}\right) \times f_{i}\right) \tag{12} xit+1=w(t)×(xit+(r2×xjtxkt)×fi)(12)

2.4 逐维变异策略

BOA 算法同其他智能优化算法一样存在易陷入局部最 优这一缺点, 经分析可知, 主要是由于算法没有充分利用最 优个体的引导作用, 因此本文通过对最优个体进行变异, 提 高种群多样性的同时指引种群向最优个体位置进化, 避免算 法陷入局部最优。同时为了克服在高维情况下存在的维间干 扰问题, 本文对最优个体位置采用逐维变异策略, 有效避免 各维度之间信息的互相干扰。本文引入了文献 [15]中张超提 出的 t \mathrm{t} t-分布变异算子对最优个体位置进行扰动, 该 t \mathrm{t} t-分布变 异算子的自由度参数会跟随迭代次数的变化而变化, 逐维变 异策略具体定义如下。
设搜索空间为 d d d 维, 当前最优解 g b e s t = ( g best  1 , g best  2 , ⋯   , g best  d ) g_{b e s t}=\left(g_{\text {best }}^{1}, g_{\text {best }}^{2}, \cdots, g_{\text {best }}^{d}\right) gbest=(gbest 1,gbest 2,,gbest d), 那么当前最优解逐维变异得到的新解 g new  = ( g n e w 1 , g new  2 , ⋯   , g new  d ) g_{\text {new }}=\left(g_{n e w}^{1}, g_{\text {new }}^{2}, \cdots, g_{\text {new }}^{d}\right) gnew =(gnew1,gnew 2,,gnew d) 计 算方式如下:
g new  d = g best  d + T D ( t ) d × g best  d (13) g_{\text {new }}^{d}=g_{\text {best }}^{d}+T D(t)^{d} \times g_{\text {best }}^{d} \tag{13} gnew d=gbest d+TD(t)d×gbest d(13)
其中 t t t 为当前迭代次数, T D ( t ) T D(t) TD(t) 是自由度参数为 t t t t \mathrm{t} t-分布, T D ( t ) d T D(t)^{d} TD(t)d t − \mathrm{t}- t 分布在第 d d d 维时生成的随机数。
因为无法直接判断变异后得到的新位置是否优于原位置, 所以本文利用了贪婪原则来判断是否接受新位置代替原最优 位置。通过使用贪婪原则, 引导种群更好地向最优个体位置 进化, 更好地提高算法的收敛速度。
请添加图片描述

3.实验结果

请添加图片描述

4.参考文献

[1]宁杰琼,何庆.混合策略改进的蝴蝶优化算法[J/OL].计算机应用研究:1-7[2021-04-29].https://doi.org/10.19734/j.issn.1001-3695.2020.06.0171.

5.Matlab代码

6.Python代码

猜你喜欢

转载自blog.csdn.net/u011835903/article/details/126355798