一种改进的蝴蝶优化算法

文章目录

  • 一种改进的蝴蝶优化算法
    • 1.蝴蝶优化算法
    • 2. 改进蝴蝶优化算法
      • 2.1 自适应惯性权重
      • 2.2 扰动策略
      • 2.3 疯狂因子
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.Python代码

摘要:蝴蝶优化算法作为新提出的自然启发算法,其寻优方式模拟了蝴蝶利用嗅觉来确定花蜜或交配对象位置的行为。针对蝴蝶优化算法求解精度不高和收敛速度慢等问题,提出一种基于自适应扰动的疯狂蝴蝶算法(CIBOA)。首先,在自身认知飞行部分引入自适应惯性权重,平衡算法的局部与全局搜索能力;其次,在全局最优位置引入扰动策略,避免算法陷入局部最优;最后,在花蜜位置引入疯狂因子以增加种群多样性,获取更好的最优解。

1.蝴蝶优化算法

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

2. 改进蝴蝶优化算法

2.1 自适应惯性权重

在 BOA 的自身认知飞行部分体现了后置蝴蝶追随前一只 蝴蝶位置的能力。文献 [13] 在 PSO 算法中引入惯性权重 ω\omegaω, 分析指出: 惯性权重较大或较小都有可能引起算法陷入局部最 优, 从而影响算法效率。为了更好地平衡算法的局部与全局搜 索能力, 本文引入线性递减的惯性权重来更新蝴蝶的位置, 表 示为
xit={ω(t)×xit+(r12×g∗−xit)×fir3⩽Pω(t)×xit+(r22×xjt−xkt)×fir3>Pω(t)=ωmin⁡+(ωmax⁡−ωmin⁡)exp⁡(−0.5×(ttmax⁡)2)\begin{array}{r} \boldsymbol{x}_{i}^{t}=\left\{\begin{array}{rr} \omega(t) \times \boldsymbol{x}_{i}^{t}+\left(r_{1}^{2} \times g^{*}-\boldsymbol{x}_{i}^{t}\right) \times f_{i} & r_{3} \leqslant P \\ \omega(t) \times \boldsymbol{x}_{i}^{t}+\left(r_{2}^{2} \times \boldsymbol{x}_{j}^{t}-\boldsymbol{x}_{k}^{t}\right) \times f_{i} & r_{3}>P \end{array}\right. \\ \omega(t)=\omega_{\min }+\left(\omega_{\max }-\omega_{\min }\right) \exp \left(-0.5 \times\left(\frac{t}{t_{\max }}\right)^{2}\right) \end{array} xit​={ω(t)×xit​+(r12​×g∗−xit​)×fi​ω(t)×xit​+(r22​×xjt​−xkt​)×fi​​r3​⩽Pr3​>P​ω(t)=ωmin​+(ωmax​−ωmin​)exp(−0.5×(tmax​t​)2)​
其中: r3r_{3}r3​ 是 [0,1][0,1][0,1] 的随机数; ωmax \omega_{\text {max }}ωmax ​ 为初始惯性权重; ωmin \omega_{\text {min }}ωmin ​ 为迭代结 束时的惯性权重; ttt 为当前迭代次数; Tmax T_{\text {max }}Tmax ​ 为最大迭代次数。惯 性权重 ωmax =0.9,ωmin⁡=0.4\omega_{\text {max }}=0.9, \omega_{\min }=0.4ωmax ​=0.9,ωmin​=0.4 时算法具有最佳性能。因此, 随 着迭代的进行, 惯性权重从 0.90.90.9 线性递减至 0.40.40.4, 迭代初始阶 段较大的惯性权重让算法保持较好的搜索能力, 而迭代后期较 小的惯性权重有助于算法进行更好的开发能力。

2.2 扰动策略

在 BOA 算法的全局搜索阶段,所有蝴蝶个体都向同一个全局最优位置飞行,这样操作的不足之处在于很容易陷入局部最优,致使该算法在应用于较复杂的多峰函数中时,收敛过早和精度低下的缺点比较明显。对此本文引入文献[11]提出的多段扰动策略用于更新最优花蝊位置 g∗g^{*}g∗, 即对全局最优花蝊 位置根据方差可调的正态随机分布进行扰动得到新的全局最 优花蝊位置 gbest g_{\text {best }}gbest ​, 更新公式为
gbest =N(g∗,δ)g_{\text {best }}=N\left(g^{*}, \delta\right) gbest ​=N(g∗,δ)
其中: δ\deltaδ 表示相对于 g∗g^{*}g∗ 的不确定度, 是对迭代次数 ttt 的非增函 数,其更新公式为
δ={δ1t<α1Tδ2α1T<t<α2Tδ3t>α2T\delta= \begin{cases}\delta_{1} & t<\alpha_{1} T \\ \delta_{2} & \alpha_{1} T<t<\alpha_{2} T \\ \delta_{3} & t>\alpha_{2} T\end{cases} δ=⎩⎨⎧​δ1​δ2​δ3​​t<α1​Tα1​T<t<α2​Tt>α2​T​
其中: δ\deltaδ 表示正态扰动的半径参数且 δ1>δ2>δ3;α1、α2\delta_{1}>\delta_{2}>\delta_{3} ; \alpha_{1} 、 \alpha_{2}δ1​>δ2​>δ3​;α1​、α2​ 是半径 变化的控制参数, 且 α1<α2;t\alpha_{1}<\alpha_{2} ; tα1​<α2​;t 是当前迭代次数; TTT 是最大迭代 次数。

2.3 疯狂因子

蝴蝶在飞行的过程中, 其产生的香味大小不可能一直保持 不变, 随着距离浓度的改变来扰乱种群的意外行为。在此用疯 狂因素来描述, 其核心思想是通过疯狂变量对其进行建模, 在 BOA\mathrm{BOA}BOA 的位置公式中引入一个疯狂因子 [12]{ }^{[12]}[12], 确保蝴蝶具有预定 确定的疯狂概率, 以保持种群的多样性, 更新公式为
xit={ω(t)×xit+(r12×gbest −xit)×fi+P(r4)sign⁡(r4)xcraziness r3⩽Pω(t)×xit+(r22×xjt−xkt)×fi+P(r4)sign⁡(r4)xcraziness r3>P\boldsymbol{x}_{i}^{t}= \begin{cases}\omega(t) \times \boldsymbol{x}_{i}^{t}+\left(r_{1}^{2} \times g_{\text {best }}-\boldsymbol{x}_{i}^{t}\right) \times f_{i}+ & \\ P\left(r_{4}\right) \operatorname{sign}\left(r_{4}\right) x_{\text {craziness }} & r_{3} \leqslant P \\ \omega(t) \times \boldsymbol{x}_{i}^{t}+\left(r_{2}^{2} \times \boldsymbol{x}_{j}^{t}-\boldsymbol{x}_{k}^{t}\right) \times f_{i}+ & \\ P\left(r_{4}\right) \operatorname{sign}\left(r_{4}\right) x_{\text {craziness }} & r_{3}>P\end{cases} xit​=⎩⎨⎧​ω(t)×xit​+(r12​×gbest ​−xit​)×fi​+P(r4​)sign(r4​)xcraziness ​ω(t)×xit​+(r22​×xjt​−xkt​)×fi​+P(r4​)sign(r4​)xcraziness ​​r3​⩽Pr3​>P​
其中: ω(t)\omega(t)ω(t) 表示引入自适应惯性权重; gbest g_{\text {best }}gbest ​ 表示引入扰动策略; r4r_{4}r4​ 是 [0,1][0,1][0,1] 的随机数; xcraziness x_{\text {craziness }}xcraziness ​ 通常取较小的常数; P(r4)P\left(r_{4}\right)P(r4​) 和 sign⁡(r4)\operatorname{sign}\left(r_{4}\right)sign(r4​) 定义分别为
P(r4)={1if r4⩽Pcr0else sign⁡(r4)={−1if r4⩾0.51else \begin{aligned} P\left(r_{4}\right) &= \begin{cases}1 & \text { if } r_{4} \leqslant P_{c r} \\ 0 & \text { else }\end{cases} \\ \operatorname{sign}\left(r_{4}\right) &= \begin{cases}-1 & \text { if } r_{4} \geqslant 0.5 \\ 1 & \text { else }\end{cases} \end{aligned} P(r4​)sign(r4​)​={10​ if r4​⩽Pcr​ else ​={−11​ if r4​⩾0.5 else ​​
其中: PcrP_{c r}Pcr​ 为设定的疯狂 概率; xcraziness x_{\text {craziness }}xcraziness ​ 为一个非 常小的值 (为 0.00010.00010.0001 ), 蝴蝶在飞行过程中花䘺位置发生移动的可能性较 小。在这种情况下, 如果 PcrP_{c r}Pcr​ 取值较小 (为 0.30.30.3 ), 则随机数 c4c_{4}c4​ 将 有很大概率大于 PcrP_{c r}Pcr​, 疯狂因子 P(c4)P\left(c_{4}\right)P(c4​) 也将为 0 , 这是人们实际期 望的。

自适应扰动的 CIBOA 步骤如下:

a) 设置算法参数, 初始化蝴蝶个体位置。根据搜索空间 的上下限, 随机生成一个 N×dN \times dN×d 维矩。
b)计算初始适应度值。根据测试函数计算 NNN 只蝴蝶的适 应度值。
c) 选定花蜜源。把步骤b)中计算后的适应度值进行升序 排列, 适应度值最好的蝴蝶位置选定为花蜜源位置, 并根据 式(1)计算其香味大小。
d) 蝴蝶位置更新。根据式 (8) 和 PPP 值判断当前迭代进行 全局搜索还是局部搜索, 然后对应更新每只蝴蝶的位置。
e) 计算适应值。计算更新后每只蝴蝶所处位置的适应度 值, 并更新最优位置。
f)重复步骤 d) ∼\sim∼ e)的更迭过程, 如果达到设置的精度要 求或规定的最大迭代次数, 则终止算法, 输出全局最优解。

3.实验结果

4.参考文献

[1]王依柔,张达敏,徐航,宋婷婷,樊英.基于自适应扰动的疯狂蝴蝶算法[J].计算机应用研究,2020,37(11):3276-3280.

5.Matlab代码

6.Python代码

基于自适应扰动的疯狂蝴蝶算法-附代码相关推荐

  1. 柯西变异和自适应权重优化的蝴蝶算法-附代码

    融合正弦余弦和无限折叠迭代混沌映射的蝴蝶优化算法 文章目录 融合正弦余弦和无限折叠迭代混沌映射的蝴蝶优化算法 1.蝴蝶优化算法 2. 改进蝴蝶优化算法 2.1 柯西变异 2.2 自适应权重 2.3动态 ...

  2. 路径规划算法:基于鸟群优化的路径规划算法- 附代码

    路径规划算法:基于鸟群优化的路径规划算法- 附代码 文章目录 路径规划算法:基于鸟群优化的路径规划算法- 附代码 1.算法原理 1.1 环境设定 1.2 约束条件 1.3 适应度函数 2.算法结果 3 ...

  3. 多段扰动共享型乌鸦算法-附代码

    多段扰动共享型乌鸦算法 文章目录 多段扰动共享型乌鸦算法 1.乌鸦搜索算法 2.基于多段扰动的共享型乌鸦算法 2.1 加入共享机制的位置更新方式 2.2 加入扰动策略更新最优藏食位置 4.实验结果 5 ...

  4. 基于柯西变异的蚁狮优化算法 - 附代码

    基于柯西变异的蚁狮优化算法 文章目录 基于柯西变异的蚁狮优化算法 1.蚁狮优化算法 2. 改进蚁狮优化算法 2.1 基于柯西变异算子改进 3.实验结果 4.参考文献 5.Matlab代码 6.Pyth ...

  5. 基于自适应t分布的麻雀搜索算法-附代码

    基于自适应t分布的麻雀搜索算法 文章目录 基于自适应t分布的麻雀搜索算法 1.自适应t分布策略 2.基于自适应t分布策略的麻雀搜索算法 3.算法结果: 4.Matlab 5.Python 1.自适应t ...

  6. 基于透镜成像学习策略的灰狼优化算法-附代码

    基于透镜成像学习策略的灰狼优化算法 文章目录 基于透镜成像学习策略的灰狼优化算法 1.灰狼优化算法 2.基于透镜成像学习的 GWO 算法 2.1修改控制参数*C*策略 2.2 透镜成像反向学习策略 3 ...

  7. 改进交叉算子的自适应人工蜂群黏菌算法-附代码

    改进交叉算子的自适应人工蜂群黏菌算法 文章目录 改进交叉算子的自适应人工蜂群黏菌算法 1.黏菌算法 2.改进黏菌算法 2.1 自适应可调节反馈因子 2.2 算数交叉算子 2.3 改进的人工蜂群搜索策略 ...

  8. 具有随机分形自适应搜索策略的蚁狮优化算法-附代码

    具有随机分形自适应搜索策略的蚁狮优化算法 文章目录 具有随机分形自适应搜索策略的蚁狮优化算法 1.蚁狮优化算法 2. 改进蚁狮优化算法 2.1 蚂蚁随机分形搜索方程 2.2 蚁狮自适应搜索方程 3.实 ...

  9. 具有自适应搜索策略的灰狼优化算法-附代码

    具有自适应搜索策略的灰狼优化算法 文章目录 具有自适应搜索策略的灰狼优化算法 1.灰狼优化算法 2. 改进灰狼优化算法 2.1 自适应调整策略 2. 2 跳出局部最优策略 2.3 最优学习搜索方程 3 ...

  10. 基于Levy飞行的飞蛾扑火优化算法-附代码

    基于Levy飞行的飞蛾扑火优化算法 文章目录 基于Levy飞行的飞蛾扑火优化算法 1.飞蛾扑火优化算法 2. 改进飞蛾扑火优化算法 2.1 Lévy 飞行 3.实验结果 4.参考文献 5.Matlab ...

最新文章

  1. 土耳其最大光伏电站成功并网
  2. 想找一个写Wiki的工具
  3. JDK源码学习笔记——Enum枚举使用及原理
  4. Spark 调优 ——cache(persist)与 checkpoint
  5. 程序员“不会”修电脑的原因
  6. Rect类基本函数使用
  7. 如何下载fatjar
  8. 高德地图标识大全_连地震都查得一清二楚!高德地图新功能体验
  9. IPFS 配置公共网关
  10. html修改word页边距,Word怎么只修改一页的页边距,而不影响同一文件中的其他页?...
  11. 计网PPT 第八章 互联网上的音频和视频服务
  12. [4G5G专题-53]:物理层-手机终端的传输模式TM详解
  13. 上半年最中意的 GitHub 更新「GitHub 热点速览 v.22.21」
  14. 基于.Net TcpListener 实现 WebSocketServer 通讯
  15. PS8622 DP转LVDS
  16. Advanced IP Scanner ip扫描工具使用
  17. CSS--层叠样式表
  18. 高标清双向变换 万能 视频格式转换器
  19. tinyMediaManager 无法使用?2022.10.26
  20. excel打开密码忘记了_安卓手机忘记解锁密码怎么办?三招教你打开手机

热门文章

  1. 诺奖解读|薛鹏最新解读:从爱因斯坦不相信到幽灵般超距作用成真
  2. 如何用js实现数组倒序输出
  3. 新浪(1998年12月—2000年3月)
  4. 免费云服务器申请攻略!白嫖党乐开了花
  5. linux运维工作内容及岗位要求
  6. 手把手教你做线性回归分析,实用且通俗易懂!
  7. 什么是SQL Server数据字典?
  8. 渗透测试工具篇之Metasploit(MSF)扫描模块的简单使用
  9. html5控制gif速度,用gifsicle优化GIF动图
  10. HeartBeat的一些介绍和功能上的一些总结