超详细 | 萤火虫算法原理及其实现(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

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

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

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

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

相关文章

MPN – 制造零件号

S/4 1610 中的 MPN – 基于 NAST 的输出管理 我试图查找有关 MPN 设置的信息,但找不到详细的配置步骤。在浏览了一些信息和 help.sap 链接后,我能够在 S/4 1610 系统中配置 MPN 设置,这与使用旧输出类型(Nast 和输出类型 NEU&…

【 云原生 | K8S 】kubeadm 部署Kubernetes集群

目录 1 环境准备 2 所有节点安装docker 3 所有节点安装kubeadm,kubelet和kubectl 4 部署K8S集群 4.1 查看初始化需要的镜像 4.2 初始化kubeadm 4.3 设定kubectl 4.4 所有节点部署网络插件flannel master(2C/4G,cpu核心数要求大于2&am…

Jenkins代码检测和本地静态检查

1:Jenkins简介 Jenkins是一个用Java编写的开源的持续集成工具;Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测…

【数据结构】10道经典面试题目带你玩转链表

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.移除链表元素 二.反转链表 三.链表的中间结点 四.链表中倒数第K个结点 五.合并两个有序链表 六.链表分割 七.链表的回文结构 八.相交链表 九.环形链表 一.移…

C++初阶 日期类的实现(上)

目录 一、前置准备 1.1获得每月的天数 1.2获得每年的天数 1.3构造函数,析构函数和拷贝构造函数 二、日期与天数的,-,,-实现 2.1运算符重载 2.2运算符的实现 2.3-运算符的实现 2.4-运算符的实现 三、,--的实现 3.1前置,后置的实现 …

(带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程

源码简介: 1、会员管理: 该系统分为三个级别的会员流程:总站管理员、代理与会员(会员有普通会员、中级会员和高级会员三个等级)。总站管理员可以添加代理用户并为其充值余额,代理用户可以为普通用户充值余…

java 访问sqlserver 和 此驱动程序不支持jre1.8错误

sqlserver数据如下; TestSQL.java; import java.sql.*;public class TestSQL {public static void main(String[] args) throws ClassNotFoundException, SQLException {String driverName "com.microsoft.sqlserver.jdbc.SQLServerDriver";…

[ATC复盘] abc329 20231118

[ATC复盘] abc329 20231118 总结A - Spread1. 题目描述2. 思路分析3. 代码实现 B - Next1. 题目描述2. 思路分析-3. 代码实现 C - Count xxx1. 题目描述2. 思路分析3. 代码实现 D - Election Quick Report2. 思路分析3. 代码实现 E - Stamp2. 思路分析3. 代码实现 F - Colored…

git基本操作(配图超详细讲解)

个人主页:Lei宝啊 愿所有美好如期而遇 目录 创建git本地仓库 配置仓库 认识工作区,暂存区,版本库 修改文件 版本回退 撤销修改 删除文件 创建git本地仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂…

内网穿透的应用-通过内网穿透快速搭建公网可访问的Spring Boot接口调试环境

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

windows nodejs 15.0.0下载安装

下载 Node v15.0.0 (Current) | Node.js (nodejs.org) 下载地址 https://nodejs.org/dist/v15.0.0/node-v15.0.0-x64.msi 安装 双击运行 等待安装完成 确认安装成功 管理员运行cmd 查看版本号

数据结构初阶leetcodeOJ题(二)

目录 第一题 思路: 第二题 思路 第三题 描述 示例1 思路 总结:这种类似的题,都是用快慢指针,相差一定的距离然后输出慢指针。 第一题 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val…

工程化实战 - 前端AST(进阶)

###脚手架 *快速自动化搭建启动工具 目标: ####第一步:处理依赖 npm i path npm i chalk4.1.0 npm i fs-extra npm i inquirer8.2.2 npm i commander npm i axios npm i download-git-repo //ora easy-table figlet ####第二步:处理工程入口 ####3.加入命令交互 交互好帮手…

【计算机网络】TCP协议

文章目录 TCP协议TCP的结构TCP的特点 TCP如何保证可靠传输确认应答(可靠机制)超时重传(可靠机制)连接管理(可靠机制)滑动窗口(效率机制)流量控制(可靠机制)拥…

window系统vscode 编译wvp前端代码

下载代码 wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等…

zsh和ohmyzsh安装指南+插件推荐

文章目录 1. 安装指南2. 插件配置指南3. 参考信息 1. 安装指南 1. 安装 zsh sudo apt install zsh2. 安装 Oh My Zsh 国内访问GitHub sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"这将安装 Oh My Zsh 和所…

Xrdp+Cpolar实现远程访问Linux Kali桌面

XrdpCpolar实现远程访问Linux Kali桌面 文章目录 XrdpCpolar实现远程访问Linux Kali桌面前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于…

从傅里叶变换,到短时傅里叶变换,再到小波分析(CWT),看这一篇就够了(附MATLAB傻瓜式实现代码)

本专栏中讲了很多时频域分析的知识,不过似乎还没有讲过时频域分析是怎样引出的。 所以本篇将回归本源,讲一讲从傅里叶变换→短时傅里叶变换→小波分析的过程。 为了让大家更直观得理解算法原理和推导过程,这篇文章将主要使用图片案例。 一…

数据结构第四课 -----线性表之栈

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

C_12练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) C 风格的注释,也称块注释或多行注释,以()…