全局优化的蝴蝶优化算法-附代码

全局优化的蝴蝶优化算法


摘要:针对基本蝴蝶优化算法中存在的易陷入局部最优值、收敛速度慢等问题,提出一种全局优化的蝴蝶算法,引入limit阈值来限定蝴蝶优化算法陷入局部最优解的次数,从而改变算法易陷入早熟的问题,结合单纯形策略优化迭代后期位置较差的蝴蝶使种群能够较快地找到全局最优解;将正弦余弦算法作为局部算子融入BOA中,改善迭代后期种群多样性下降的缺陷,加快算法跳出局部最优。

1.蝴蝶优化算法

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

2. 改进蝴蝶优化算法

2.1 limit 阈值

本文参考人工蜂群算法 [ 13 ] { }^{[13]} [13] 中侦察蜂阶段引入了观察可行 解的停滞次数 limit 阈值从而跳出局部最优, 较快地寻得全局 最优解的思想, 引入 limit 阈值来克服算法易陷入局部最优问 题。limit 阈值机制是在预先设定极限值 (limit) 的条件下,通过 观察可行解的停滞次数是否达到 limit 值来进行循环迭代, 若 在 limit 代中某个个体的位置没有改变, 则抛育当前解, 重新生 成下一个解进行下一代的进化。
通过分析基本 BOA 可知, 随着算法迭代次数的增加, 蝴蝶 个体将逐渐向适应度较优的个体飞行从而使得种群分布缩小, 种群的多样性呈现下降趋势, 导致算法陷入局部最优。因此引 入 limit 阈值来限定蝴蝶优化算法陷入局部最优解的次数, 从 而改变算法易陷入早熟的问题。阈值 limit 的取值会影响算法 寻优能力, 若取值过大则对算法改进甚微; 反之, 取值过小则会 导致算法的局部开发能力被减弱, 且算法更新频繁。通过多次 测试, 本文将阈值 limit 设定为 60 时效果比较好。

2.2 单纯形法

具体过程如下:
a) 评价蝴蝶种群中所有个体, 从中选出最优的蝴蝶 x g x_{g} xg 和 次优的蝴蝶 x b x_{b} xb, 设 x s x_{s} xs 是要被抛弃的蝴蝶, x g 、 x b x_{g} 、 x_{b} xgxb x s x_{s} xs 的适应度 值分别是 f ( x g ) , f ( x b ) f\left(x_{g}\right), f\left(x_{b}\right) f(xg),f(xb) f ( x s ) f\left(x_{s}\right) f(xs)
b) 计算出 x g x_{g} xg x b x_{b} xb 的中点, 记为 x c x_{c} xc
x c = x g + x b 2 x_{c}=\frac{x_{g}+x_{b}}{2} xc=2xg+xb
c) 执行反射操作。
x r = x c + a ( x c − x s ) x_{r}=x_{c}+a\left(x_{c}-x_{s}\right) xr=xc+a(xcxs)
其中: x r x_{r} xr 是根据 x s x_{s} xs 得到的反射点; a a a 是反射系数, 通常取 1 。
d) 若 f ( x g ) > f ( x r ) f\left(x_{g}\right)>f\left(x_{r}\right) f(xg)>f(xr), 则进行扩张操作, 得到扩张点 x e x_{e} xe
x e = x c + γ ( x r − x c ) x_{e}=x_{c}+\gamma\left(x_{r}-x_{c}\right) xe=xc+γ(xrxc)
其中:扩张系数 γ = 2 \gamma=2 γ=2 。若 f ( x e ) < f ( x g ) f\left(x_{e}\right)<f\left(x_{g}\right) f(xe)<f(xg), 就用 x e x_{e} xe 替换 x s x_{s} xs, 否则 用 x r x_{r} xr 替换 x s x_{s} xs
e) 若 f ( x r ) > f ( x s ) f\left(x_{r}\right)>f\left(x_{s}\right) f(xr)>f(xs), 进行压缩操作, 得到压缩点 x t x_{t} xt
x t = x c + β ( x s − x c ) x_{t}=x_{c}+\beta\left(x_{s}-x_{c}\right) xt=xc+β(xsxc)
其中: β = 0.5 \beta=0.5 β=0.5 。若 f ( x t ) < f ( x s ) f\left(x_{t}\right)<f\left(x_{s}\right) f(xt)<f(xs), 则用压缩点 x t x_{t} xt 替换 x s x_{s} xs
f) 若 f ( x s ) > f ( x r ) > f ( x g ) f\left(x_{s}\right)>f\left(x_{r}\right)>f\left(x_{g}\right) f(xs)>f(xr)>f(xg), 进行收缩。
x w = x c + β ( x s − x c ) x_{w}=x_{c}+\beta\left(x_{s}-x_{c}\right) xw=xc+β(xsxc)
其中: x w x_{w} xw 是收缩点; 收缩系数 β = 0.5 ; f ( x w ) < f ( x s ) \beta=0.5 ; f\left(x_{w}\right)<f\left(x_{s}\right) β=0.5;f(xw)<f(xs) 则用 x w x_{w} xw 替 换 x s x_{s} xs, 否则用 x r x_{r} xr 替换 x s x_{s} xs

2.3正弦余弦指引机制

本文引入正弦与余弦算法 [ 16 ] { }^{[16]} [16], 在算法的迭代后期, 让所有 的蝴蝶个体进行正弦余弦操作, 来优化蝴蝶个体进行位置更 新。具体的操作方式为
x i t + 1 = { x i t + R 1 × sin ⁡ ( R 2 ) × ∣ R 3 × M i t − x i t ∣ R 4 ⩽ 0.5 x i t + R 1 × cos ⁡ ( R 2 ) × ∣ R 3 × M i t − x i t ∣ R 4 > 0.5 \boldsymbol{x}_{i}^{t+1}= \begin{cases}\boldsymbol{x}_{i}^{t}+R_{1} \times \sin \left(R_{2}\right) \times\left|R_{3} \times M_{i}^{t}-\boldsymbol{x}_{i}^{t}\right| & R_{4} \leqslant 0.5 \\ \boldsymbol{x}_{i}^{t}+R_{1} \times \cos \left(R_{2}\right) \times\left|R_{3} \times M_{i}^{t}-\boldsymbol{x}_{i}^{t}\right| & R_{4}>0.5\end{cases} xit+1={ xit+R1×sin(R2)×R3×Mitxitxit+R1×cos(R2)×R3×MitxitR40.5R4>0.5
其中含有四个参数 R 1 、 R 2 、 R 3 、 R 4 , R 1 R_{1} 、 R_{2} 、 R_{3} 、 R_{4}, R_{1} R1R2R3R4,R1 决定在下一次迭代第 i i i 个 个体的位置更新方向, R 1 R_{1} R1 的范围影响着搜索空间的范围, R 1 = R_{1}= R1= a − T × a T max ⁡ a-T \times \frac{a}{T_{\max }} aT×Tmaxa, 迭代次数的变化会缩小蝴蝶个体的搜索范围, 有 效地保证了算法的收敛性, 使其最终收敛到一个最优值, a a a 是 一个常数, 本文中 a = 2 ; R 2 a=2 ; R_{2} a=2;R2 [ 0 , 2 π ] [0,2 \pi] [0,2π] 的随机数, 它决定下一次 迭代中个体的移动距离; R 3 R_{3} R3 是随机权重, 取值为 [ 0 , 2 ] , R 3 > 1 [0,2], R_{3}>1 [0,2],R3>1 时, M i t M_{i}^{t} Mit 对下一代迭代中个体的位置更新具有明显的影响, 否则 没有影响效果; R 4 R_{4} R4 [ 0 , 1 ] [0,1] [0,1] 产生的一个随机数, R 4 R_{4} R4 决定蝴蝶个 体的位置更新方式是正弦还是余弦操作。
在蝴蝶进行局部寻优时, 引入正弦余弦算法进行个体位置 更新操作,这种位置更新策略可以改善蝴蝶个体与最优个体之 间的信息交流机制, 避免寻优个体的斍目性, 克服算法在迭代后 期容易陷入局部最优的缺陷。在这个过程中, 参数 R 1 、 R 2 R_{1} 、 R_{2} R1R2 可以 有效地控制搜索的距离和方向。正弦操作能够有效地保证全局 寻优得到潜在的最优解, 来减少余弦搜索的斍目性, 降低个体陷 入局部最优的可能性; 余弦操作可以促进迭代后期的局部搜索 能力, 进一步弥补迭代后期寻优速度下降的问题, 有效地保证了 寻优的效率。正余双弦相互作用, 共同提高算法的寻优性能。
请添加图片描述

3.实验结果

请添加图片描述

4.参考文献

[1]高文欣,刘升,肖子雅,于建芳.全局优化的蝴蝶优化算法[J].计算机应用研究,2020,37(10):2966-2970.

5.Matlab代码

6.Python代码

猜你喜欢

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