超详细 | 萤火虫算法原理及其实现(Matlab)

news2025/1/20 5:54:09

在这里插入图片描述

群智能(Swarm Intelligence,SI)是一类分散自组织系统的集体智能行为的总称,该表述最早在1989年由Gerardo Beni在分子自动机系统中提出。SI系统可视作一组简单的个体,其个体与个体、个体与环境之间存在交互作用,最终表征出智能行为。尽管每个个体遵循及其简单的规则,且整个群体没有中心控制,但最终局部个体之间的交互作用引发了全局层面上智能的涌现。

SI 的研究为学术、工业等实际问题提供了新的解决方法,一些学者根据昆虫群体和其他动物群体的集体行为,提出相应的 SI 优化算法,常见的有蚁群优化、粒子群优化和前面介绍过的灰狼优化算法等,本文中作者将主要介绍SI优化算法之一的萤火虫算法。

萤火虫算法(firefly algorithm,FA)是英国学者Yang于2008年提出的一种元启发式算法[1]该算法通过模拟自然界中萤火虫个体之间相互吸引的理想化行为达到寻优目的,由于操作简单,需要调整的参数少且性能优越,一经提出便受到国内外研究人员的关注,广泛应用于计算机科学、复杂方程求解、结构和工程优化领域。

00 目录

1 萤火虫算法原理

2 代码目录

3 算法性能

4 源码获取

01 萤火虫算法(FA)原理

对萤火虫算法有所了解的同学可能会发现,除了前面卡卡提到的FA外,还有一种版本的萤火虫优化算法(Glowworm swarm optimization,GSO),这是在2005年由印度学者Krishnanand[2]提出的,两者的仿生原理大致相同,但在具体实现上有一定差异,本文将主要介绍FA,在介绍过程中,卡卡也会提到两者的差异所在。

在大自然界中,萤火虫利用自身所发出的光亮作为一种信号去吸引其他个体,而萤火虫只会飞向比自己更明亮的个体。FA 算法即是模拟萤火虫的这种行为而提出的群体智能算法。FA包含两个重要因素,一个是亮度,另一个是吸引力。亮度反映了萤火虫的位置,并决定了萤火虫移动的方向。吸引力决定了萤火虫移动的距离。通过不断更新亮度和吸引力可以实现客观优化。

其核心思想是:低亮的萤火虫被吸引到更明亮的萤火虫,然后它们向更明亮的萤火虫移动,以更新它们的位置。萤火虫的亮度取决于目标函数的适应度值,亮度越高,适应度值越好。如果两个相邻的萤火虫有相同的亮度,萤火虫将随机移动。

FA的数学模型描述如下:

亮度

在这里插入图片描述

式中:I0为初始亮度,参数γ代表亮度的损失因素,r为两个萤火虫之间的距离。

吸引力
在这里插入图片描述

吸引力是个体移动机制的重要因素,其中β0为萤火虫之间的最大吸引力,即距离r=0时的两萤火虫之间的吸引力。而在之前许多学者研究表明,式中的γ的取值对该算法的性能有着很大的影响。

距离
在这里插入图片描述

式中:rij是萤火虫i、j在解空间中的坐标的笛卡尔距离,d为解空间的总维度。​

移动
在这里插入图片描述

在算法的演化迭代过程中,当萤火虫xi的亮度小于萤 火虫xj时,萤火虫xi便根据上式进 行移动。在式中,t为算法的迭代次数,xi、xj是两个萤火虫所处解空间的位置。参数α为步长因子,同样其取值对该算法性能也具有较大影响。一般建议设置在(0,1]区间。∈i在[-0.5,0.5],通常是由高斯分布、均匀分布或其它分布生成的随机数向量。​

以上是FA的数学模型,

首先,其每个萤火虫与其他每个萤火虫都有交流,而在GSO中,每个萤火虫有其决策域半径,其仅对位于其决策域内的萤火虫起调节作用,这可能会使萤火虫之间协作不足,易陷入局部最优,但这样也能减少其计算复杂度。

其次,FA在移动操作中存在一个扰动项∈i,可以避免其陷入局部最优,而GSO中是移动步长,能够加大其对整个解空间的搜索。

两种算法各有所长,具体细节读者可以自行深入。

PS:其中,萤火虫算法独特的吸引机制也常作为局部扰动引入到其他算法中,即将“移动”操作引入其他算法中作为扰动以提升算法的局部搜索能力。

FA算法的实现步骤可表示如下:

在这里插入图片描述

02 代码目录

在这里插入图片描述

考虑到很多同学获取代码后有乱码(matlab版本问题),可以将matlab版本改为2020或2021,或使用乱码解决文件夹中的txt文件即可。

部分代码:
在这里插入图片描述

03 算法性能

采用标准测试函数初步检验其寻优性能

在MATLAB中执行程序结果如下:

在这里插入图片描述

04 源码获取

在作者GZH :KAU的云实验台 回复 FA 即可

由前面对其原理的介绍可以发现,

由于萤火虫都需要与其余的所有萤火虫进行相互吸引,即全互连,这将导致其计算复杂度高,同时可能会引起震荡,影响收敛速度,这可以采用非全互连的结构,如精英交互等;
其次,萤火虫的位置更新主要依据吸引力和扰动步长,这在原算法中是固定的,可以在算法中设置使其动态调整来平衡其在前期和后期的勘探和开发。后续作者也会发布有关FA的原创改进。

参考文献

[1] YANG X S. Nature-inspired metaheuristic algorithms[M]. Frome: Luniver Press,2008.

[2] Krishnanand K N,Ghose D.Glowworm swarm optimization for simultaneous capture of multiple local optima of multimodal functions[J].Swarm Intelligence,2009, 3(2):87-124

另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。

如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行),你们的鼓励就是我坚持的动力!​

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

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

相关文章

【第2章 Node.js基础】2.7 Node.js 的流

2.7 Node.js 的流 什么是流 流不是 Node.js 特有的概念。它们是几十年前在 Unix 操作系统中引入的。 我们可以把流看作这些数据的集合,就像液体一样,我们先把这些液体保存在一个容器里(流的内部缓冲区 BufferList),…

全平台自动去水印源码系统 一键下载高清无水印视频 支持全平台 带完整搭建部署教程

大家好啊,今天源码小编要来给大家分享一款超级好用的全平台自动去水印源码系统 。这款去水印的源码系统,支持全平台,可以帮你一键下载高清无水印视频。 以下是部分核心代码示例: 系统特色功能一览: 全平台支持&#…

免费分享!全国河流断面水质监测数据

随着人类活动的不断增加,河流的水质受到严重污染,为了保护河流生态环境,需要对河流断面水质进行监测。全国河流断面水质监测数据是反映全国河流污染状况的重要指标之一,通过对数据的分析,可以了解不同地区河流污染情况…

vue+element模仿实现PC端网易云,对接第三方接口

一、项目预览 在线预览:点击访问 其他项目访问:点击访问 项目使用传统vue项目结构实现,前端采用element实现。 element官网:Element - The worlds most popular Vue UI framework 二、 项目效果图 1.首页 2.歌单详情列表 3.歌…

国产高云FPGA开发软件Gowin的下载、安装、Licence共享,按照我的方案保证立马能用,不能用你铲我耳屎

目录 1、前言2、GOWIN简介3、GOWIN下载4、GOWIN安装5、Licence共享方案,立马就能用6、网盘福利领取 1、前言 “苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域&am…

el-table操作栏添加el-dropdown获取当前行的数据

0 效果 点击子合同获取到当前行的id 1 代码 beforeHandleCommand(row, childCommand) {return { row: row, childCommand: childCommand }; }, addChildBtn(command) {const row command.row;if (command.childCommand 0) {// todo} else {// todo} },

使用Rust编写爬虫代码来抓取精美的图片

目录 一、引言 二、Rust爬虫框架介绍 三、爬虫代码实现 1、创建Scrapy项目 2、创建Spider 3、定义Item对象 4、修改settings.py文件 5、运行爬虫程序 四、图片抓取与存储 五、优化爬虫性能 六、注意事项 总结 一、引言 网络爬虫是一种自动化的网页访问工具&#x…

Ghostbuster:一个准确度高的AI生成文本检测工具

大语言模型如ChatGPT,以其卓越的写作能力引发了问题。学生们纷纷利用这些模型代写作业,导致一些学校不得不采取禁止ChatGPT的措施。此外,这些模型还存在生成带有事实错误的文本的倾向,因此谨慎的读者可能想知道,在信任…

【汇编】Debug的使用

文章目录 前言一、Debug是什么?二、为什么Debug如此重要?三、Debug的使用3.1 Debug的运行3.1 R命令查看寄存器的状态改变寄存器的值 3.2 用D命令查看内存中的内容列出预设地址内存内容列出指定地方的内容列出指定地方的指定大小的内容 3.3 使用e命令修改…

OceanBase持续践行“一体化”产品战略,发布首个一体化数据库长期支持版本

11月16日,在OceanBase2023年度发布会上,OceanBase CEO杨冰宣布,OceanBase将持续践行“一体化”产品战略,为关键业务负载打造分布式数据库。 同时,会上发布一体化数据库的首个长期支持版本OceanBase 4.2.1 LTS&#xff…

12-1- GAN -简单网络-线性网络

功能 随机噪声→生成器→MINIST图像。 训练方法 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的训练,首先固定判别器参数不变,其次判别器应当将生成图像判别为1 loss =…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之进程管理2》(4)

《Linux操作系统原理分析之进程管理2》》(4) 3 进程管理3.5 P、V操作3.5.1 信号量3.5.2 信号量的应用3.5.3 进程同步机制 3.6 进程通信3.6.1 消息通信3.6.2 信箱通信 3.7 死锁3.7.1 死锁的定义3.7.2 死锁产生的必要条件3.7.3 死锁的预防3.7.4 死锁的避免…

系列二十六、idea安装javap -c

一、概述 javap -c是一个能够将.java文件反编译为.class文件的指令,例如我在idea中编写了一个Car.java文件,我想看看这个类被编译后长什么样的,就可以使用该指令进行查看。 二、配置 2.1、 Java Bytecode Decompiler File>Settings>Pl…

基于ssm的高校共享单车管理系统(有报告)。Javaee项目,ssm项目。

演示视频: 基于ssm的高校共享单车管理系统(有报告)。Javaee项目,ssm项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍&…

ssd202d-logo-cmd_bootlogo分析

cmd_bootlogo.c运行过程 common/autoboot.c:593: disp_logo(0); sprintf(cmd_str, "bootlogo %d 1 0 0 0", logo_id); do_display函数 获取对应结构体,里面有各种参数

【Dolphinscheduler3.1.1】二次开发本地启动项目(前端+后端)

背景说明 由于业务的定制化开发,需要对Dolphinscheduler进行二次开发,现将项目的启动步骤记录如下。 一、 基础软件安装(必装项请自行安装) Maven: v3.5,配阿里云仓库地址即可 Node: v16. MySQL (5.7系列) : 两者任选其一即可 JDK (1.8)…

深入解析Vue中的keep-alive组件:优化组件切换与DOM渲染!

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、K…

php连接sqlserver 安装sqlserver 驱动windows系统

第一步下载Windows 上的 Microsoft ODBC Driver for SQL Server ODBC 驱动程序 Microsoft ODBC Driver for SQL Server 直接下载安装即可,安装后可查看安装版本 第二步:下载php_sqlsrv 驱动 安装解压后,会有对应php版本的驱动文件&#xf…

单相浪涌保护器和三相浪涌保护器的区别

浪涌保护器,也称为防雷器,是一种为各种电子设备、仪器仪表、通讯线路提供安全防护的电子装置,主要用于限制过电压和泄放电涌电流。浪涌保护器的核心元件是内部的一个非线性元件。根据非线性元件的不同,浪涌保护器可以分为开关型&a…

准「AI 时代」下,如何衡量程序员的工作效率和生产力?

近 20 家科技、金融和制药公司实施了新的研发效能管理方法,并取得了令人鼓舞的初步结果。 客户报告的产品缺陷减少 20%-30%;员工体验分数提高 20%;客户满意度评分提高 60 个百分点。 大模型和 AIGC 技术催生了软件研发的新范式,也…