萤火虫优化算法

2024-04-13 20:44
文章标签 算法 优化 萤火虫

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

萤火虫优化算法

萤火虫优化算法(Firefly Algorithm,FA)是一种模仿自然界萤火虫发光与移动行为的一种群智能优化算法,由Yang Xin She于2009年提出。

算法原理

FA优化算法以萤火虫位置表示问题的可行解,算法依据萤火虫发光的亮度相互吸引的规律,在一定的范围内,实现萤火虫之间的位置移动从而实现解的搜索和更新。FA算法与优化问题的对应关系如下表所示。

CS优化问题
萤火虫位置可行解: X i = ( x i 1 , x i 2 , … , x i D ) X_i=(x_{i1},x_{i2},\dots,x_{iD}) Xi=(xi1,xi2,,xiD)
萤火虫亮度适应度

算法假设条件如下:

  • 算法中的所有萤火虫没有性别差异,任意两只萤火虫个体之间都可以相互吸引。
  • 萤火虫的吸引力与其亮度成正比,亮度低的萤火虫会向亮度高的个体转移,若两只萤火虫的亮度相等,则萤火虫会各自随机移动。
  • 萤火虫个体的发光亮度与求解问题的目标函数相关联,适应度越高,其亮度越高。

算法超参数

  • α \alpha α:步长因子;
  • β m a x \beta_{max} βmax:萤火虫光强度上界;
  • β m i n \beta_{min} βmin:萤火虫光强度下界;
  • γ \gamma γ:光吸收系数;
  • NP:种群大小;
  • Gmax:最大迭代数。

FA 认为光照强度和萤火虫之间的吸引力是两个重要变量。每只萤火虫都会被另一只比自己亮的萤火虫吸引。换句话说,任何一只萤火虫的吸引力都与其光强度成正比,而与测量光强度的距离成反比。

吸引力

吸引力定义为萤火虫 i i i观察到萤火虫 j j j的光强度,萤火虫的吸引力与光强度成正比,与测量光强度的距离成反比,其计算公式如式(1)所示。
β ( r ) = ( β m a x − β m i n ) e − γ r 2 + β m i n (1) \beta(r) = (\beta_{max} - \beta_{min}) e^{-\gamma r^2} + \beta_{min} \tag{1} β(r)=(βmaxβmin)eγr2+βmin(1)

  • β ( r ) \beta(r) β(r)称为萤火虫 i i i和萤火虫 j j j之间的吸引力;
  • r i j r_{ij} rij表示萤火虫 i i i和萤火虫 j j j的欧式距离。
    r i j = ∑ d = 1 D ( x i d − x j d ) (2) r_{ij}= \sqrt{\sum_{d=1}^D(x_{id}-x_{jd})} \tag{2} rij=d=1D(xidxjd) (2)

位置更新

如果萤火虫 j j j比萤火虫 i i i更亮,那么萤火虫 i i i将会向萤火虫 j j j移动
X i t + 1 = X i t + β ( r ) ( X j t − X i t ) + α ε (3) X_i^{t+1} = X_i^t + \beta(r)(X_j^t - X_i^t) + \alpha \varepsilon \tag{3} Xit+1=Xit+β(r)(XjtXit)+αε(3)

  • ε \varepsilon ε表示区间[-0.5,0.5]上均匀分布的随机数

对于当前种群中最亮的萤火虫,将会在其位置的局部进行开发。
X b t + 1 = X b t + α ε (4) X_b^{t+1}=X_b^t + \alpha \varepsilon \tag{4} Xbt+1=Xbt+αε(4)

初始化

初始解应当覆盖整个搜索空间,一般采用均匀分布随机生成初始解。
x i j 0 = x i , j m i n + r a n d ( 0 , 1 ) ⋅ ( x i , j m a x − x i , j m i n ) (5) x_{ij}^0=x_{i,j}^{min}+rand(0,1) \cdot (x_{i,j}^{max} - x_{i,j}^{min}) \tag{5} xij0=xi,jmin+rand(0,1)(xi,jmaxxi,jmin)(5)
其中,rand(0,1)表示0-1之间的随机数, x i j m a x x_{ij}^{max} xijmax x i j m i n x_{ij}^{min} xijmin分别表示该问题第j个维度变量的上下界。

伪代码


输入:超参数 ( α , β 0 , γ , N P , G m a x ) (\alpha,\beta_0,\gamma,NP,Gmax) (α,β0,γ,NP,Gmax)和搜索边界 X m i n X_{min} Xmin, X m a x X_{max} Xmax
输出:最优解
1:初始化
2:根据式(5)初始化位置种群X
3:计算种群适应度并按照适应度排序
4:记录群体最优gbest
5:优化搜索
6:For G = 1:Gmax
7: \qquad For i = 1:NP
8: \qquad \qquad For j = i:NP
9: \qquad \qquad \qquad If X i X_i Xi优于 X j X_j Xj
10: \qquad \qquad \qquad \qquad 按照式(3)或式(4)更新 X j X_j Xj
11: \qquad \qquad \qquad End If
12:计算种群适应度并按照适应度排序
13: \qquad 更新群体最优 g b e s t gbest gbest
14:End


注:优化算法并不保证能够得到问题的最优解,因此,算法输出的最优解并非问题的整体最优解,而是搜索过程中最好的一个解。

实验

实验选取二维的平方和函数,函数的最小值在点(a,b)取得,最小值为0。
f ( x 1 , x 2 ) = ( x 1 − a ) 2 + ( x 2 − b ) 2 (6) f(x_1,x_2) = (x_1 - a)^2 + (x_2-b)^2 \tag{6} f(x1,x2)=(x1a)2+(x2b)2(6)

实验参数如下:

参数
问题维度D2
种群数NP30
最大进化次数Gmax50
α \alpha α0.2
β m a x \beta_{max} βmax1
β m i n \beta_{min} βmin0.2
γ \gamma γ1
取值范围(-100,100)

FA算法搜索过程

FA算法在搜索中,种群收敛较快,种群多样性较差。

FA算法收敛曲线

最优值最差值平均值标准差
1.386e-81.937e-65.766e-74.785e-7

代码获取

关注微信公众号数学模型与算法回复 FA算法获取python代码

参考文献

[1] Yang X S. Firefly algorithms for multimodal optimization[C]//International symposium on stochastic algorithms. Berlin, Heidelberg: Springer Berlin Heidelberg, 2009: 169-178.
[2] Li J, Wei X, Li B, et al. A survey on firefly algorithms[J]. Neurocomputing, 2022, 500: 662-678.

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



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

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k