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

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

相关推荐
飞哥数智坊5 分钟前
直播半小时,我聊了聊 Agent 最常见的 3 个疑问
人工智能
张宇Joaquin9 分钟前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
736c16 分钟前
C语言-数组 07
c语言·开发语言
shehuiyuelaiyuehao21 分钟前
算法31,前缀和,可被k整除的子数组
数据结构·python·算法
ggb喔33 分钟前
AI 原生攻防时代:2026 年渗透测试与逆向开发的范式重构
人工智能·重构
宸津-代码粉碎机43 分钟前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
克里斯蒂亚诺更新1 小时前
机器学习库sklearn的主要任务
人工智能·机器学习·sklearn
先跑起来再说1 小时前
Qavor:一个能跑、能观测、能扩展的开源 AI Agent 工作台
人工智能·开源
Mr数据杨1 小时前
从文本特征到回归建模 Syllable Counting Model 实战解析
人工智能·数据分析·kaggle竞赛
HIT_Weston1 小时前
201、【Agent】【OpenCode】JS 语法:setTimeout 七种常用形式
人工智能·agent·opencode