烟花算法(FWA)(含开源MATLAB代码)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号: 启发式算法讨论 。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。

烟花算法(Fireworks Algorithm, FWA)是于2010年由谭营教授等人所提出的一种新型群体智能优化算法。该算法在免疫算法中引入了浓度抑制的思想和分布式信息共享机制,具有较强的全局搜索能力。它的原始参考文献如下:

"Tan Y, Zhu Y. Fireworks algorithm for optimizationC//Advances in Swarm Intelligence: First International Conference, ICSI 2010, Beijing, China, June 12-15, 2010, Proceedings, Part I 1. Springer Berlin Heidelberg, 2010: 355-364."

01

灵感来源

根据谭营教授所著的《烟花算法引论》书中的描述,该算法的研究动机来源于在空中爆炸的烟花爆竹。他致力于研究不同类型的进化算法,也尝试把生活中的各种事物与进化算法联系在一起,看是否有所启发。终于在一个除夕夜,谭营老师看到空中绽放的烟花爆竹,脑海中迸发出这种爆炸图像与进化计算中的随机搜索是否可以建立某种联系(如同烟花爆炸图像一样来对问题解空间进行有效搜索)的灵感,并通过模拟烟花爆炸与扩散的机制进行多点同时搜寻全局最优解。

FWA采用的是分布式信息共享机制,可以对全局分布的所有烟花个体进行选择,根据适应度函数值的大小决定每个烟花的爆炸强度以及辐射强度,并在整个搜索过程中跟进与维护当前的最优烟花,使种群多样性得以保持。

02

算法设计

烟花算法的框架主要由以下四个部分组成,分别是爆炸算子(explosiveoperator) 、变异操作(mutation operation) 、映射规则(mapping rule)和选择策略(selection strategy)。组成烟花算法框架的流程图如图1所示。首先,在可行区域中对N 个烟花的初始化群体实行随机选择策略,此时每个烟花个体都表示一个独立的可行解,再对它们的适应度值进行评价,估算所有个体理论上爆炸火花的数量及爆炸区间。接着让群体中的每个烟花都经历爆炸和变异操作,这样爆炸产生的下一代群体就包括烟花爆炸产生的"爆炸火花"以及对其进行高斯变异而产生的"高斯变异火花"。在进行完爆炸和变异的步骤后,需使用映射规则来限制变异后的火花依旧在可行域范围中,并利用选择策略从新生成的下一代N-1个个体中选出并保留最优个体。用这种周而复始逐一迭代的方法将优秀的个体不断传递下去直到选出最优值,或达到算法的最大评估次数。

图1 烟花算法框架

03

计算流程

FWA的计算流程如图2所示。

图2 FWA的流程图

04

实验仿真

对FWA的性能进行简单的测试,将其用于函数寻优。Benchmark函数采用多峰函数Ackley。收敛效果如图3所示,这里就不再做进一步的分析了。

图3 FWA的收敛曲线

05

MATLAB代码

FWA的MATLAB代码可直接通过下方链接提取~

链接:https://pan.baidu.com/s/170SzFwf_qwPcDnjZ-AIdhw

提取码:8023

关注公众号:启发式算法讨论

相关推荐
爱敲代码的小黄1 小时前
神经网络入门指南:从 CNN、RNN 到 Attention
人工智能·面试·程序员
Wang's Blog2 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
一只爱撸猫的程序猿2 小时前
我看着一个 AI 引擎在 14 天里,从"记忆"走进了"搜索"
人工智能·后端·架构
我登哥MVP3 小时前
DeepSeek-Harness-Super-Agent-学习笔记
人工智能·深度学习·神经网络·机器学习·自然语言处理·agent
LucianaiB3 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
apcipot_rain3 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克6053 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
xys_6784 小时前
深挖C++:类和对象(中)
开发语言·c++
灿飞屋4 小时前
Rust 编程其实很简单
开发语言·rust
冬奇Lab4 小时前
一天一个开源项目(第256篇):Anatomy —— 让 Claude 为技术概念「发明一台机器」,画成可交互的等距插画
人工智能·开源