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

在这里插入图片描述

群智能(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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通往优秀软件架构师之路:掌握技术核心,修炼基础原理【文中送书,十本任选】

通往优秀软件架构师之路:掌握技术核心,修炼基础原理 《高并发架构实战:从需求分析到系统设计》《架构师的自我修炼:技术、架构和未来》《中台架构与实现:基于DDD和微服务》《分布式系统架构:架构策略与难题…

Python利器:Requests-HTML——网络爬虫的得力助手

概要 在Python的世界里,网络爬虫是一个非常热门的领域。而在这个领域中,Requests-HTML是一个强大的工具,它能够让我们轻松地处理HTML页面,从而获取需要的数据。本文将详细介绍Requests-HTML的特点、使用方法和一些实际应用案例&a…

JS-项目实战-删除库存记录

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);}} }//当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取…

为什么都说学医的转行网络安全行业更容易些?

网络系统坏了,被入侵破坏了,找安全工程师防护修补。如果没有修好,我可以不给钱,再找一家能修好的。但是看病就不一样了,就算医生没有给我治好病,也照样要收医疗费。 这样的类比乍一听上去好像挺有道理&…

Redis集群介绍及安装Redis7.2.3集群

概念: 【Redis】高可用之三:集群(cluster) - 知乎 实操: Redis集群三种模式 主从模式 优势: 主节点可读可写 从节点只能读(从节点从主节点同步数据) 缺点: 当主节点…

自动驾驶大模型,是怎么学习「世界知识」的?

近期,科技产业大佬不约而同地发出一个非常强烈的信号:自动驾驶走向完全的成熟,必须要被AI大模型重构。 中国工程院院士、清华大学教授、清华智能产业研究院(AIR)院长张亚勤认为,「自动驾驶是高度复杂的、最…

2023 年 数维杯(D题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看数维杯D题! 问题一:最佳清…

python3.8 安装 ssl 模块 和 _ctypes 模块

这文章目录 前情提要安装 openssl-1.1.1重新编译安装 python3.8-rpath 编译选项介绍python3.8 跟 python3.10 的区别那要怎么解决这个问题呢,我想到有四种解决方案: 前情提要 我在之前给 python3.10 安装 ssl 模块后以为该步骤 “对于 python3.6、pytho…

wpf devexpress 自定义统计

总计统计和分组统计包含预定义总计函数。这些函数允许你计算如下: 数据列的数量(Count) 最大和最小值(Max和Min) 总计和平均值(Sum和Average) 处理GridControl.CustomSummary 事件或者使用 GridControl.CustomSumm…

Ubuntu 22.04 LTS ffmpeg mp4 gif 添加图片水印

ffmpeg编译安装6.0.1,参考 Ubuntu 20.04 LTS ffmpeg gif mp4 互转 许编译安装ffmpeg ;解决gif转mp4转换后无法播放问题-CSDN博客 准备一个logo MP4添加水印 ffmpeg -i 2.mp4 -vf "movielogo.png[watermark];[in][watermark]overlayx10:y10[out]&…

给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一算法:

1.给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一个算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。 (2)按名次列出每个学生的姓名与分数。 学生的考试成绩通过键盘输入数据建立…

RK3588平台开发系列讲解(项目篇)嵌入式AI的学习步骤

文章目录 一、嵌入式AI的学习步骤1.1、入门Linux1.2、入门AI 二、瑞芯微嵌入式AI2.1、瑞芯微的嵌入式AI关键词2.2、AI模型部署流程 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将给大家介绍什么是嵌入式AI。 一、嵌入…

[Jenkins] 物理机 安装 Jenkins

这里介绍Linux CentOS系统直接Yum 安装 Jenkins,不同系统之间类似,操作命令差异,如:Ubuntu用apt; 0、安装 Jenkins Jenkins是一个基于Java语言开发的持续构建工具平台,主要用于持续、自动的构建/测试你的软…

【Python语言】字典的使用方法总结

目录 1、基本知识 1.1 定义 1.2 定义字典变量 1.3 定义空字典 2、字典的常用方法介绍 2.1 基于key获取value 2.2 嵌套字典 2.3 新增元素 2.4 更新元素 2.5 删除元素 2.6 清空字典 2.7 获取全部的key 2.8 遍历字典 2.9 统计字典内的元素数量 3、 字典常用操作总结…

控制器宕机之SBC相关

简介: 本文主要以FS6500系列展开介绍,介绍深度安全故障(深度睡眠)状态的转换,以及相关寄存器值的变化过程 1.控制器什么时候会因为SBC停止工作? 窗口看门狗未及时喂狗达到故障计数最大值芯片进入某种(deep fail state)模式或LP-DFS模式或LP-Sleep模式…

苹果电脑录屏快捷键,让你成为录屏达人

“苹果电脑录屏好麻烦呀,操作步骤很繁琐,有人知道苹果电脑怎么快速录屏呀,要是有快捷键就更好了,大家知道苹果电脑有录屏快捷键吗?谢谢啦!” 苹果电脑以其直观的用户界面和卓越的性能而闻名,而…

防范Java多线程陷阱:探秘ABA问题的起因及解决之道!

一、概念 CAS(Compare and Swap)是一种乐观锁机制,它是一种基于硬件指令实现的原子操作,可以在不使用传统互斥锁的情况下,保证多线程对共享变量的安全访问。在Java中,我们可以使用Atomic类和AtomicReferenc…

使用 Python 的基于边缘和基于区域的分割

引言 在本文中,我们将重点讨论基于边缘和基于区域的分割技术。在讨论细节之前,我们需要了解细分它们分别是什么以及它们是如何工作的。 分割 图像分割是一种将数字图像分割成各种图像对象的技术。 区域中的每个像素(图像对象)在某些属性(如颜色、亮度…

Evil靶场

Evil 1.主机发现 使用命令探测存活主机,80.139是kali的地址,所以靶机地址就是80.134 fping -gaq 192.168.80.0/242.端口扫描 开放80,22端口 nmap -Pn -sV -p- -A 192.168.80.1343.信息收集 访问web界面 路径扫描 gobuster dir -u http…

FDTD自定义材料

官方原文档链接 该文档内容摘自原文档及相关链接 从txt导入材料数据 各项同性材料的3Dmaterials数据 txt文件中应包含以下三列。第一列为波长或频率;第二列为折射率或介电常数实部;第三列为折射率或介电常数虚部。 420 5.08894 0.237724 440 4.78…