烟花算法(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

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

相关推荐
醒醒该学习了!2 小时前
人工智能伦理与职业操守(理论篇)
人工智能
五号厂房2 小时前
🔥 Claude Code 源码解析(三):揭秘工具系统的精妙设计
人工智能
程序员佳佳2 小时前
我在 Windows 和低配 Linux 上做 RAG:Milvus、FAISS、向量 API 中转的中立实测
linux·人工智能·windows·gpt·aigc·milvus·faiss
AI原来如此2 小时前
Claude与ChatGPT激战正酣,国内AI中转站却突破2000家
人工智能·ai·chatgpt·大模型·编程
天丁o2 小时前
企业 AI Agent 工程化落地:从需求边界到系统集成的 6 个环节
数据库·人工智能
189228048612 小时前
NV088固态MT29F16T08EWLCHD8-RES:C
人工智能
光影6272 小时前
Python接口自动化测试----Requests库基础入门
开发语言·python·测试工具·pycharm·自动化
程序媛_2 小时前
【Python】连接PostgreSQL获取手机验证码
开发语言·python·postgresql
每日综合2 小时前
什么是模型服务平台MoMA?移动云一站式AI模型管理与应用中枢
人工智能
ch.ju2 小时前
Java Programming Chapter 4——Inherited call
java·开发语言