烟花算法是由北京大学谭营教授提出了烟花算法。这是一种既简单又具有较强优化能力的算法。根据烟花爆炸的原理,每个烟花爆炸之后会选择最好的烟花作为下一次爆炸的烟花。而且在多个烟花爆炸的同时,每个烟花都是相互独立的,寻找最优爆炸烟花只在自身本身爆炸范围内寻找。该算法的鲁棒性体现在自身算法的特点上。适应度值的不同,会导致爆炸半径及产生烟火的数量不同,每个烟花个体之间是相互独立又是相互交流的,非常便捷。
一、烟花算法组成
爆炸烟花:烟花爆炸产生火花。在此过程中,主要包括了爆炸强度、爆炸幅度、位移操作三种操作。
变异烟花:具有高斯变异的特性的烟花。主要是高斯变异操作。
映射规则:当越界时重新映射操作即对超出范围在边界上的火花进行处理。
在映射规则中,主要由镜面反射规则、模运算规则、随机映射规则这三种方法进行映射。
选择策略:将下一代优秀的个体选取出来。主要包括基于距离的选择策略。
![](https://img-blog.csdnimg.cn/20210807161448672.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpd2VuamllMA==,size_16,color_FFFFFF,t_70)
烟花算法的描述:
烟花的爆炸半径、产生的火花数量公式如下:
![](https://img-blog.csdnimg.cn/20210807161741822.png)
其中, Ymin作为当前烟花群体中最好个体的适应度值, Ymax作为当前烟花群体中最差个体的适应度值。 R和S代表着爆炸半径的调节和爆炸火花数目;作为分数, 以避免出现坟墓为0的情况。为了均衡起见,好的烟花个体不能产生较多火花,差的烟花个体不能产生较少火花,针对这一问题,对爆炸火花作了相应的处理:
![](https://img-blog.csdnimg.cn/20210807162013381.png)
在上式中,根据求解应用的实际问题不同,a和b作为取整函数对所取的数值是相异的,在这里当作常数处理。
根据下列方法产生爆炸火花。
上式中A是一个常量(调节爆炸半径)。
![](https://img-blog.csdnimg.cn/20210807162140489.png)
在上式中,当前的迭代次数用t表示,调节核心烟花爆炸半径用变量Ca和Cr来进行调节,表示半径的增大与减小。 Xb代表新建的最优的火花个体, Xcf表示核心烟花。
(2)根据所述方法产生变异火花。
![](https://img-blog.csdnimg.cn/20210807162332683.png)
![](https://img-blog.csdnimg.cn/2021080716240427.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpd2VuamllMA==,size_16,color_FFFFFF,t_70)
映射规则处理超出边界的火花:
![](https://img-blog.csdnimg.cn/20210807162433853.png)
在这一部分中,我们要对优秀的个体进行选取,我们会选用精英选择策略的方法选择出下一代,并进行逐代传递。我们会从烟花群体和爆炸的火花中来进行选取。选择出来的N个个体就是最优的个体,将这些给下一代,然后在这些范围内,能将适应度值最小的作为最优的个体,对于剩下的N-1个个体采用随机选择策略。
2.5烟花算法的特点
基本的烟花算法具有以下几个特点。下面对这几个特点进行说明。
(1)多样性。首先是算子的不同,由于在爆炸的过程中,会产生烟花变异,所以烟花算子有两种,第一种是爆炸算子,第二种是高斯变异算子。它的多样性表现
现在,烟花的适应度值不同,所以爆炸半径,数量也都不尽相同,这也就保证了烟花的多样性,每个爆炸算子的适应度值不同,在同一个幅度范围内。
(2)爆发性。爆发性作为烟花算法特有的优点,烟花算法每迭代一次,就会爆炸一次,产生不同的火花,同时可以进行多点爆炸,这说明烟花算法具有爆发性。
(3)简单性。是由于烟花进行爆炸时,每个进行爆炸的烟花都是根据自己的特性进行爆炸,对于信息的交互是互不影响,也只有在自己的范围内进行。这就是其简单性的由来,因此具有简单性。
(4)分布式。由于其简单性,并且并行烟花可以进行多点同时爆炸,所以信息是通过相互作用而进行交流的,具有并行的特点。
(5)扩充性。由于烟花算法中烟花的爆炸半径不同,烟花数量肯定也不同,因此数量的增加对其不会产生影响,当然减少数量也对其不会有影响。因而系统的可扩充性很强。
烟花算法优化参数的通用代码如下:
https://download.csdn.net/download/liwenjie0/20833087