算法原理

蝙蝠能够在夜间或十分昏暗的环境中自由飞翔和准确无误地捕捉食物,是因为他们能够从喉头发出地超声脉冲回声来定位。受这一启发,Yang教授在2010年提出了蝙蝠算法(Bat Algorithm,BA)[1]

在蝙蝠算法中,为了模拟蝙蝠捕食猎物、避免障碍地随机搜索过程,做出如下三个近似理想化规则假设[2]

(1)   种群中所有蝙蝠都利用回声定位的方法感知距离。

(2)   蝙蝠在位置以速度随机飞行,具有固定的频率,同时具有根据自身与猎物距离自动调整的波长和脉冲响度A。

(3)   假设脉冲响度的变化方式为从一个最大值整数变化到固定最小值,变化区间可根据问题调整。

假设蝙蝠搜索空间为D维,每一代中蝙蝠位置和速度的更新规则如公式(1)~(3)所示。其中为一个随机变量。是群体当前局部最优解位置。

             (1)

    (2)

                          (3)

而局部搜索时,新的局部解使用随机游走方式生成,如公式(4)。是一个随机数;整个群体在同一代中的平均响度。在搜索过程中,蝙蝠会根据距离目标猎物的方位不断减小响度到一个定值的同时不断增大频度,将猎物范围缩小并捕食,在这一过程中,每只蝙蝠的声波响度和频度更新公式如(5)和(6)所示,其中是声波响度衰减系数,值落在0到1之间不包含0和1;是脉冲频度增强系数大于0;表示为蝙蝠初始脉冲频率。

        (4)

            (5)

      (6)

蝙蝠算法的基本步骤为:

(1)   参数初始化:蝙蝠种群数量m,迭代次数N,目标函数f(x),蝙蝠位置,速度和声波频率,声波响度和频度

(2)   找出当前种群的最优位置,根据公式(2)~(4)更新位置和速度。

(3)   生成[0,1]上的随机数rand1,如果rand1>,在最佳个体(解集)中选择一个最优个体(解),在选择的最优个体(解)周围根据公式(4)生成一个局部个体(解),否则根据公式(4)更新蝙蝠个体位置。

(4)   生成[0,1]上的随机数rand2,如果rand2<并且,则接受该位置,根据公式(6)(7)减小和增大

(5)   对该种群中所有个体适应度值进行排序,并找出当前最佳

(6)   重复步骤(2)~(5),判断是否满足最大迭代次数,输出全局最优值。

参考文献

[1] X. S. Yang, A New Metaheuristic Bat-Inspired Algorithm, in: Nature Inspired Cooperative Strategies for Optimization (NISCO 2010), Studies in Computational Intelligence, Springer Berlin, 284, Springer, 65-74 (2010). http://arxiv.org/abs/1004.4170

[2] XU Degang, ZHAO Ping. Literature Survey on Research and Application of Bat Algorithm. CEA, 2019, 55(15): 1-12.

参考代码

1.https://www.mathworks.com/matlabcentral/fileexchange/44707-binary-bat-algorithm

最新文章

  1. Ubuntu14.04_64位使用过程
  2. ionic tab导航在android 真机测试中 导航在顶部解决办法
  3. 深入理解js——作用域
  4. Robotium ant 报错Unable to find instrumentation info for: ComponentInfo{project/android.test.InstrumentationTestRunner}
  5. mysqldump命令介绍
  6. STL源码中map和set中key值不能修改的实现
  7. Drupal 7.31版本爆严重SQL注入漏洞
  8. LA 6540 Fibonacci Tree
  9. Codeforces Round #263
  10. Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库
  11. 在 WindowMobile 上的模拟LED 显示屏插件(转)
  12. Cron表达式详解【转】
  13. 【Jquery Mobile教程】【问题】- 在页面切换时会闪烁
  14. C/C++字符串函数使用整理
  15. luogu5022 [NOIp2018]旅行 (dfs)
  16. sklearn_Logistic Regression
  17. Scrum立会报告+燃尽图(Beta阶段第二周第七次)
  18. 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)
  19. P1059 明明的随机数【去重排序】
  20. eclipse格式化代码模板

热门文章

  1. CentOS8的网络管理变化
  2. Rocket - devices - DevNullDevice
  3. Spring Boot笔记(四) springboot 集成 @Scheduled 定时任务
  4. Java实现 LeetCode 779 第K个语法符号(递归)
  5. Java实现 蓝桥杯 算法提高 摩尔斯电码
  6. Javascript实现万年历(日历表)
  7. 【Spring注解驱动开发】组件注册-@ComponentScan-自动扫描组件&amp;指定扫描规则
  8. Firewalld 的基本使用
  9. JNI_day01
  10. 织梦cms 内容模型 option下拉框 value 分离