优化算法之萤火虫算法
仿生群智能优化算法是近些年来国内外学者研究的热点问题,其主要的思想是研究或者模仿自然界群体生活的生物的社会行为而构造的随机搜索方法。目前研究比较多的有两种算法:蚁群算法(ACO)和粒子群算法(PSO)。有研究结果表明,仿生群智能优化算法为许多应用领域提供了新思路和新方法。
2005年,印度学者K.N.Krishnanand和D.Ghose在IEEE群体智能会议上提出了一种新的群智能优化算法,人工萤火虫群优化(Glowworm Swarm Optimization, GSO)算法。2009年,剑桥学者Xin-She Yang根据自然界中萤火虫的发光行为提出萤火虫算法(Firefly Algorithm, FA)。自这两种萤火虫算法提出以来,各国学者对这两种算法进行了研究、改进和应用。经过几年的发展,在连续空间的寻优过程和一些生产调度方面萤火虫算法具有良好的应用前景。
GSO和FA有相似的方面,但在具体实现方面有一定差异。本文具体介绍和分析了这两种算法及其改进算法。
GSO算法
在GSO算法中,每一只人工萤火虫散步在解空间中,这些萤火虫带着荧光,并且拥有各自的视线范围,称为决策域(local-decision range)。它们的亮度与自己所在位置上的目标值有关。越亮的萤火虫表示它所在的位置越好,即有较优的目标函数值。萤火虫会在决策域范围内寻找邻居集合,在集合当中,越亮的邻居拥有越高的吸引力吸引此萤火虫往这个方向移动,每一次的飞行方向会随着挑选的邻居不同而改变。此外,决策域范围的大小会受到邻居数量的影响,当邻居密度越低,萤火虫的决策半径会加大以寻找更多的邻居;当邻居密度越高,它的决策半径会缩小。最后,大部分萤火虫会聚集在多个位置上,即达到极值点。简单的说,GSO算法主要包含四个阶段:萤火虫的部署(初始化)、荧光素更新、位置更新阶段和决策半径更新阶段。
算法数学描述
(1)初始化
在可行域中随机放置n个萤火虫,并赋予每个萤火虫的荧光素为l0,动态决策域为r0。初始化步长s,领域阈值nt,荧光素消失率ρ,荧光素更新率γ,动态决策域更新率β,萤火虫感知域rs,迭代次数M。
(2)更新萤火虫i的荧光素
li(t)=(1−ρ)li(t−1)+γJ(xi(t))
其中J(xi(t))表示萤火虫i在t时刻所在位置的目标函数值;li(t)表示萤火虫i在t时刻荧光素值。
(3)寻找萤火虫i的邻居
Ni(t)={j:||xj(t)−xi(t)||
其中Ni(t)表示萤火虫i在t时刻邻居的集合;rid(t)表示萤火虫i在t时刻动态决策域。
(4)确定萤火虫i动作移动方向
j=max(pi)
其中pi=(pi1,pi1,...,piNi(t)),其中pij(t)=lj(t)−li(t)∑k∈Ni(t)(lk(t)−li(t))为转移概率。
(5)更新萤火虫i的位置
Xi(t+1)=Xi(t)+s(Xj(t)−Xi(t)||Xj(t)−Xi(t)||)
(6)更新动态决策域
rid(t+1)=min{rs,max{0,rid(t),β(nt−|Ni(t)|)}}
算法基本流程
初始化各个参数;
随机初始化第i(i=1,2,...,n)个萤火虫在目标函数搜索范围内的位置;
计算萤火虫i在t时刻的荧光素值li(t);
每只萤火虫在其动态决策域半径rid(t+1),选择荧光素值比自己高的个体组成其领域集Ni(t),其中0
id(t)≤rs。rs为萤火虫个体的感知半径。 计算萤火虫i移向邻域集内个体j的概率pij(t);
利用轮盘赌的方式算则个体j,然后移动,更新位置;
更新萤火虫动态决策域半径的值;
是否到达最大迭代次数或者要求精度,如果达到这转下一步骤,否则转向步骤4;
输出全局极值点和最优个体值。
FA算法
算法应用原理
把空间各点看成萤火虫,利用发光强的萤火虫会吸引发光弱的萤火虫的特点。在发光弱的萤火虫向发光强的萤火虫移动的过程中,完成位置的迭代,从而找出最优位置,即完成了寻优过程。
萤火虫算法有以下条件:
1. 假设所有萤火虫都是同一性别且相互吸引;
2. 吸引度只与发光强度和距离有关,发光强的萤火虫会吸引周围发光弱 的萤火虫,但是随着距离的增大吸引度逐渐减小,发光强的萤火虫会做随机运动;
3. 发光强弱由目标函数决定,在制定区域内与指定函数成比例关系。
搜索过程和萤火虫的两个重要参数有关:萤火虫的发光亮度和相互吸引度,发光亮的萤火虫会吸引发光弱的萤火虫向它移动,发光越亮代表其位置越好,最亮萤火虫即代表函数的最优解。发光越亮的萤火虫对周围萤火虫的吸引度越高,若发光亮度一样,则萤火虫做随机运动,这两个重要参数都与距离成反比,距离越大吸引度越小。
算法的数学描述
(1)萤火虫的相对荧光亮度:
I=I0e−γrij
其中,I0表示最亮萤火虫的亮度,即自身(r=0处)荧光亮度,与目标函数值相关,目标函数组越优,自身亮度越高;γ表示光吸收系数,因为荧光会随着距离的增加和传播媒介的吸收逐渐减弱,所以设置光强吸收系数以体现此特性,可设置为常数;rij表示萤火虫i与j之间的距离。
(2)相互吸引度β
β(r)=β0e−γr2ij
其中,β0表示最大吸引度,即光源处(r=0处)的吸引度。
(3)最优目标迭代
xi(t+1)=xi(t)+β(xj(t)−xi(t))+α(rand−1/2)
其中,Xi与Xj表示i、j两个萤火虫的空间位置,α为步长因子,rand为[0,1]上服从均匀分布的随机因子。
算法基本流程
初始化算法基本参数。设置萤火虫数目n,最大吸引度β0,光强吸收系数γ,步长因子α,最大迭代次数MaxGeneration或搜索精度ε;
随机初始化萤火虫的位置,计算萤火虫的目标函数值作为各自最大荧光亮度I0;
计算群体中萤火虫的相对亮度I和吸引度β,根据相对亮度决定萤火虫的移动方向;
更新萤火虫的空间位置,对处在最佳位置的萤火虫进行随机移动;
根据更新后萤火虫的位置,重新计算萤火虫的亮度;
当满足搜索精度或达到最大搜索次数,则转下一步;否则,搜索次数增加1,转第3步,进行下一次搜索。
输出全局极值点和最优个体值。
算法不足
发现率低、求解精读不高、求解速度慢。
萤火虫算法改进实例
混沌萤火虫算法
混沌算法步骤
令t=0,将萤火虫位置信息Xtj,j=1,2,...,n按下式映射为0到1之间的混沌参量cxtj.
cxtj=xtj−xmin,jxmax,j−xmin,j,j=1,2,...,n
映射公式中:变量xmax,j和变量xmin,j分别为搜索空间中第j维的上界和下界。
根据cxtj,计算得到下一步迭代的混沌参量cxt+1j.
将混沌参量cxt+1j转换为位置信息xt+1J
xt+1j=xmin,j+cxt+1j(xmax,j−xmin,j),j=1,2,...,n
根据位置信息xt+1j,j=1,2,...,n,对所得新解进行性能评价。
若所得新解优于初始解X(0)=[x0i,...,x0n]或者混沌搜索已到预先设定的精度或迭代次数,则新解作为算法的最终结果,否则令t=t+1并返回步骤2。
改进混沌萤火虫算法流程
系统初始化,生成萤火虫初始种群的规模、位置信息,设置光强吸收系数、最大吸引因子和步长因子等参数
计算群体中每个萤火虫的荧光亮度
更新权重公式计算惯性权重
根据位置更新公式更新萤火虫位置,最亮的萤火虫个体随机移动
计算位置更新后群体中每个萤火虫的荧光亮度
计算位置更新后群体中适应度最高的10%的个体,进行混沌局部搜索
计算位置更新后群体中每个萤火虫的荧光亮度
判断是否满足终止条件,如果满足终止条件则跳出循环并输出全局最优解,如果不满足条件则继续
按下列两式收缩搜索区域:
xmin,j=max{xmax,j,xmaxlight,j−r(xmax,j−xmin,j)},0
xmax,j=min{xmax,j,xmaxlight,j+r(xmax,j−xmin.j)},0
其中,xmaxlight,j表示当前最亮萤火虫个体的第j为变量的值。
在收缩后的新搜索区域内随机产生群体中剩余80%的萤火虫,然后返回步3
变步长萤火虫算法
萤火虫i被亮度更大的萤火虫j吸引向其移动而更新自己的位置,位置更新公式如下:
xi(t+1)=xi(t)+β∗(lij)(xj(t)−xi(t))+α∗(rand−1/2)式中,α为步长因子,一般取[0,1]上的常数;rand为[0,1]上服从均匀分布的随机因子。
萤火虫算法寻优是通过萤火虫之间的相互吸引来实现的,而随着迭代次数的增加,萤火虫群会在最优值附件聚集。此时萤火虫个体与最优值之间的距离已经非常小,在个体向最优值趋近的过程中,很可能会出现萤火虫移动的距离大于个体与最优值间距的情况,而导致个体更新自己位置时跳过了最优值,出现震荡,将会导致最优值发现率降低,影响算法的收敛精度和速度。
为了尽量避免由上述原因造成的收敛较慢情况,在算法开始时,将初始步长设定为相对较大值,而后随着迭代次数以及萤火虫之间距离增加设定一个判定条件:当个体距离小于某一固定步长时,使步长减小。则萤火虫算法将在开始时具有较好的全局寻优能力,迅速定位在接近全局最优解的区域,而后期也具有良好的局部搜索能力,能精确得到全局最优解。
初始步长α设定为0.25,当笛卡尔距离l>0.25时,位置更新公式变为:
xi(t+1)=xi(t)+β∗(lij)(xj(t)−xi(t))+k∗lij∗(rand−1/2)式中,k为根据实际情况可调整的正相关系数,即用klij代替固定步长α。