1.背景
2015年,Salimi等人受到分形的扩散性质启发,提出了随机分形搜索算法(Stochastic Fractal Search ,SFS)。
2.算法原理
2.1算法思想
SFS通过引入分形的扩散过程作为其搜索机制,并选择高斯分布作为扩散过程的随机游走方式。然后,根据各个体的适应度函数值进行选择,并对各个个体的分量和位置进行更新,最终求得问题的最优解。
2.2算法过程
扩散过程:
个体扩散导致在其周围产生具有随机不同位置的新的个体,参与扩散过程的一系列高斯游走:
G
W
1
=
G
a
u
s
s
i
a
n
(
μ
B
P
,
σ
)
+
(
ε
×
B
P
−
ε
′
×
P
i
)
G
W
2
=
G
a
u
s
s
i
a
n
(
μ
p
,
σ
)
(1)
\begin{aligned}&GW_1=Gaussian(\mu_{BP},\sigma)+(\varepsilon\times BP-\varepsilon^{\prime}\times P_i)\\&GW_2=Gaussian(\mu_p,\sigma)\end{aligned}\tag{1}
GW1=Gaussian(μBP,σ)+(ε×BP−ε′×Pi)GW2=Gaussian(μp,σ)(1)
BP 和 Pi 分别表示群体中的最佳个体和第 i 个个体的位置,高斯参数中的标准差 σ 为:
σ
=
∣
log
(
g
)
g
×
(
P
i
−
B
P
)
∣
(2)
\sigma=\left|\frac{\log(g)}{g}\times(P_i-\mathrm{BP}) \right|\tag{2}
σ=
glog(g)×(Pi−BP)
(2)
随着迭代次数的增加,为了增强个体的局部搜索能力,并使得解越来越接近最优解,可使用 log(g)/g来减小高斯跳跃的步长。
更新过程:
初始化所有个体后,计算每个个体的适应度函数值以获得最佳个体(BP)。个体围绕当前位置游走以开发搜索空间,同时利用两个统计过程进行更新,以实现更好的空间探索。
对于第一次更新过程,首先根据适应度函数值对所有的个体进行排序:
P
a
i
=
r
a
n
k
(
P
i
)
N
(3)
Pa_i=\frac{rank(P_i)}N\tag{3}
Pai=Nrank(Pi)(3)
对于群体中的每个个体Pi ,判定条件 Pai< ε 是否满足,若满足则更新:
P
i
′
(
j
)
=
P
r
(
j
)
−
ε
×
(
P
t
(
j
)
−
P
i
(
j
)
)
(4)
P_i'(j)=P_r(j)-\varepsilon\times(P_t(j)-P_i(j))\tag{4}
Pi′(j)=Pr(j)−ε×(Pt(j)−Pi(j))(4)
第二次更新过程旨在通过考虑群体中其他个体的位置来改变一个个体的位置:
P
i
′
′
=
P
i
′
−
ε
^
×
(
P
t
′
−
B
P
)
∣
ε
′
⩽
0.5
P
i
′
′
=
P
i
′
+
ε
^
×
(
P
t
′
−
P
r
′
)
∣
ε
′
>
0.5
(5)
P_{i}^{\prime\prime}=P_{i}^{\prime}-\hat{\varepsilon}\times\left(P_{t}^{\prime}-BP\right)\quad\mid\varepsilon^{\prime}\leqslant0.5\\P_{i}^{\prime\prime}=P_{i}^{\prime}+\hat{\varepsilon}\times\left(P_{t}^{\prime}-P_{r}^{\prime}\right)\quad\mid\varepsilon^{\prime}>0.5\tag{5}
Pi′′=Pi′−ε^×(Pt′−BP)∣ε′⩽0.5Pi′′=Pi′+ε^×(Pt′−Pr′)∣ε′>0.5(5)
伪代码:
3.结果展示
4.参考文献
[1] Salimi H. Stochastic fractal search: a powerful metaheuristic algorithm[J]. Knowledge-based systems, 2015, 75: 1-18.