基础麻雀算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108830958
发现者负责搜索具有丰富食物的区域, 并为其 他个体提供搜索方向, 是整个种群运作的核心, 因 此发现者的搜索能力在一定程度上对整个算法的收 敛起着重要影响。由公式(2)可知, 当搜索范围内没 有出现捕食者时, 发现者的位置更新算子存在一定 的随机性, 这种随机性可能会导致算法稳定性降低, 收玫速度变慢。针对上述问题, 本文改进了
S
S
A
\mathrm{SSA}
SSA 发 现者的搜索机制, 改进的发现者位置更新数学模型 描述如公式(5)所示:
X
i
,
d
t
+
1
=
{
X
i
,
d
t
⋅
(
exp
(
T
max
−
t
T
max
−
1
)
⋅
1
e
−
1
)
k
,
if
R
2
<
S
T
X
i
,
d
t
+
Q
⋅
L
,
if
R
2
≥
S
T
(5)
X_{i, d}^{t+1}=\left\{
式中,
t
t
t 为当前迭代次数,
k
k
k 为调节因子, 通过
k
k
k 值可 以自适应调节发现者位置更新算子下降速率,
k
k
k 值越 大, 算子下降速率越大。
由公式(5)可知, 改进的位置更新公式中引入了 迭代次数
t
t
t, 使发现者位置更新算子随迭代次数增 加呈非线性变化, 增加了算法的多样性; 同时, 结 合调节因子
k
k
k, 可自适应调节位置更新算子的下降 速率, 平衡了算法的搜索能力; 最后, 发现者位置 更新脱离了随机因子
α
\alpha
α 的影响, 算法更加稳定。
在原始 SSA 中, 当侦察者预警到危险(即意识 到有陷入局部极值的风险)时, 对于处于种群中心的 侦察者, SSA 选择让其靠近邻居减少被捕食的风险, 这样会导致算法陷入局部最优值而停止搜索; 对于 处在种群边缘的侦察者, SSA 利用随机步长控制侦 察者向安全区域靠近, 而这种随机步长可能会导致 算法收敛速度变慢。
综上所述, 针对 SSA 侦察机制存在的局限性, 本文通过引入新的侦察因子
Φ
\Phi
Φ 改进 SSA 的侦察机 制, 对于处于种群中心的侦察者, 通过非线性递增 的侦察因子
Φ
1
\Phi_1
Φ1 使其逐步远离当前位置, 防止算法 陷入局部最优值; 对于处在种群边缘的侦察者, 采 用非线性递减的侦察因子
Φ
2
\Phi_2
Φ2 代替随机步长因子, 在保证侦察者安全的同时使其逐步靠近最优位置, 加快算法收敛。
Φ
1
\Phi_1
Φ1 和
Φ
2
\Phi_2
Φ2 的数学模型描述如公式(6) 所示:
{
Φ
1
(
t
)
=
Φ
i
+
(
Φ
f
−
Φ
i
)
⋅
(
1
−
t
T
max
)
n
Φ
2
(
t
)
=
Φ
i
−
(
Φ
f
−
Φ
i
)
⋅
(
1
−
t
T
max
)
n
(6)
\left\{
式中,
Φ
i
\Phi_i
Φi 和
Φ
f
\Phi_f
Φf 分别表示
Φ
\Phi
Φ 的初始值和最终值,
T
max
T_{\max }
Tmax 为最大迭代次数,
n
n
n 为非线性调节系数。
单纯形法在多维优化问题中表现出色,具有鲁棒性高、局部优化能力强和参数简单等优点 [16] 。单纯形法通过对适应度较差的个体进行反射、扩张和收缩等操作来改变个体位置,其中反射操作能使个体反方向搜索,增加个体搜索空间;扩张操作使个体远离最优解,防止算法陷入局部极小值点;压缩操作能使个体更加接近最优位置。其具体实现步骤 如下所示:
Step1 初始化种群, 计算个体适应度并排序, 记录全局最优个体 X b X_b Xb 和次优个体 X t X_t Xt 以及它们的适 应度值 f b f_b fb 和 f t , X c f_t, X_c ft,Xc 定义为 X c = ( X b + X t t ) / 2 X_c=\left(X_b+X_t t\right) / 2 Xc=(Xb+Xtt)/2 。
Step2 对 m m m 个位置较差的点 w w w 进行反射操作, X r = X c + α ( X c − X w ) X_r=X_c+\alpha\left(X_c-X_w\right) Xr=Xc+α(Xc−Xw), 其中 α \alpha α 表示反射系数。
Step3 判断, 如果
f
r
<
f
b
f_r
Step4 判断, 如果
f
r
<
f
w
f_r
Step5 判断, 如果
f
w
>
f
r
>
f
t
f_w>f_r>f_t
fw>fr>ft, 则进行收缩操作,
X
s
=
X
c
−
σ
(
X
w
−
X
c
)
,
σ
X_s=X_c-\sigma\left(X_w-X_c\right), \sigma
Xs=Xc−σ(Xw−Xc),σ 为收缩系数, 且
σ
=
γ
\sigma=\gamma
σ=γ; 如果
f
s
<
f
w
f_s
为了改善 SSA 求解速度慢、精度不高的问题, 本文在算法每次迭代结束时, 对位置较差的
m
m
m 个麻 雀个体进行单纯形法操作, 增强 SSA 的搜索能力。
SMSSA 实现步骤如下所示:
步骤 1 初始化种群和 SMSSA 参数: 最大迭代 次数
T
max
T_{\text {max }}
Tmax , 种群规模
N
N
N, 搜索上下界
u
b
u b
ub 和
l
b
l b
lb, 维度
d
d
d, 发现者比例
P
P
P 。
步骤 2 计算个体适应度并排序, 记录最优、 次优和最差适应度个体位置:
X
b
、
X
t
X_b 、 X_t
Xb、Xt 和
X
w
X_w
Xw, 及它们 的适应度值
f
b
、
f
t
f_b 、 f_t
fb、ft 和
f
w
f_w
fw 。
步骤 3 根据公式(5)更新发现者位置。
步骤 4 根据公式(3)更新加入者位置。
步骤 5 根据公式(6)更新侦察者位置。
步骤 6 定义
X
c
=
(
X
b
+
X
t
)
/
2
X_c=\left(X_b+X_t\right) / 2
Xc=(Xb+Xt)/2, 对
m
m
m 个位置较差 的个体
w
w
w 进行反射操作,
X
r
=
X
c
+
α
(
X
c
−
X
w
)
X_r=X_c+\alpha\left(X_c-X_w\right)
Xr=Xc+α(Xc−Xw), 反射个 体适应度为
f
r
f_r
fr 。
步骤 7 根据单纯形法判断
f
r
、
f
b
、
f
w
f_r 、 f_b 、 f_w
fr、fb、fw 和
f
t
f_t
ft 之间 大小关系, 然后决定对适应度最差的
m
m
m 个个体行执 行扩张、压缩或伸缩操作。
步骤 8 循环步骤 2-步骤 7, 判断是否满足迭 代条件, 满足则跳出循环。
步骤 9 算法结朿, 返回是优位置及适应度。

[1]刘成汉,何庆.改进搜索机制的单纯形法引导麻雀搜索算法[J/OL].计算机工程与科学:1-9[2021-12-24].http://kns.cnki.net/kcms/detail/43.1258.TP.20211223.0930.002.html.