【数学建模】(智能优化算法)天牛须算法(Beetle Antennae Search, BAS)详解与Python实现

天牛须算法(Beetle Antennae Search, BAS)详解与Python实现

文章目录

  • 天牛须算法(Beetle Antennae Search, BAS)详解与Python实现
    • 1. 引言
    • 2. 算法原理
      • 2.1 基本思想
      • 2.2 数学模型
    • 3. Python实现
    • 4.实测效果
      • 测试1. Michalewicz函数的最小化
      • 测试2. Goldstein-Price函数的约束最小化
    • 5. 算法特点
      • 5.1 优点
      • 5.2 缺点
    • 6. 改进方向
    • 7. 应用场景
    • 8. 总结
    • 参考资料

1. 引言

在众多的智能优化算法中,天牛须算法(Beetle Antennae Search, BAS)是一种相对较新的启发式算法,由中国学者于2017年提出。与常见的群体智能算法不同的是,本算法中只涉及一个个体。该算法模拟了天牛通过触角探索环境寻找食物的行为,具有实现简单、参数少、收敛速度快等特点,在函数优化、参数调整、路径规划等领域展现出良好的应用前景。

2. 算法原理

天牛须算法的灵感来源于自然界中天牛利用一对触角感知周围环境的行为。在搜索过程中,算法模拟天牛通过左右触角探测气味强度,并朝着气味更强的方向移动,从而找到目标(食物源)。
天牛须算法原理示意图

2.1 基本思想

  1. 随机方向探测:天牛随机选择一个方向进行探测
  2. 双触角感知:在选定方向的两侧各伸出一个“触角”进行探测
  3. 方向判断:比较两侧触角探测到的“气味”(目标函数值)
  4. 位置更新:向气味更浓(函数值更优)的方向移动

2.2 数学模型

天牛须算法的数学模型可以描述如下:

  1. 随机方向生成

    dir = random_unit_vector()  # 生成单位随机方向向量
    
  2. 左右触角位置

    x l e f t = x + d ⋅ d i r x_{left} = x + d \cdot dir xleft=x+ddir

    x r i g h t = x − d ⋅ d i r x_{right} = x - d \cdot dir xright=xddir

    其中, d d d是触角长度,会随着迭代逐渐减小。
    简化后的天牛模型

  3. 位置更新

    x n e w = { x + s t e p ⋅ d i r , if  f ( x l e f t ) < f ( x r i g h t ) x − s t e p ⋅ d i r , otherwise x_{new} = \begin{cases} x + step \cdot dir, & \text{if } f(x_{left}) < f(x_{right}) \\ x - step \cdot dir, & \text{otherwise} \end{cases} xnew={x+stepdir,xstepdir,if f(xleft)<f(xright)otherwise

    其中, s t e p step step是步长,也会随着迭代逐渐减小。
    步长可以设置为与触角长度成正比,其意义是“大天牛有大触角,小天牛有小触角”。
    可以在选择新位置时设置一定随机性。

3. Python实现

下面是天牛须算法的Python实现示例:

import numpy as np
import matplotlib.pyplot as pltclass BAS:def __init__(self, fitness_func, dim=2, max_iter=100, n_beetles=1, d0=1.0, d_decay=0.95, step0=1.0, step_decay=0.95):"""初始化天牛须搜索算法参数:fitness_func: 适应度函数(目标函数)dim: 问题维度max_iter: 最大迭代次数n_beetles: 天牛数量d0: 初始触角长度d_decay: 触角长度衰减率step0: 初始步长step_decay: 步长衰减率"""self.fitness_func = fitness_funcself.dim = dimself.max_iter = max_iterself.n_beetles = n_beetlesself.d0 = d0self.d_decay = d_decayself.step0 = step0self.step_decay = step_decay# 初始化天牛位置(在[-5,5]^dim空间内随机)self.beetles = np.random.uniform(-5, 5, (n_beetles, dim))self.best_position = Noneself.best_fitness = float('inf')self.fitness_history = []def normalize(self, v):"""将向量归一化为单位向量"""norm = np.linalg.norm(v)if norm == 0:return vreturn v / normdef optimize(self):"""执行优化过程"""d = self.d0  # 初始触角长度step = self.step0  # 初始步长for t in range(self.max_iter):for i in range(self.n_beetles):# 当前天牛位置x = self.beetles[i]# 生成随机方向(单位向量)direction = np.random.randn(self.dim)direction = self.normalize(direction)# 计算左右触角位置x_left = x + d * directionx_right = x - d * direction# 计算左右触角处的适应度f_left = self.fitness_func(x_left)f_right = self.fitness_func(x_right)# 更新位置if f_left < f_right:  # 假设是最小化问题self.beetles[i] = x + step * directionelse:self.beetles[i] = x - step * direction# 边界处理self.beetles[i] = np.clip(self.beetles[i], -5, 5)# 评估新位置fitness = self.fitness_func(self.beetles[i])# 更新全局最优if fitness < self.best_fitness:self.best_fitness = fitnessself.best_position = self.beetles[i].copy()# 记录当前最优适应度self.fitness_history.append(self.best_fitness)# 更新参数d *= self.d_decaystep *= self.step_decayreturn self.best_position, self.best_fitness# 测试函数:Sphere函数
def sphere(x):return np.sum(x**2)# 运行算法
bas = BAS(sphere, dim=10, max_iter=200)
best_pos, best_fit = bas.optimize()# 绘制收敛曲线
plt.figure(figsize=(10, 6))
plt.plot(bas.fitness_history)
plt.xlabel('迭代次数')
plt.ylabel('最优适应度值')
plt.title('天牛须算法收敛曲线')
plt.yscale('log')
plt.grid(True)
plt.show()print(f"最优解: {best_pos}")
print(f"最优值: {best_fit}")

4.实测效果

测试1. Michalewicz函数的最小化

Michalewicz函数的最小化

测试2. Goldstein-Price函数的约束最小化

Goldstein-Price函数的约束最小化

5. 算法特点

5.1 优点

  1. 实现简单:算法结构简单,易于理解和实现
  2. 参数少:相比粒子群、遗传算法等,参数更少
  3. 计算效率高:每次迭代只需少量函数评估
  4. 收敛速度快:在许多问题上表现出较快的收敛速度

5.2 缺点

  1. 易陷入局部最优:基础版本容易早熟收敛
  2. 参数敏感:算法性能对参数设置较为敏感
  3. 维度扩展性:在高维问题上效果可能不如其他成熟算法

6. 改进方向

为了克服基础天牛须算法的一些缺点,研究人员提出了多种改进方案:

  1. 自适应步长:根据搜索过程动态调整步长和触角长度,可表示为:

    d t = d 0 ⋅ δ t d_t = d_0 \cdot \delta^t dt=d0δt

    s t e p t = s t e p 0 ⋅ δ t step_t = step_0 \cdot \delta^t stept=step0δt

    其中, δ \delta δ是衰减系数, t t t是当前迭代次数。

  2. 多天牛协同:引入多个天牛并设计信息交互机制

  3. 混合算法:与其他优化算法(如PSO、DE等)结合

  4. 精英保留:引入精英保留策略避免最优解丢失

  5. 混沌映射:使用混沌映射增强搜索的多样性

7. 应用场景

天牛须算法已在多个领域得到应用:

  1. 参数优化:如神经网络、控制系统参数调优
  2. 路径规划:无人机、机器人路径规划
  3. 图像处理:图像分割、特征提取
  4. 调度优化:生产调度、资源分配
  5. 特征选择:机器学习中的特征选择

8. 总结

天牛须算法作为一种新兴的优化算法,凭借其简单高效的特点,在各类优化问题中展现出良好的应用前景。虽然还存在一些局限性,但通过不断的改进和与其他算法的结合,天牛须算法有望在更多领域发挥重要作用。

例如,我们可以用以下公式来表示天牛须算法的整体迭代过程:

X t + 1 = X t ± η t ⋅ d t ∣ ∣ d t ∣ ∣ ⋅ sign [ f ( X t + d t ) − f ( X t − d t ) ] X_{t+1} = X_t \pm \eta_t \cdot \frac{d_t}{||d_t||} \cdot \text{sign}[f(X_t + d_t) - f(X_t - d_t)] Xt+1=Xt±ηt∣∣dt∣∣dtsign[f(Xt+dt)f(Xtdt)]

其中, X t X_t Xt是当前位置, η t \eta_t ηt是步长, d t d_t dt是随机方向向量, f f f是目标函数, sign \text{sign} sign是符号函数。

参考资料

  1. Jiang X, Li S. BAS: Beetle Antennae Search Algorithm for Optimization Problems[J]. arXiv preprint arXiv:1710.10724, 2017.
  2. Wu Q, Shen X, Jin Y, et al. Intelligent beetle antennae search for UAV sensing and avoidance of obstacles[J]. Sensors, 2019, 19(8): 1758.
  3. Lin A, Sun W, Yu H, et al. BSAS: Beetle swarm antennae search algorithm for optimization problems[J]. IEEE Access, 2019, 7: 105467-105482.
  4. 天牛须搜索算法(BAS)

希望这篇文章能帮助您了解天牛须算法的基本原理、实现方法和应用场景。如有任何问题,欢迎在评论区留言讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【家政平台开发(42)】筑牢家政平台安全防线:安全测试与漏洞修复指南

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

学习笔记八——内存管理相关

&#x1f4d8; 目录 内存结构基础&#xff1a;栈、堆、数据段Rust 的内存管理机制&#xff08;对比 C/C、Java&#xff09;Drop&#xff1a;Rust 的自动清理机制Deref&#xff1a;为什么 *x 能访问结构体内部值Rc&#xff1a;多个变量“共享一个资源”怎么办&#xff1f;Weak&…

ReliefF 的原理

&#x1f31f; ReliefF 是什么&#xff1f; ReliefF 是一种“基于邻居差异”的特征选择方法&#xff0c;用来评估每个特征对分类任务的贡献大小。 它的核心问题是&#xff1a; “我怎么知道某个特征是不是重要&#xff1f;是不是有能力把不同类别的数据区分开&#xff1f;” 而…

​asm汇编源代码之-汉字点阵字库显示程序源代码下载​

汉字点阵字库显示程序 源代码下载 文本模式下显示16x16点阵汉字库内容的程序(标准16x16字库需要使用CHGHZK转换过后才能使用本程序正常显示) 本程序需要调用file.asm和string.asm中的子程序,所以连接时需要把它们连接进来,如下 C:\> tlink showhzk file string 调用参…

【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测

基于穿戴装备的身体活动监测 摘要 本研究基于加速度计采集的活动数据&#xff0c;旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理&#xff0c;活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类&#xff0c;进而计算每个志愿者在…

Ubuntu24.04装机安装指南

文章目录 Ubuntu24.04装机安装指南一、分区说明二、基础软件三、使用fcitx5配置中文输入法四、安装搜狗输入法【**不推荐**】1. 安装fcitx2. 安装输入法 五、禁用/home目录下自动生成文件夹六、更新软件源1. 针对**新配置方式**的清华源替换方法2. 针对**老配置方式**的清华源替…

互联网三高-数据库高并发之分库分表ShardingJDBC

1 ShardingJDBC介绍 1.1 常见概念术语 ① 数据节点Node&#xff1a;数据分片的最小单元&#xff0c;由数据源名称和数据表组成 如&#xff1a;ds0.product_order_0 ② 真实表&#xff1a;再分片的数据库中真实存在的物理表 如&#xff1a;product_order_0 ③ 逻辑表&#xff1a…

BM25、BGE以及text2vec-base-chinese的区别

BM25、BGE以及text2vec-base-chinese的区别 BM25 原理:BM25(Best Matching 25)是一种基于概率检索模型的算法,它通过考虑查询词与文档之间的匹配程度、文档的长度等因素,来计算文档对于查询的相关性得分。具体来说,它会给包含查询词次数较多、文档长度适中的文档更高的分…

Python中try用法、内置异常类型与自定义异常类型拓展

目录 try介绍与语法格式try具体使用案例except的异常类型简介案例内置的常见异常类型自定义异常类型继承关系用途 注意事项 try介绍与语法格式 在 Python 里&#xff0c;try 语句主要用于异常处理&#xff0c;其作用是捕获并处理代码运行期间可能出现的异常&#xff0c;避免程…

【第41节】windows的中断与异常及异常处理方式

目录 一、中断与异常处理 1.1 中断与异常 1.2 IDT 1.3 异常的概念 1.4 异常分类 二、windows异常处理方式 2.1 概述 2.2 结构化异常处理 2.3 向量化异常处理之VEH 2.4 向量化异常处理之VCH 2.5 默认的异常处理函数 2.6 如何手动安装 SEH 节点 2.7 异常处理的优先级…

分布式日志治理:Log4j2自定义Appender写日志到RocketMQ

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

【HTML】html文件

HTML文件全解析&#xff1a;搭建网页的基石 在互联网的广袤世界里&#xff0c;每一个绚丽多彩、功能各异的网页背后&#xff0c;都离不开HTML文件的默默支撑。HTML&#xff0c;即超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;作为网页创建的基…

oracle命令上下左右键无法使用如何解决?

1、问题如图 2、解决办法 (1) 安装readline yum -y install readline* &#xff08;2&#xff09;安装 rlwrap ##下载 wget http://files.cnblogs.com/files/killkill/rlwrap-0.30.tar.gz.zip ##解压 tar -xzvf rlwrap-0.30.tar.gz.zip ##编译安装 ./configure make &&…

vue事假机制都有哪些

Vue 的事件机制主要包含以下几种类型和方式&#xff0c;可以分为组件内部事件、父子组件通信事件、原生 DOM 事件封装、修饰符增强等&#xff0c;下面详细分类介绍&#xff1a; 一、DOM 事件绑定&#xff08;最基础的事件&#xff09; 使用 v-on&#xff08;或简写 &#xff0…

系统编程2(消息队列)

⦁ 消息队列概念 Linux系统中消息队列&#xff08;Message Queue&#xff09;是进程间通信的一种方式&#xff0c;这种通信机制的好处是可以传输指定类型(用户可以自行定义)的数据&#xff0c;相同类型的数据根据到达顺序在队列中进行排队。 当然&#xff0c;不同类型的数据不…

Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(二)

Pytorch深度学习框架60天进阶学习计划 - 第41天&#xff1a;生成对抗网络进阶&#xff08;二&#xff09; 7. 实现条件WGAN-GP # 训练条件WGAN-GP def train_conditional_wgan_gp():# 用于记录损失d_losses []g_losses []# 用于记录生成样本的多样性&#xff08;通过类别分…

python 微博爬虫 01

起因&#xff0c; 目的: ✅下载单个视频&#xff0c;完成。✅ 获取某用户的视频列表&#xff0c;完成。剩下的就是&#xff0c; 根据视频列表&#xff0c;逐个下载视频&#xff0c;我没做&#xff0c;没意思。获取视频的评论&#xff0c;以后再说。 关键点记录: 1. 对一个视…

Servlet、HTTP与Spring Boot Web全面解析与整合指南

目录 第一部分&#xff1a;HTTP协议与Servlet基础 1. HTTP协议核心知识 2. Servlet核心机制 第二部分&#xff1a;Spring Boot Web深度整合 1. Spring Boot Web架构 2. 创建Spring Boot Web应用 3. 控制器开发实践 4. 请求与响应处理 第三部分&#xff1a;高级特性与最…

vue中根据html动态渲染内容2.0

上次使用的是p标签用的contenteditable代替的可编辑的input&#xff0c;最后实现还是选择了用el-input的textarea方式。 一开始考虑的是需要根据用户输入自动撑开输入框&#xff0c;所以选择了p标签可编辑。 最后发现还是el-input会更好一点&#xff0c;只不过需要处理输入框撑…

CentOS 系统磁盘扩容并挂载到根目录(/)的详细步骤

在使用 CentOS 系统时&#xff0c;经常会遇到需要扩展磁盘空间的情况。例如&#xff0c;当虚拟机的磁盘空间不足时&#xff0c;可以通过增加磁盘容量并将其挂载到根目录&#xff08;/&#xff09;来解决。以下是一个完整的操作流程&#xff0c;详细介绍了如何将新增的 10G 磁盘…