获取更多资讯,赶快关注上面的公众号吧!
沙丘猫群优化算法(Sand Cat swarm optimization,SCSO)是土耳其学者Amir Seyyedabbasi于2022年最新提出的一种模拟沙丘猫生存行为的元启发式算法。扫码关注公众号,后台回复"沙丘猫"或"SCSO"获取源码和原文。
灵感来源
沙丘猫是猫科动物中的一种,属于哺乳动物家族。它们生活在沙质和石质沙漠的恶劣环境中,如中亚撒哈拉沙漠、非洲撒哈拉沙漠和阿拉伯半岛。沙丘猫虽然和家猫在外形上差别不断,但在捕食和生存方面有着不同的生活行为。它们能够探测低于2kHz的低频,也具有难以置信的挖掘猎物的能力。作者提出的沙丘猫算法就是受这两种特性的启发,也包括两个阶段:搜索和攻击,此外,还提出一种用于平衡探索和利用的机制。
数学模型和优化算法
沙丘猫群优化模拟了沙丘猫的两个主要行为:搜寻猎物和攻击猎物。由于自然界中的沙丘猫是独立生活的,那么在提出的算法中,为了提出种群智能的概念,作者假设沙丘猫是群体性的。
初始化种群
对于 d d d维优化问题,沙丘猫就是一个 1 × d 1 \times d 1×d维的表达问题解的数组,如图2。
每个变量值
(
x
1
,
x
2
,
…
,
x
d
)
\left(x_{1}, x_{2}, \ldots, x_{d}\right)
(x1,x2,…,xd)都是浮点型,且每个
x
x
x都必须处于上下边界之间(
∀
x
i
∈
[
\forall x_{i} \in[
∀xi∈[ lower, upper
]
]
])。
算法运行时首先根据问题的规模 ( N pop × N d ) , ( \left(N_{\text {pop }} \times N_{d}\right),( (Npop ×Nd),( pop = 1 , . . . , n =1,...,n =1,...,n)利用沙丘猫群创建一个候选矩阵,然后就目标函数对每个沙丘猫进行适应度评估,选择出其中最优的个体,其他的个体都朝向该个体移动。
搜索猎物(探索)
沙丘猫的猎物搜索机制依赖于低频噪声发射。每只沙丘猫的解表达为
X
i
=
(
x
i
1
,
x
i
2
,
x
i
3
,
…
,
x
i
d
)
X_{i}=\left(x_{i 1}, x_{i 2}, x_{i 3}, \ldots, x_{i d}\right)
Xi=(xi1,xi2,xi3,…,xid)。SCSO算法得益于沙丘猫在低频探测方面的听觉能力,这样就声明了每只猫的敏感范围,前面提到,沙丘猫可以感知低于2kHz的低频,在数学模型中,根据算法的工作原理,这个值(
r
G
→
\overrightarrow{r_{G}}
rG)将随着迭代过程的进行从2线性地降低为0,以逐渐靠近猎物而不会丢失或跳过。因此为了搜索猎物,假设沙丘猫的敏感范围为2kHz到0(等式1),
S
M
S_M
SM模拟了沙丘猫的听觉特性,其假设为2(当然对于不同问题可以适当调整以确定代理行为的速度)。值得一提的是,控制探索和利用之间转换的主要参数是
R
R
R,其是根据等式2获得的向量。
r
G
→
=
s
M
−
(
2
×
S
M
×
iter
c
iter
M
a
x
+
iter
max
)
(1)
\overrightarrow{r_{G}}=s_{M}-\left(\frac{2 \times S_{M} \times \text { iter }_{\mathrm{c}}}{\text { iter }_{\mathrm{Max}}+\text { iter }_{\max }}\right)\tag{1}
rG=sM−( iter Max+ iter max2×SM× iter c)(1)
R
⃗
=
2
×
r
G
→
×
rand
(
0
,
1
)
−
r
G
→
(2)
\vec{R}=2 \times \overrightarrow{r_{G}} \times \operatorname{rand}(0,1)-\overrightarrow{r_{G}}\tag{2}
R=2×rG×rand(0,1)−rG(2)
搜索空间在定义的边界之间随机初始化。在搜索步骤中,每个当前搜索代理的位置更新都是基于一个随机位置。这样,搜索代理就能够在搜索空间中探索新的空间。为避免陷入局部最优,每只沙丘猫的灵敏度范围是不同的,如等式3。因此,
r
G
→
\overrightarrow{r_{G}}
rG表示常规的灵敏度范围(从2线性下降到0),而
r
⃗
\vec{r}
r是每只猫的灵敏度范围。此外,
r
⃗
\vec{r}
r用于探索或利用阶段的操作,而
r
G
→
\overrightarrow{r_{G}}
rG用于导引参数
R
R
R以实现在这些阶段间转移控制。
r ⃗ = r G → × rand ( 0 , 1 ) (3) \vec{r}=\overrightarrow{r_{G}} \times \operatorname{rand}(0,1)\tag{3} r=rG×rand(0,1)(3)
其中 iter c \text { iter }_{\mathrm{c}} iter c为当前迭代, iter M a x \text { iter }_{\mathrm{Max}} iter Max为最大迭代次数。
每只沙丘猫会根据最优解( Pos b c → \overrightarrow{\operatorname{Pos}_{b c}} Posbc)、自己当前位置( Pos c → \overrightarrow{\operatorname{Pos}_{c}} Posc)和其灵敏度范围( r → \overrightarrow{r} r)更新自己的位置。因此沙丘猫能找到其他最好的猎物位置(等式4),该等式使得算法可以找到新的局部最优,因此新的位置位于当前位置和猎物位置之间,同时随机性保证了算法的运行成本低和复杂度低。
Pos → ( t + 1 ) = r ⃗ ⋅ ( Pos b c → ( t ) − rand ( 0 , 1 ) ⋅ Pos c → ( t ) ) (4) \overrightarrow{\operatorname{Pos}}(t+1)=\vec{r} \cdot\left(\overrightarrow{\operatorname{Pos}_{b c}}(t)-\operatorname{rand}(0,1) \cdot \overrightarrow{\operatorname{Pos}_{c}}(\mathrm{t})\right)\tag{4} Pos(t+1)=r⋅(Posbc(t)−rand(0,1)⋅Posc(t))(4)
攻击猎物(利用)
为了表达SCSO的攻击阶段,最优位置 Pos b → \overrightarrow{\operatorname{Pos}_{b}} Posb与当前位置( Pos c → \overrightarrow{\operatorname{Pos}_{c}} Posc)的距离根据等式5计算得到。同时假设沙丘猫的灵敏度范围是一个圆,这样移动的方向就可以通过圆上的一个随机角度( θ \theta θ)确定。由于所选的随机角度在0到360之间,其值将在−1到1之间。这样,群体中的每个成员都能够在搜索空间中沿着不同的圆周方向移动。SCSO利用轮盘选择算法为每只沙丘猫选择一个随机角度。用这种方法,沙丘猫可以接近狩猎位置,为避免陷入局部最优,采用了随机角度。SCSO两次连续迭代的位置更新过程如图3所示。
Pos r n d → = ∣ rand ( 0 , 1 ) ⋅ Pos b → ( t ) − Pos c → ( t ) ∣ Pos → ( t + 1 ) = Pos b → ( t ) − r ⃗ ⋅ Pos r n d → ⋅ cos ( θ ) (5) \begin{aligned} &\overrightarrow{\operatorname{Pos}_{\mathrm{rnd}}}=\left|\operatorname{rand}(0,1) \cdot \overrightarrow{\operatorname{Pos}_{b}}(t)-\overrightarrow{\operatorname{Pos}_{c}}(\mathrm{t})\right| \\ &\overrightarrow{\operatorname{Pos}}(t+1)=\overrightarrow{\operatorname{Pos}_{b}}(t)-\vec{r} \cdot \overrightarrow{\operatorname{Pos}_{\mathrm{rnd}}} \cdot \cos (\theta) \end{aligned}\tag{5} Posrnd=∣∣∣rand(0,1)⋅Posb(t)−Posc(t)∣∣∣Pos(t+1)=Posb(t)−r⋅Posrnd⋅cos(θ)(5)
探索和利用
探索和利用是通过自适应的 r G r_G rG和 R R R保证的,这些参数允许SCSO在两个阶段之间无缝切换。由于参数 R R R取决于 r G r_G rG,其波动范围也会变小。 R R R是区间 [ − 2 r G , 2 r G ] [-2r_G,2r_G] [−2rG,2rG]的随机值,而 r G r_G rG线性从2下降到0。当R的随机值为[-1,1]时,沙丘猫的下一个位置可以是当前位置与狩猎位置之间的任意位置。SCSO算法在 R R R小于或等于1时强制搜索代理进行利用,否则强制搜索代理进行探索和寻找猎物,如等式6。
X ⃗ ( t + 1 ) = { Pos b → ( t ) − Pos rnd → ⋅ cos ( θ ) ⋅ r ⃗ ∣ R ∣ ≤ 1 ; exploitation r ⃗ ⋅ ( Pos b c → ( t ) − rand ( 0 , 1 ) ⋅ Pos c → ( t ) ) ∣ R ∣ > 1 ; exploration (6) \vec{X}(t+1)=\left\{\begin{array}{cl} \overrightarrow{\operatorname{Pos}_{b}}(t)-\overrightarrow{\operatorname{Pos}_{\text {rnd }}} \cdot \cos (\theta) \cdot \vec{r} & |R| \leq 1 ; \text { exploitation } \\ \vec{r} \cdot\left(\overrightarrow{\operatorname{Pos}_{b c}}(t)-\operatorname{rand}(0,1) \cdot \overrightarrow{\operatorname{Pos}_{c}}(\mathrm{t})\right) & |R|>1 ; \text { exploration } \end{array}\right.\tag{6} X(t+1)=⎩⎨⎧Posb(t)−Posrnd ⋅cos(θ)⋅rr⋅(Posbc(t)−rand(0,1)⋅Posc(t))∣R∣≤1; exploitation ∣R∣>1; exploration (6)