蝙蝠算法(Bat Algorithm,BA )理解及实现

  • 一、蝙蝠算法背景介绍
  • 二、蝙蝠算法原理
  • 三、蝙蝠模型构建
  • 四、蝙蝠算法的Python实现
  • 五、总结

一、蝙蝠算法背景介绍

蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法。
该算法基于迭代优化,初始化为一组随机解,然后迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强局部搜索速度。
该算法具有实现简单、参数少等特点。

二、蝙蝠算法原理

将种群中的蝙蝠个体映射为D维问题空间中的NP个可行解,将优化过程和搜索模拟成种群蝙蝠个体移动过程和搜寻猎物,利用求解问题的适应度函数值来衡量蝙蝠所处位置的优劣,将个体的优胜劣汰过程类比为优化和搜索过程中用好的可行解替代较差可行解的迭代过程。
在蝙蝠的随机搜索过程中,为了更方便的模拟蝙蝠探测猎物、避免障碍物,需假设如下三个近似的或理想化的规则:
(1)所有蝙蝠都采用回声定位感知距离;
(2)蝙蝠在位置xi以速度vi随机飞行,具有固定的频率fmin,同时根据自身与猎物的距离,自动调整波长和脉冲响度;
(3)假设脉冲响度的变化方式为从一个最大值A0 整数变化到固定最小值Amin,变化区间根据问题调整。

三、蝙蝠模型构建

算法描述
每个虚拟蝙蝠以随机的速度Vi在位置Xi(问题的解)飞行,同时蝙蝠具有不同的波长、响度Ai和脉冲发射率r。蝙蝠狩猎和发现猎物时,它改变频率、响度和脉冲发射率,进行最佳解的选择,直到目标停止或条件得到满足。这本质上就是使用调谐技术来控制蝙蝠群的动态行为,平衡调整算法相关的参数,以取得蝙蝠算法的最优。通过对多个标准测试函数的测试,展现了在连续性优化问题中的较好应用。
模型构建

算法流程

四、蝙蝠算法的Python实现

#!/usr/bin/env python3"""An implementation of Bat Algorithm
"""import numpy as np
from numpy.random import random as rand# Parameters setting
# objfun: objective function
# N_pop: population size, typically 10 to 40
# N_gen: number of generation
# A: loudness (constant or decreasing)
# r: pulse rate (constant or decreasing)
# This frequency range determines the scalings
# You should change these values if necessary
# Qmin: frequency minmum
# Qmax: frequency maxmum
# d: number of dimensions
# lower: lower bound
# upper: upper bound
def bat_algorithm(objfun, N_pop=20, N_gen=1000, A=0.5, r=0.5,Qmin=0, Qmax=2, d=10, lower=-2, upper=2):N_iter = 0 # Total number of function evaluations# Limit boundsLower_bound = lower * np.ones((1,d))Upper_bound = upper * np.ones((1,d))Q = np.zeros((N_pop, 1)) # Frequencyv = np.zeros((N_pop, d)) # VelocitiesS = np.zeros((N_pop, d))# Initialize the population/soutions# Sol = np.random.uniform(Lower_bound, Upper_bound, (N_pop, d))# Fitness = objfun(Sol)Sol = np.zeros((N_pop, d))Fitness = np.zeros((N_pop, 1))for i in range(N_pop):Sol[i] = np.random.uniform(Lower_bound, Upper_bound, (1, d))Fitness[i] = objfun(Sol[i])# Find the initial best solutionfmin = min(Fitness)Index = list(Fitness).index(fmin)best = Sol[Index]# Start the iterationsfor t in range(N_gen):# Loop over all bats/solutionsfor i in range(N_pop):# Q[i] = Qmin + (Qmin - Qmax) * np.random.randQ[i] = np.random.uniform(Qmin, Qmax)v[i] = v[i] + (Sol[i] - best) * Q[i]S[i] = Sol[i] + v[i]# Apply simple bounds/limitsSol[i] = simplebounds(Sol[i], Lower_bound, Upper_bound)# Pulse rateif rand() > r:# The factor 0.001 limits the step sizes of random walksS[i] = best + 0.001*np.random.randn(1, d)# Evaluate new solutions# print(i)Fnew = objfun(S[i])# Update if the solution improves, or not too loudif (Fnew <= Fitness[i]) and (rand() < A):Sol[i] = S[i]Fitness[i] = Fnew# update the current best solutionif Fnew <= fmin:best = S[i]fmin = FnewN_iter = N_iter + N_popprint('Number of evaluations: ', N_iter)print("Best = ", best, '\n fmin = ', fmin)return bestdef simplebounds(s, Lower_bound, Upper_bound):Index = s > Lower_bounds = Index * s + ~Index * Lower_boundIndex = s < Upper_bounds = Index * s + ~Index * Upper_boundreturn s# u: array-like
def test_function(u):a = u ** 2return a.sum(axis=0)if __name__ == '__main__':# print(bat_algorithm(test_function))bat_algorithm(test_function)

运行结果显示:

Matlab实现代码

五、总结

蝙蝠算法与遗传算法、粒子群算法相比,收敛速度更快,训练神经网络时也更有优势。已用于工程设计、分类等应用。
蝙蝠算法的性能主要包括:局部搜索、局部最优解、收敛速度、最优解和适应度值。

参考:
https://blog.csdn.net/u011835903/article/details/107937903
https://www.cnblogs.com/caoer/p/12641369.html
https://www.omegaxyz.com/2019/02/12/ba-matlab/
https://blog.csdn.net/qq_40456829/article/details/92775377

算法优化笔记|蝙蝠算法的理解及实现相关推荐

  1. 附Matlab源码:滚动轴承早期故障优化自适应蝙蝠算法优化的随机共振诊断法

    附Matlab源码:滚动轴承早期故障优化自适应蝙蝠算法优化的随机共振诊断法 文章目录 附Matlab源码:滚动轴承早期故障优化自适应蝙蝠算法优化的随机共振诊断法 前言 一.自适应蝙蝠算法优化的随机共振 ...

  2. 基于UWB的室内SDS_TWR测距算法优化和定位算法融合的研究

    1.内容简介 略257 2.内容说明 1.RSSI定位方法 基于接收信号强度RSS(Receive Signal Strength)[57]方法通过三个及以上己知位置的锚节点来测量移动节点发射的信号场 ...

  3. MVO-SVM 多元宇宙算法优化支持向量机回归算法

    MVO-SVM 多元宇宙算法优化支持向量机回归算法 多元宇宙优化算法 Multi-Verse Optimizer Support vector machine Support vector regre ...

  4. 【从零开始学习深度学习】43. 算法优化之Adam算法【RMSProp算法与动量法的结合】介绍及其Pytorch实现

    Adam算法是在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均 [可以看做是RMSProp算法与动量法的结合]. 目录 1. Adam算法介绍 2. 从零实现Adam算法 3. Pyt ...

  5. 【回文数】算法优化笔记

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数(不将整数转为字符串来解决). 示例 1:输入: 121输出: true示例 2:输入: -121输出: fals ...

  6. 【斐波那契数列】算法优化笔记

    题目:斐波那契数列为:1,1,2,3,5,8-,求第n项? 初步分析 设an为斐波那契数列. a1=a2=1;(n<=2) an=a(n-1) + a(n-2);(n>=2) 本章总结 [ ...

  7. 【两数之和】算法优化笔记

    题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同 ...

  8. 【整数反转】算法优化笔记

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21 假设我们 ...

  9. 【最长公共前缀】算法优化笔记

    题目:编写一个函数来查找字符串数组中的最长公共前缀.如果不存在公共前缀,返回空字符串 "". 示例 1:输入: ["flower","flow&quo ...

  10. 【罗马数字转整数】算法优化笔记

    给定一个罗马数字,将其转换成整数. 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗 ...

最新文章

  1. 工作如果没有方法,光靠苦力是不行的
  2. Python核心编程学习笔记(一)
  3. CSDN-markdown编辑器
  4. 在Linux下编写运行你的第一条代码——Hello Linux
  5. Elasticsearch之Query DSL语法入门
  6. 为什么linux的新得立软件下载,linux,debian_蝶变(Debian)_Xfce_新立得软件管理_安装不上软件了,怎么处理?,linux,debian - phpStudy...
  7. vivo X21i的usb调试模式在哪里,打开vivo X21iusb调试模式的经验
  8. deepin efi 启动u盘_如何安装Deepin国产操作系统?只需一个U盘就够了,超简单
  9. 查找 EXC_BAD_ACCESS 问题根源的方法
  10. 如何迅速的找到合适的开发者?
  11. 别再说找不到web前端项目练手了,这套最全的前端实战案例请拿去
  12. matlab简单处理图像
  13. php-ftm,关于KEA128中FTM0/1的问题
  14. vue3实现表格单元格可编辑
  15. 【快乐摸鱼】— 用python开发益智游戏
  16. 周老师,李记者,朱老师
  17. 0.96寸OLED显示屏介绍
  18. android cpu负载 工具,【专家专栏】Android性能测试之CPU
  19. 一个马虎导致以文件输出快速排序结果耗时巨长
  20. 线上抓娃娃方案的选型方法

热门文章

  1. acs510使用技巧_ABBACS510系列变频器通用接线图和参数表【借鉴实操】
  2. 基于MATLAB OCR的发票识别系统
  3. 只需三分钟小白也能学会!新手做自媒体,音乐拼接一晚200多
  4. ArcMap教程:合并ShapeFile中多个要素
  5. 饭卡可以用水冲洗吗_关于饭卡使用与管理的规定
  6. 理发店收银系统php,理发店收银系统优缺点
  7. Atheros QCA8337交换芯片驱动开发
  8. css总常用的font-family
  9. 数据库(SQL)面试题,基础知识(超全面)
  10. HGO工具CoordTool坐标七参数转换