蜓算法是一种新型智能群优化算法,其原理是模拟大自然中蜻蜓寻找猎物的行为。该算法源于自然中蜻蜓动态和静态的智能群行为,对蜻蜓的飞行线路、躲避天敌及寻找食物等生活习性进行数学建模。在动态群中,为获得更好的生存环境,大量的蜻蜓集群朝着共同的方向进行远距离迁徙;在静态群中,为寻找其他飞行猎物,由小部分蜻蜓组成的各个小组,在较小的范围内来回飞行。蜻蜓飞行过程中的局部运动与飞行路径的临时突变是静态群的主要特征。在自然界中,蜻蜓的生活习性可以归纳为5类行为方式:分离、排队、结盟、寻找猎物和躲避天敌。
分离是每个蜻蜓个体与同类分开的行为。分离行为的数学表达式为:
S i = − ∑ j = 1 N ( X − X j ) (1) S_{i}=-\sum_{j=1}^{N}(X-X{j})\tag{1} Si=−j=1∑N(X−Xj)(1)
式中 N ′ N^{'} N′为邻近个体的个数; S i S_{i} Si为第 i i i个蜻蜓同类之间分离行为的位置向量; X X X为个体所在位置; X j X_{j} Xj相邻个体蜻蜓 j j j所处的位置。
排队是指每个蜻蜓个体在飞行时与相邻个体之间的速度匹配。排队行为的数学表达式为:
A i = ∑ j = 1 N ′ V j N ′ (2) A_{i}=\frac{\sum_{j=1}^{N'}{V_{j}}}{N^{'}}\tag{2} Ai=N′∑j=1N′Vj(2)
式中 A i A_{i} Ai为第 i i i个蜻蜓个体排队行为的位置向量; V j V_{j} Vj为相邻个体的飞行速度。
结盟指蜻蜓与相邻同类之间彼此聚在一起的集群行为。结盟行为的数学表达式为:
C i = ∑ j = 1 N ′ X j N ′ − X (3) C_{i}=\frac{\sum_{j=1}^{N'}{X_{j}}}{N^{'}}-X \tag{3} Ci=N′∑j=1N′Xj−X(3)
式中 C i C_{i} Ci为第 i i i个蜻蜓个体结盟行为的位置向量。
寻找猎物指个体为生存搜寻猎物的行为。寻找猎物行为的数学表达式为:
F i = X + − X (4) F_{i}=X^{+}-X\tag{4} Fi=X+−X(4)
式中 F i F_{i} Fi第 i i i个蜻蜓个体猎食行为的位置向量; X + X^{+} X+待捕食的猎物所处的位置。
个体出于生存的本能,需时刻警惕天敌的行为。躲避天敌行为的数学表达式为:
E i = X − + X (5) E_{i}=X^{-}+X\tag{5} Ei=X−+X(5)
式中 E i E_{i} Ei为第i个蜻蜓个体逃避天敌行为的位置向量; X − X^{-} X−为蜻蜓猎食所处的位置。步向量表示为蜻蜓的飞行方向以及步长,其数学式如下:
Δ X t + 1 = ( s S i + a A i + c C i + f F i + e E i ) + ω ′ Δ X t (6) \Delta X_{t+1}=(sS_{i}+aA_{i}+cC_{i}+fF_{i}+eE_{i})+\omega^{'}\Delta X_{t}\tag{6} ΔXt+1=(sSi+aAi+cCi+fFi+eEi)+ω′ΔXt(6)
式中: a a a为对齐权重; c c c为凝聚权重; e e e为天敌权重因子; f f f为猎物权重因子; s s s为分离权重; t t t为当前迭代次数; ω ′ \omega ^{'} ω′为惯性权重。
在自然界中,出于生存需要,大部分时间蜻蜓都是运动的,因此所处位置也需实时更新。更新蜻蜓个体所处位置的向量,数学表达式如下:
X t + 1 = X t + Δ X t + 1 (7) X_{t+1}=X_{t}+\Delta X_{t+1}\tag{7} Xt+1=Xt+ΔXt+1(7)
要达到使算法性能进一步得到强化的目的,在同类个体附近无临近解时,通过使用Lévy飞行的方法绕搜索空间飞行,进行蜻蜓位置的更新:
X t + 1 = X i + L e ˊ v y ( d ) Δ X i (8) X_{t+1} = X_{i} +Lévy(d)\Delta X_{i} \tag{8} Xt+1=Xi+Leˊvy(d)ΔXi(8)
其中 d d d表示维度。Lévy函数计算如下:
L e ˊ v y ( x ) = 0.01 ∗ r 1 ∗ δ ∣ r 2 ∣ 1 β (9) Lévy(x)=0.01*\frac{r_{1}*\delta}{|r_{2}|^{\frac{1}{\beta}}}\tag{9} Leˊvy(x)=0.01∗∣r2∣β1r1∗δ(9)
δ = ( Γ ( 1 + β ) ∗ s i n ( π β 2 ) Γ ( 1 + β 2 ) ∗ β ∗ 2 ( β − 1 2 ) ) 1 β , Γ ( x ) = ( x − 1 ) ! (10) \delta = ( \frac {\Gamma(1+\beta)*sin(\frac{\pi\beta}{2})}{\Gamma(\frac{1+\beta}{2})*\beta*2^{(\frac{\beta-1}{2})}})^{\frac {1}{\beta}},\Gamma(x) = (x-1)!\tag{10} δ=(Γ(21+β)∗β∗2(2β−1)Γ(1+β)∗sin(2πβ))β1,Γ(x)=(x−1)!(10)
式子中: r 1 , r 2 r_{1},r_{2} r1,r2为[0,1]范围内的随机数; β \beta β为常数。
为调节DA算法的搜索性能,参数值(分离权重 s s s、对齐权重 a a a、凝聚权重 c c c、猎物权重因子 f f f、天敌权重因子 e e e)将在寻优过程中自适应调整。
蜻蜓算法优化相关参数步骤如下:
a.初始化蜻蜓算法参数,包括最大迭代次数、种群数量。
b.初始化蜻蜓在搜索空间中的位置向量 X X X和在搜索空间中的方向向量 Δ X ΔX ΔX。各只蜻蜓优化参数的组合设为 ( C , g ) (C,g) (C,g),其中 X X X矩阵的第1、2行分别存放 C 、 g C、g C、g的值。
c.更新各权重值。根据上述步骤的数据,对相关权重值进行初始化。变量包括邻域半径 r r r、惯性权重 ω ′ ω′ ω′、猎物权重因子 f f f、对齐权重 a a a、凝聚权重 c c c、分离权重 s s s、天敌权重因子 e e e。
d.适应度值的计算,蜻蜓的最大适应度值随着蜻蜓不断地进行操作而实时更新,如果蜻蜓当前的适应度值大于已保存的适应度值,则更新原适应度值,否则原适应度值不变。因此保存的适应度值为最优值,并且保存当
前最优值对应的参数组合 ( C , g ) (C,g) (C,g)。
e.搜寻邻域中有无蜻蜓个体存在,以欧氏距离作为邻域中有无蜻蜓存在的根据。若存在,用式(6)、(7)更新位置与步长;若不存在,用式(8)更新位置。
f.用式(1)~(5)计算蜻蜓的行为度,包括 f , a , c , s , e f,a,c,s,e f,a,c,s,e。
g.更新 X X X与 Δ X ΔX ΔX
h.终止条件的判断。如果满足终止条件,则直接跳出,同时输出最优参数组合 ( C , g ) (C,g) (C,g);如果不满足则迭代次数加1,跳转执行步骤c。
[1]Mirjalili S. Dragonfly algorithm: a new meta-heuristic optimization technique for solving single-objective, discrete, and multi-objective problems[J]. Neural Computing and Applications, 2016, 27(4): 1053-1073.
[2]傅军栋,陈俐,康水华,冯奕轩.基于蜻蜓算法和支持向量机的变压器故障诊断[J].华东交通大学学报,2016,33(04):103-112.
蜻蜓算法
改进算法matlab代码
名称 | 说明或者参考文献 |
---|---|
基于精英反向学习的逐维改进蜻蜓算法(EDDA) | [1]何庆,黄闽茗,王旭.基于精英反向学习的逐维改进蜻蜓算法[J].南京师大学报(自然科学版),2019,42(03):65-72. |