前言

萤火虫优化算法(Firefly algorithm,FA)。由英国剑桥大学的 Yang 等人于 2009 年提出,主要模拟了萤火虫根据个体亮度而相互吸引的行为。作为最新的群智能优化算法之一 , 该算法具有更好的收敛速度和收敛精度 , 且易于工程实现等优点。

截止到 2023 年,算法引用趋势

1、FA算法和PSO引用量对比,二十分之一
2、FA算法的引用量逐年上升
3、除了PSO,比较多的是蚁群和蜂群算法

1. 萤火虫相关的生物行为

萤火虫通过下腹的一种化学反应-生物发光(bioluminescence)。这种生物发光是萤火虫求偶仪式的重要组成部分,也是雄性萤火虫和雌性萤火虫交流的主要媒介,发出光也可用来引诱配偶或猎物,同时这种闪光也有助于保护萤火虫的领地,并警告捕食者远离栖息地。

该算法的建立基于两个关键的概念:发出的光的强度两个萤火虫之间产生的吸引力的程度

FA 中 , 萤火虫发出光亮的主要目的是作为一个信号系统 , 以吸引其他的萤火虫个体 , 其假设为:

  1. 萤火虫不分性别 , 它将会被吸引到所有其他比它更亮的萤火虫那去 ;
  2. 萤火虫的吸引力和亮度成正比 , 对于任何两只萤火虫 , 其中一只会向着比它更亮的另一只移动 , 然而 , 亮度是随着距离的增加而减少的 ;
  3. 如果没有找到一个比给定的萤火虫更亮 , 它会随机移动 。

2. 算法仿生设计

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

根据物理规律:在距离光源一定距离处的光强服从平方反比定律:
I ( r ) = I s r 2 (2-1) I(r) = \frac{I_s}{r^2}\tag{2-1} I(r)=r2Is​​(2-1)

(1) 萤火虫的相对荧光亮度为:

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

(2) 萤火虫的吸引度为:

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

(3) 萤火虫 i i i 被吸引向萤火虫 j j j 移动的位置更新公式如式 (2-4) 所示 :

x i t + 1 = x 1 t + β ∗ ( x j t − x i t ) + α ∗ ϵ i t (2-4) x_i^{t+1} = x_1^t + \beta * (x_j^t - x_i^t) + \alpha * \epsilon_i^t\tag{2-4} xit+1​=x1t​+β∗(xjt​−xit​)+α∗ϵit​(2-4)
其中, x i t x_i^t xit​, x j t x_j^t xjt​ 为萤火虫 i , j i, j i,j 所处的空间位置; α ∈ \alpha \in α∈ [0, 1] 为步长因子; ϵ i t = ( rand − 1 / 2 \epsilon_i^t = (\text{rand} -1/2 ϵit​=(rand−1/2), rand \text{rand} rand 为 [0,1] 上服从均匀分布的随机数。

3. 算法流程

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

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

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

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

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

4. 算法特点

1、借鉴了萤火虫根据发光强度相互吸引的特点,但是简化了很多东西,比如雌雄、发光的模式如闪烁频率等

2、算法需要调整的参数有点多

3、原文提出时是针对多模态问题,但是文中未对多模态如何有效等进行说明,仅仅是在实验上说明多模态更有效

4、推测原因如下:和PSO更新公式挺像,但是去掉了gBest,相当于只是向一个比自己好的个体学习,极大降低算法整体收敛速度,增大了开发的时间和范围从仿生的角度来讲,萤火虫相互吸引是从个体的角度出发的,而且发光强弱只代表对萤火虫的吸引力(从个体角度出发),而不是最优食物或者最优捕食地点的信息(从群体角度出发),所以觉得该算法从仿生的角度出发,并没有考虑到一个群智能在里面,更多的像是个体智能

5. 算法相关改进

由于跟随的人不多,改进都比较常规
– Firefly representation (Either Binary of real value)
– Scheme of Population (Swarm or Multi-Swarm)
– Best Solution calculation (Elitism or non-Elitism)
– Movement of Fireflies can be Uniform, Levy Flights, Gaussian, chaos distribution)
参数自适应控制
混合算法

Kumar, V., Kumar, D. A Systematic Review on Firefly Algorithm: Past, Present, and Future. Arch Computat Methods Eng 28, 3269–3291 (2021).

6. 代码实现(chatGPT)

function [bestX, bestF] = firefly_algorithm(fitness_func, lb, ub, dim, max_gen, pop_size, alpha, beta_min, gamma)
% 萤火虫算法
% fitness_func - 适应度函数
% lb - 自变量下界
% ub - 自变量上界
% dim - 自变量维度
% max_gen - 最大迭代次数
% pop_size - 种群大小
% alpha - 衰减常数
% beta_min - 最小吸引度
% gamma - 步长% 初始化种群pop = create_population(lb, ub, dim, pop_size);% 计算适应度fitness = evaluate_fitness(fitness_func, pop, pop_size);% 寻找最优解[bestF, bestIdx] = min(fitness);bestX = pop(bestIdx, :);% 迭代优化for gen = 1:max_gen% 更新萤火虫位置for i = 1:pop_sizefor j = 1:pop_sizeif fitness(i) > fitness(j)r = norm(pop(i, :) - pop(j, :));beta = beta_min * exp(-alpha * r^2);pop(i, :) = pop(i, :) + beta * (pop(j, :) - pop(i, :)) + gamma * (rand(1, dim) - 0.5);% 边界处理pop(i, :) = max(pop(i, :), lb);pop(i, :) = min(pop(i, :), ub);% 更新适应度fitness(i) = evaluate_fitness(fitness_func, pop(i, :), 1);% 更新最优解if fitness(i) < bestFbestF = fitness(i);bestX = pop(i, :);endendendendend
end
% 初始化种群
function pop = create_population(lb, ub, dim, pop_size)pop = repmat(lb, pop_size, 1) + rand(pop_size, dim) .* repmat((ub - lb), pop_size, 1);
end
% 计算适应度
function fitness = evaluate_fitness(fitness_func, pop, pop_size)fitness = zeros(pop_size, 1);for i = 1:pop_sizefitness(i) = fitness_func(pop(i, :));end
end
function [bestX, bestF] = firefly_algorithm(fitness_func, lb, ub, dim, max_gen, pop_size, alpha, beta_min, gamma)
% 萤火虫算法
% fitness_func - 适应度函数
% lb - 自变量下界
% ub - 自变量上界
% dim - 自变量维度
% max_gen - 最大迭代次数
% pop_size - 种群大小
% alpha - 衰减常数
% beta_min - 最小吸引度
% gamma - 步长

这是函数定义部分,可以看到该函数有9个输入参数,分别为适应度函数、自变量下界、自变量上界、自变量维度、最大迭代次数、种群大小、衰减常数、最小吸引度和步长。函数的输出是最优解和最优解的适应度。

    % 初始化种群pop = create_population(lb, ub, dim, pop_size);% 计算适应度fitness = evaluate_fitness(fitness_func, pop, pop_size);% 寻找最优解[bestF, bestIdx] = min(fitness);bestX = pop(bestIdx, :);

这部分代码是初始化种群,并计算种群中每个个体的适应度。通过调用 create_population 函数初始化种群,然后使用 evaluate_fitness 函数计算种群中每个个体的适应度。接着,寻找种群中的最优解。

    % 迭代优化for gen = 1:max_gen% 更新萤火虫位置for i = 1:pop_sizefor j = 1:pop_sizeif fitness(i) > fitness(j)r = norm(pop(i, :) - pop(j, :));beta = beta_min * exp(-alpha * r^2);pop(i, :) = pop(i, :) + beta * (pop(j, :) - pop(i, :)) + gamma * (rand(1, dim) - 0.5);% 边界处理pop(i, :) = max(pop(i, :), lb);pop(i, :) = min(pop(i, :), ub);% 更新适应度fitness(i) = evaluate_fitness(fitness_func, pop(i, :), 1);% 更新最优解if fitness(i) < bestFbestF = fitness(i);bestX = pop(i, :);endendendendend

这部分代码是迭代优化过程。对于每个萤火虫,它会被其他萤火虫的发光吸引,且吸引度与两个萤火虫之间的距离成反比。然后,萤火虫会向较亮的那个萤火虫靠近,并在吸引度和步长的影响下更新位置。更新后的位置需要进行边界处理,并重新计算适应度,更新最优解。

end
% 初始化种群
function pop = create_population(lb, ub, dim, pop_size)pop = repmat(lb, pop_size, 1) + rand(pop_size, dim) .* repmat((ub - lb), pop_size, 1);
end
% 计算适应度
function fitness = evaluate_fitness(fitness_func, pop, pop_size)fitness = zeros(pop_size, 1);for i = 1:pop_sizefitness(i) = fitness_func(pop(i, :));end
end

这部分代码是两个辅助函数,分别用于初始化种群和计算种群中每个个体的适应度。create_population 函数通过随机生成种群中每个个体的自变量值来初始化种群。evaluate_fitness 函数通过调用适应度函数来计算种群中每个个体的适应度。
总的来说,这段代码实现了萤火虫算法,并可以用于求解连续优化问题。它通过模拟萤火虫在夜空中的闪烁行为,来寻找最优解。

References

[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] 智能优化算法:萤火虫算法-附代码

【智能优化算法】萤火虫优化算法 (Firefly algorithm,FA),2009相关推荐

  1. 《Nature-Inspired Metaheuristic Algorithms》——萤火虫算法 FIREFLY ALGORITHM

    萤火虫算法 1.1 萤火虫的生物现象 在热带的夏夜中,萤火虫会聚集在一起产生短暂而有节奏的光,不同种类的萤火虫的闪光模式往往是不同的.这种闪光的基本功能有三个:①是吸引交配的异性伙伴 ②则是吸引潜在的 ...

  2. 【图像分割】基于萤火虫优化的半监督谱聚类彩色图像分割方法(Matlab代码实现)

    目录 0 概述 1 萤火虫算法 1.1 思想来源 1.2 数学模型 1.2.1 萤火虫相对荧光亮度 1.2.2 萤火虫吸引度 1.2.3 位置更新 1.3 算法步骤 2 基于萤火虫优化的半监督谱聚类彩 ...

  3. 群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)

    获取更多资讯,赶快关注上面的公众号吧! 文章目录 第八章 萤火虫算法 8.1 介绍 8.2 天然萤火虫的行为 8.3 萤火虫算法 8.4 萤火虫算法改进 参考文献 第八章 萤火虫算法 8.1 介绍 萤 ...

  4. 优化算法之萤火虫算法(firefly algorithm)

    智能优化算法有很多是模仿自然界中的生物行为进行的,例如众所周知的粒子群算法.遗传算法等,最近新看到一种算法,萤火虫优化算法(firefly algorithm). FA主要是利用萤火虫发光的特点进行随 ...

  5. 萤火虫算法_智能优化算法萤火虫算法

    今天介绍的算法是萤火虫算法(Firefly Algorithm,简称FA),也是一种仿生优化算法.从算法名字就知道了,该算法的思想来源于萤火虫,具体是萤火虫的闪烁行为.下面是展开对算法相关内容的介绍. ...

  6. 智能优化算法之松鼠算法(Squirrel search algorithm)

    文章目录 背景 Squirrel search algorithm(SSA) SSA Random initialization(随机初始化) Fitness evaluation(适应值评价) So ...

  7. 基于萤火虫优化算法的图像分割

    看腻了关于深度学习的图像分割算法,今天搞一篇基于萤火虫优化算法的图像分割文章,关于现在的各种优化算法(人群搜索算法.人工蜂群算法.帝国竞争算法.智能水滴算法.生物地理优化算法.萤火虫算法.布谷鸟搜索算 ...

  8. 萤火虫算法以及避障算法path planning in uncertain environment by using firefly algorithm(萤火虫算法在实际中的应用)

    萤火虫算法以及避障算法path planning in uncertain environment by using firefly algorithm(萤火虫算法在实际中的应用) 萤火虫算法介绍 2 ...

  9. 智能优化算法:海鸥算法原理及Matlab代码

    智能优化算法:海鸥算法原理及Matlab代码 文章导航 1. 算法原理 2. SOA算法流程 2.1 迁徙行为(exploration ability) 2.2 攻击行为(exploitation a ...

最新文章

  1. GIT之旅【第一篇】
  2. 【Dubbo源码阅读系列】之远程服务调用(上)
  3. SpringCloud接入EDAS——服务发现篇
  4. 快速创建包快捷键大全_99个CAD插件大全,各种工具箱和超实用辅助插件,绘图从此不卡顿...
  5. PIE_SDK.NET功能表
  6. codematic2连接mysql失败_怎么连接oracle数据库
  7. oracle 表关联索引优化,Oracle执行计划调优-超级大表关联超级小表的性能调优
  8. Solr学习总结(1)——Apache Solr快速入门
  9. 一张图看透办公网安全
  10. 基于Java毕业设计优课网设计与实现源码+系统+mysql+lw文档+部署软件
  11. java 预览word文档_Java版office文档在线预览
  12. 对两个等长升序的序列查找中位数
  13. 荣耀 android 5.0 root,华为荣耀畅玩5C获取EMUI5.0 安卓7.0系统的root教程
  14. itext设置字体间距_Java使用iText生成pdf
  15. 百度推广技巧:如何提高网站点击率?
  16. cupy利用GPU来加速你的numpy操作
  17. 被割裂的数据思维(古代战争中的应用)
  18. 基于FFMPEG采集摄像头图像编码MP4视频+时间水印
  19. intersect的用法
  20. 新中新 金龙一卡通 TPE_StartTPE 加载授权文件失败 JAVA

热门文章

  1. mysql主键能否有实际意义_数据库主键不应该具有任何业务意义
  2. C语言实战小项目(三)通讯录
  3. 论文|RecSys17-序列推荐模型 Translation-based Recommendation
  4. canvas冬天下雪js特效代码
  5. ThinkBook 13x 酷睿版 评测
  6. 2022-2028年中国储热行业市场现状分析及未来前景规划报告
  7. 4款堪称手机神器的APP,每个都可以玩转手机,尤其是第三个
  8. Python 制作微信全家福
  9. 函数递归大总结,码住就完事啦
  10. 校园文化建设计算机教室标语,学校标语:校园文化建设标语