智能优化算法:萤火虫算法-附代码

2024-06-18 07:38

本文主要是介绍智能优化算法:萤火虫算法-附代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

智能优化算法:萤火虫算法-附代码

文章目录

  • 智能优化算法:萤火虫算法-附代码
    • 1.算法原理
    • 2.算法结果
    • 3.参考文献
    • 4.Matlab代码

摘要:萤火虫算法(Fire-fly algorithm,FA)由剑桥大学 Yang 于 2009 年提出 , 作为最新的群智能优化算法之一 , 该算法具有更好的收敛速度和收敛精度 , 且易于工程实现等优点。

1.算法原理

在FA 中 , 萤火虫发出光亮的主要目的是作为一个信号系统 , 以吸引其他的萤火虫个体 , 其假设为 : 1) 萤火虫不分性别 , 它将会被吸引到所有其他比它更亮的萤火虫那去 ; 2) 萤火虫的吸引力和亮度成正比 , 对
于任何两只萤火虫 , 其中一只会向着比它更亮的另一只移动 , 然而 , 亮度是随着距离的增加而减少的 ;3) 如果没有找到一个比给定的萤火虫更亮 , 它会随机移动 。

如上所述 , 萤火虫算法包含两个要素 , 即亮度和吸引度 . 亮度体现了萤火虫所处位置的优劣并决定其移动方向 , 吸引度决定了萤火虫移动的距离 , 通过亮度和吸引度的不断更新 , 从而实现目标优化 . 从数学角度对萤火虫算法的主要参数进行如下描述 :

  1. 萤火虫的相对荧光亮度为:
    I = I 0 ∗ e − γ r i , j (1) I = I_0*e^{-\gamma r_{i,j}}\tag{1} I=I0eγri,j(1)
    其中 , I 0 I_0 I0为萤火虫的最大萤光亮度 , 与目标函数值相关 , 目标函数值越优自身亮度越高 ; γ \gamma γ为光强吸收系数 , 荧光会随着距离的增加和传播媒介的吸收逐渐减弱 ; r i , j r_{i,j} ri,j为萤火虫 i i i j j j 之间的空间距离 。

  2. 萤火虫的吸引度为
    β = β 0 ∗ e − γ r i , j 2 (2) \beta = \beta_0*e^{-\gamma r_{i,j}^2} \tag{2} β=β0eγri,j2(2)
    其中 , β 0 \beta_0 β0 为最大吸引度 ; γ \gamma γ为光强吸收系数 ; r i , j r_{i,j} ri,j为萤火虫 i i i j j j 之间的空间距离。

  3. 萤火虫 i 被吸引向萤火虫 j 移动的位置更新公式如式 (3) 所示 :
    x i = x i + β ∗ ( x j − x i ) + α ∗ ( r a n d − 1 / 2 ) (3) x_i = x_i +\beta*(x_j-x_i)+\alpha*(rand - 1/2) \tag{3} xi=xi+β(xjxi)+α(rand1/2)(3)
    其中 , x i , x j x_i,x_j xi,xj 为萤火虫 i i i j j j 所处的空间位置 ; α ∈ [ 0 , 1 ] α ∈[0,1] α[0,1] 为步长因子 ; r a n d rand rand 为 [0,1] 上服从均匀分布的随机数 。

算法步骤如下:

(1) 初始化萤火虫算法参数.

(2) 计算各萤火虫的亮度并排序得到亮度最大的萤火虫位置.

(3)判断迭代是否结束:判断是否达到最大迭代次数 T ,达到则转(4),否则转(5).

(4) 输出亮度最大的萤火虫位置及其亮度.

(5) 更新萤火虫位置:根据式(3)更新萤火虫的位置,对处在最佳位置的萤火虫进行随机扰动,搜索次数增加1 ,转(2),进行下一次搜索.

2.算法结果

在这里插入图片描述

3.参考文献

[1] Yang X S, Deb S. Eagle strategy using l´ evy walk and firefly algorithms for stochastic optimization. Nature Inspired Cooperative Strategies for Optimization (NICSO 2010), Berlin Heidelberg: Springer, 2010. 101−111

[2] 田梦楚, 薄煜明, 陈志敏, et al. 萤火虫算法智能优化粒子滤波[J]. 自动化学报, 2016, 42(001):89-97.

4.Matlab代码

萤火虫算法
改进算法matlab代码

名称说明或者参考文献
一种改进的进化模型和混沌优化的萤火虫算法(FAEC)[1]李肇基,程科,王万耀,崔庆华.一种改进的进化模型和混沌优化的萤火虫算法[J].计算机与数字工程,2019,47(07):1605-1612.

算法相关应用

名称说明或者参考文献
萤火虫优化的BP神经网络(预测)https://blog.csdn.net/u011835903/article/details/112149776(原理一样,只是优化算法用萤火虫)
萤火虫优化的BP神经网络(分类)https://blog.csdn.net/u011835903/article/details/112149394(原理一样,只是优化算法用萤火虫)
基于萤火虫算法优化的SVM数据分类https://blog.csdn.net/u011835903/article/details/110523352(原理一样,只是优化算法用萤火虫)
萤火虫优化的最大熵多阈值分割https://blog.csdn.net/u011835903/article/details/108203775(原理一样,只是优化算法用萤火虫)
萤火虫算法优化的otsu多阈值分割https://blog.csdn.net/u011835903/article/details/108019744(原理一样,只是优化算法用萤火虫)
萤火虫优化的PID参数优化https://blog.csdn.net/u011835903/article/details/109306387(原理一样,只是优化算法用萤火虫)
基于萤火虫算法的无线传感器网(WSN)覆盖优化https://blog.csdn.net/u011835903/article/details/109262039(原理一样,只是优化算法用萤火虫)
基于萤火虫算法的3D无线传感器网(WSN)覆盖优化https://blog.csdn.net/u011835903/article/details/113834323(原理一样,只是优化算法用萤火虫)

个人资料介绍

这篇关于智能优化算法:萤火虫算法-附代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071678

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave