优化是在给定情况下为特定问题寻找最佳解决方案的过程。
受自然启发的算法可以大致分为三大类:进化算法(EA),群体智能算法(SI)和基于物理的算法(PB)。
按照“no free lunch”(NFL)定理,没有一种自然启发式的优化技术可以最优地解决所有优化问题。这就意味着优化算法可以解决某些问题,但对其他类别的问题无效。
飞行松鼠被认为是空气动力学上最复杂的物种,它有一个类似降落伞的膜,可以帮助松鼠改变升力和阻力,在高空中从一棵树滑翔到另一棵树。
飞行松鼠不会飞行,而是采用滑翔方式快速和有效地跨越很长的距离。松鼠之所以要滑翔,是为了躲避捕食者,寻找捕食的最佳地点和以较小的代价进行捕食。
当飞行松鼠开始觅食时,搜寻过程就开始了。飞行松鼠通过从一棵树滑行到另一棵树了来寻找食物;通过改变位置,搜索不同的森林区域。
季节变化会显著影响飞行松鼠的觅食活动,松鼠在低温条件下会损失大量热量。因为它们的体温高、体型小,导致觅食过程的代价很大,并且由于天敌的存在而具有风险。在SSA算法中,通过检查季节变化条件,防止算法陷入局部最优。
1、森林中有n只飞行松鼠,假设一只松鼠在一棵树上。
2、每只飞行松鼠都通过自己的动态觅食行为来寻找食物。
3、在森林中,只有三种类型的树:普通树、橡树和山核桃树。(normal tree\oak tree and hickory tree)
4、考虑森林区域被认为包含三个橡树和一个山核桃树。
考虑松鼠数量n为50只。
1棵山核桃树和3棵橡树是4个食物资源,其他46棵普通树没有食物资源(Number of Food)。也就是说,松鼠总数的92%生活在普通树上,其余的8%生活在有食物资源的树上。然而,食物资源的数量可以根据不用的约束$1
飞行松鼠的位置在SSA算法中由向量表示,每个向量有多个维度。因此,飞行松鼠可以在一维、二维、三维或超维搜索空间中滑行来改变自身的位置。
森林中有n只飞鼠(FS),第i只飞鼠的位置可以通过一个矢量来确定。
所有飞鼠的位置可以表示为如下矩阵:
F S = [ F S 1.1 F S 1.2 . . . . . . F S 1 , d F S 2.1 F S 2.2 . . . . . . F S 2 , d ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ F S n . 1 F S n . 2 . . . . . . F S n , d ] FS=\begin{bmatrix}FS_{1.1} & FS_{1.2} &... &... & FS_{1,d}\\ FS_{2.1} & FS_{2.2} &... &... & FS_{2,d}\\ \vdots & \vdots & \vdots & \vdots\\ \vdots & \vdots & \vdots & \vdots\\ FS_{n.1} & FS_{n.2} &... &... & FS_{n,d}\\ \end{bmatrix} FS=⎣⎢⎢⎢⎢⎢⎢⎡FS1.1FS2.1⋮⋮FSn.1FS1.2FS2.2⋮⋮FSn.2......⋮⋮.........⋮⋮...FS1,dFS2,dFSn,d⎦⎥⎥⎥⎥⎥⎥⎤
下面等式均匀分布用来分配每个松鼠在森林中的初始位置。
F S i = F S L + U ( 0 , 1 ) × ( F S U − F S L ) FS_{i}=FS_{L}+U(0,1) \times(FS_U - FS_L) FSi=FSL+U(0,1)×(FSU−FSL)
通过将决策变量的值放入用户定义的适应度函数中,可以计算每个飞鼠的位置适应度。并将相应的适应度值存储在以下数组中:
f = [ f 1 ( [ F S 1.1 , F S 1.2 , . . . , F S 1 , d ] ) f 2 ( [ F S 2.1 , F S 2.2 , . . . , F S 2 , d ] ) ⋮ ⋮ f n ( [ F S n . 1 , F S n . 2 , . . . , F S n , d ] ) ] f=\begin{bmatrix} f_1([FS_{1.1},FS_{1.2},...,FS_{1,d}])\\ f_2([FS_{2.1},FS_{2.2},...,FS_{2,d}])\\ \vdots\\ \vdots\\ f_n([FS_{n.1},FS_{n.2},...,FS_{n,d}])\\ \end{bmatrix} f=⎣⎢⎢⎢⎢⎢⎢⎡f1([FS1.1,FS1.2,...,FS1,d])f2([FS2.1,FS2.2,...,FS2,d])⋮⋮fn([FSn.1,FSn.2,...,FSn,d])⎦⎥⎥⎥⎥⎥⎥⎤
在存储了每只松鼠的位置适应度后,数组==按升序排序==。
最小适应值的松鼠停留在山核桃树上,接下来的三只松鼠停留在橡树上,它们可以向山核桃树飞行,其余的松鼠停留在普通树上。通过随机选择方式,选择已经满足它们日常能量需求的松鼠朝着山核桃树移动;剩下的松鼠继续朝橡树移动来获取日常所需能量。
松鼠的觅食行为会受到捕食者的影响,松鼠具体采用哪种移动策略根据捕食者的出现概率( P d p P_{dp} Pdp)而定。
松鼠在动态觅食过程中可能会出现**三种情况**。
在每种情况下,假设在没有捕食者的情况下,松鼠会在整个森林中滑翔,并高效的搜寻它喜欢的食物,但因捕食者的存在使得它变得谨慎,被迫在小范围内随机行走来寻找附近的隐藏位置。
在橡树(acorn nut trees)的松鼠可以移动到山核桃树(hickory nut tree)。
松鼠的新位置:
F S a t t + 1 = { F S a t t + d g × G c × ( F S h t t − F S a t t ) , R 1 ≥ P d p R a n d o m l o c a t i o n , o t h e r w i s e FS_{at}^{t+1} =\begin{cases} FS_{at}^t + d_g \times G_c \times (FS_{ht}^t - FS_{at}^t), & R_1 \geq P_{dp}\\ Random location, & otherwise \end{cases} FSatt+1={ FSatt+dg×Gc×(FShtt−FSatt),Randomlocation,R1≥Pdpotherwise
在普通树(normal trees)的松鼠移动到橡树(acorn nut trees)获取日常的能源所需。
松鼠的新位置:
F S n t t + 1 = { F S n t t + d g × G c × ( F S a t t − F S n t t ) , R 2 ≥ P d p R a n d o m l o c a t i o n , o t h e r w i s e FS_{nt}^{t+1} =\begin{cases} FS_{nt}^t + d_g \times G_c \times (FS_{at}^t - FS_{nt}^t), & R_2 \geq P_{dp}\\ Random location, & otherwise \end{cases} FSntt+1={ FSntt+dg×Gc×(FSatt−FSntt),Randomlocation,R2≥Pdpotherwise
有些在普通树(normal trees)上的松鼠,已经吃了橡果,它们可能会向山核桃树(hickory nut tree)移动以便储存山核桃来应对食物短缺。
松鼠的新位置:
F S n t t + 1 = { F S n t t + d g × G c × ( F S h t t − F S n t t ) , R 3 ≥ P d p R a n d o m l o c a t i o n , o t h e r w i s e FS_{nt}^{t+1} =\begin{cases} FS_{nt}^t + d_g \times G_c \times (FS_{ht}^t - FS_{nt}^t), & R_3 \geq P_{dp}\\ Random location, & otherwise \end{cases} FSntt+1={ FSntt+dg×Gc×(FShtt−FSntt),Randomlocation,R3≥Pdpotherwise
松鼠的滑翔机制是通过平衡滑行来描述的,升力(L)和阻力(D)之和产生一个合力®,该合力与松鼠的重力大小相等且方向相反。
因此,R以恒定速度(V)保证松鼠能够在直线上与水平面成一定角度 ϕ \phi ϕ下降滑行。
升阻比或滑行比:
L / D = 1 / tan ϕ L/D = 1/\tan\phi L/D=1/tanϕ
松鼠可以通过减小下滑角来增加滑行路径长度,从而提高升阻比。升力是空气撞击膜产生了向下的偏转而产生的反推力的结果,定义为:
L = 1 / 2 ρ C L V 2 S L=1/2\rho C_L V^2 S L=1/2ρCLV2S
摩擦阻力定义为:
D = 1 / 2 ρ V 2 S C D D=1/2\rho V^2 S C_D D=1/2ρV2SCD
稳态下滑角为: ϕ = arctan ( D L ) \phi = \arctan (\frac{D}{L}) ϕ=arctan(LD)
计算近似滑翔距离: d g = ( h g tan ϕ ) d_g = (\frac{h_g}{\tan\phi}) dg=(tanϕhg)
松鼠可以根据着陆位置,简单地改变升阻比来改变其滑行路径长度或 d g d_g dg.
松鼠通常在一次滑行中行进5到25m的水平距离,在SSA算法模型中,滑行距离载9~20米的范围内。 d g d_g dg的值过大会引起大的扰动,可能导致算法的性能不能令人满意。
因此,== d g / s f d_g/sf dg/sf,将 d g d_g dg除以一个成为**比例因子(sf属于[16,37])**的非零值, s f = 18 sf=18 sf=18==使得 d g d_g dg在[0.5,1.11]区间内浮动。
sf有助于实现全局搜索和局部寻优之间的均衡状态。
季节变化对飞行松鼠觅食活动有显著影响,松鼠在低温条件下会损失大量热量。
在SSA中引入季节监测条件,避免算法陷入局部最优解。
季节常量 S c S_c Sc
S c t = ∑ k = 1 d ( F S a t , k t − F S h t , k ) 2 S_c^t = \sqrt{\sum_{k=1}^d (FS_{at,k}^t - FS_{ht,k})^2} Sct=k=1∑d(FSat,kt−FSht,k)2
监测季节变化条件 S c t < S m i n S_c^t < S_{min} Sct<Smin
S m i n S_{min} Smin是季节性常数计算的最小值
S m i n = 10 E − 6 ( 365 ) t / ( t m / 2.5 ) S_{min} = \frac{10 E^{-6}}{(365)^{t / (t_m /2.5)}} Smin=(365)t/(tm/2.5)10E−6
如果季节变化条件得到满足(即冬季已过),对无法在森林中寻找最佳冬季食物来源的松鼠进行随机迁移(即随机改变松鼠位置)
如前所述,由于觅食成本低,冬季的结束会使飞鼠活跃起来。
冬季无法在森林中寻找最佳食物来源而存活下来的鼯鼠可能会向新的方向觅食。在建模中结合这种行为可以提高所提出算法的探索能力。
假设只有那些无法找到山核桃食物来源而存活下来的松鼠才会为了寻找更好的食物来源而向不同的方向移动。
The relocation of such flying squirrels is modelled through the following equation:
F S n t n e w = F S L + L e ˊ v y ( n ) × ( F S U − F S L ) FS_{nt}^{new} = FS_L + Lévy(n) \times (FS_U - FS_L) FSntnew=FSL+Leˊvy(n)×(FSU−FSL)
列维分布(Levy distribution)能够帮助算法更好的进行全局搜索。
列维飞行(Levy flight)帮助算法寻找远离当前最佳位置的新位置。列维飞行时一种随机改变步长的方法,其中步长是从列维分布中得出的。
$$
L(s) ~\mid s\mid ^{-1-\beta}\
0 < \beta \leq 2
$$
Lévy distribution
L ( s , γ , μ ) = { γ 2 π exp [ − γ 2 ( s − μ ) ] 1 ( s − μ ) 3 / 2 0 < μ < s < ∞ 0 o t h e r w i s e L(s,\gamma,\mu) =\begin{cases} \sqrt{\frac{\gamma}{2 \pi}} \exp[-\frac{\gamma}{2(s - \mu)}] \frac{1}{(s - \mu)^{3/2}} & 0 <\mu < s < \infty\\ 0 & otherwise \end{cases} L(s,γ,μ)={ 2πγexp[−2(s−μ)γ](s−μ)3/2100<μ<s<∞otherwise
Lévy flight
L e ˊ v y ( x ) = 0.01 × r a × σ ∣ r b ∣ 1 β Lévy(x) = 0.01 \times \frac{r_a \times \sigma}{\mid r_b\mid ^{\frac{1}{\beta}}} Leˊvy(x)=0.01×∣rb∣β1ra×σ
r a , r b r_a,r_b ra,rb是[0,1]区间上的两个正态分布随机数
β = 1.5 \beta=1.5 β=1.5
σ = ( Γ ( 1 + β ) × sin ( π β 2 ) Γ ( 1 + β 2 ) × β × 2 β − 1 2 ) 1 / β \sigma =(\frac{\Gamma(1 + \beta) \times \sin(\frac{\pi \beta}{2})}{\Gamma(\frac{1 + \beta}{2}) \times \beta \times 2^{\frac{\beta -1}{2}}})^{1/\beta} σ=(Γ(21+β)×β×22β−1Γ(1+β)×sin(2πβ))1/β
算法停止准则为最大迭代次数 t m t_m tm。
算法步骤
(1)定义输入参数
(2)为n只松鼠生成随机位置
(3)评估每只松鼠位置的适应值
(4)根据飞行松鼠的适应值,按升序排序松鼠位置
(5)将松鼠分配到山核桃树、橡树和普通树
(6)随机选择一些在普通树上的松鼠向山核桃树移动,其余的向橡树移动
(7)While(不满足停止准则)
(8)t从1到n1(n1为橡树向山核桃树移动的松鼠数量),如果 R 1 ≥ P d p R_1 \geq P_{dp} R1≥Pdp,则执行公式 F S a t t + 1 = F S a t t + d g × G c × ( F S h t t − F S a t t ) FS_{at}^{t+1} =FS_{at}^t + d_g \times G_c \times (FS_{ht}^t - FS_{at}^t) FSatt+1=FSatt+dg×Gc×(FShtt−FSatt)
(9)t从1到n2(n2为普通树向橡树移动的松鼠数量),如果 R 2 ≥ P d p R_2 \geq P_{dp} R2≥Pdp,则执行公式 F S n t t + 1 = F S n t t + d g × G c × ( F S a t t − F S n t t ) FS_{nt}^{t+1} =FS_{nt}^t + d_g \times G_c \times (FS_{at}^t - FS_{nt}^t) FSntt+1=FSntt+dg×Gc×(FSatt−FSntt)
(10)t从1到n3(n3为普通树向山核桃树移动的松鼠数量),如果 R 3 ≥ P d p R_3 \geq P_{dp} R3≥Pdp,则执行公式 F S n t t + 1 = F S n t t + d g × G c × ( F S h t t − F S n t t ) FS_{nt}^{t+1} =FS_{nt}^t + d_g \times G_c \times (FS_{ht}^t - FS_{nt}^t) FSntt+1=FSntt+dg×Gc×(FShtt−FSntt)
(11)计算季节性常数。判断季节变化条件是否满足,满足则根据 F S n t n e w = F S L + L e ˊ v y ( n ) × ( F S U − F S L ) FS_{nt}^{new} = FS_L + Lévy(n) \times (FS_U - FS_L) FSntnew=FSL+Leˊvy(n)×(FSU−FSL)和 L e ˊ v y ( x ) = 0.01 × r a × σ ∣ r b ∣ 1 β Lévy(x) = 0.01 \times \frac{r_a \times \sigma}{\mid r_b\mid ^{\frac{1}{\beta}}} Leˊvy(x)=0.01×∣rb∣β1ra×σ更新普通树上松鼠位置
(12)根据 S m i n = 10 E − 6 ( 365 ) t / ( t m / 2.5 ) S_{min} = \frac{10 E^{-6}}{(365)^{t / (t_m /2.5)}} Smin=(365)t/(tm/2.5)10E−6更新 S m i n S_{min} Smin的值
(13)直到循环结束,得到山核桃树上松鼠的位置和适应值
[1]Jain M , Singh V , Rani A . A novel nature-inspired algorithm for optimization: Squirrel search algorithm[J]. Swarm and Evolutionary Computation, 2018:S2210650217305229.
加油加油加油☺️☺️☺️☺️