2023年CCF-C NCA:自适应麻雀搜索算法MASSA,深度解析+性能实测

目录


1.摘要

麻雀搜索算法(SSA)是一种受麻雀觅食策略启发的元启发式算法,尽管SSA性能竞争力强,但仍存在开发与探索不平衡,容易陷入局部最优的问题。本文提出改进自适应麻雀搜索算法(MASSA),其通过引入混沌反向学习技术增加种群多样性,并通过动态自适应权重来平衡算法的开发与探索能力。此外,自适应螺旋搜索策略进一步提升了MASSA的性能。

2.麻雀搜索算法SSA原理

【智能算法】麻雀搜索算法(SSA)原理及实现

3.改进策略

自适应混沌反向学习

种群多样性与个体在搜索空间中的分布有关,更均匀的个体分布意味着更好的多样性。混沌映射具有随机选择和遍历的特点,有助于生成新的解。自适应混沌反向学习策略:
X i c o = L B + U B − λ i X i t X_{i}^{co}=\mathrm{LB}+\mathrm{UB}-\lambda_{i}X_{i}^{t} Xico=LB+UB−λiXit

随着算法的推进,采用混沌反向学习策略会导致大量无效搜索,这不仅增加了计算成本,还不利于算法的收敛,采用线性递减种群方法:
P o p = r o u n d ( ( p o p min ⁡ − p o p max ⁡ ) ⋅ t M + p o p max ⁡ ) \mathrm{Pop}=\mathrm{round}\left(\frac{(\mathrm{pop}{\min}-\mathrm{pop}{\max})\cdot t}{M}+\mathrm{pop}_{\max}\right) Pop=round(M(popmin−popmax)⋅t+popmax)

自适应螺旋搜索策略

对于发现者将原始搜索策略与自适应螺旋搜索策略相结合:
X i t + 1 = ∣ X i t − X p b e s t t ∣ β + X p b e s t t \mathbf{X}i^{t+1}=\left|\mathbf{X}i^t-\mathbf{X}{\mathrm{pbest}}^t\right|\beta+\mathbf{X}{\mathrm{pbest}}^t Xit+1= Xit−Xpbestt β+Xpbestt

其中,
β = e a l ⋅ cos ⁡ ( 2 π a ) \beta=e^{al}\cdot\cos(2\pi a) β=eal⋅cos(2πa)

每个跟随者在更新位置时不仅考虑最优个体,还应参考其前方的一个个体:
X i t + 1 = X p t + ∣ X i t − X p t ∣ ⋅ β + r 1 ⋅ ( X i − 1 t − X i t ) \mathbf{X}_i^{t+1}=\mathbf{X}_p^t+\left|\mathbf{X}_i^t-\mathbf{X}p^t\right|\cdot\beta+r_1\cdot(\mathbf{X}{i-1}^t-\mathbf{X}_i^t) Xit+1=Xpt+ Xit−Xpt ⋅β+r1⋅(Xi−1t−Xit)

动态自适应权重

为了解决发现者在迭代过程初期就接近全局最优而导致的搜索范围不足和精度下降问题,我们引入了前一代全局最优解至发现者的位置更新公式中。采用惯性权重实现从全局搜索向局部搜索的平滑过渡:
w = 1 − ( ( e t / M − 1 ) / e − 1 ) 2 w=1-\left((e^{t/M}-1)/e-1\right)^2 w=1−((et/M−1)/e−1)2
X i t + 1 = ∣ X p b e s t t − X i t ∣ ⋅ w ⋅ r a n d + X i t \mathbf{X}i^{t+1}=\left|\mathbf{X}{\mathrm{pbest}}^t-\mathbf{X}_i^t\right|\cdot w\cdot\mathrm{rand}+\mathbf{X}_i^t Xit+1= Xpbestt−Xit ⋅w⋅rand+Xit

伪代码

4.结果展示

PS:效果一般



5.参考文献

1 Geng J, Sun X, Wang H, et al. A modified adaptive sparrow search algorithm based on chaotic reverse learning and spiral search for global optimizationJ. Neural Computing and Applications, 2023, 35(35): 24603-24620.

6.代码获取

相关推荐
hansang_IR11 小时前
【题解】P4456 [CQOI2018] 交错序列(数学递推)
c++·算法
青少儿编程课堂11 小时前
贪心算法进阶:区间调度与最少资源整合解析
c++·python·算法·贪心·信息学竞赛·区间调度
青山木11 小时前
Hot 100 --- 划分字母区间
java·数据结构·算法·leetcode·贪心算法
Sunsets_Red11 小时前
浅谈扫描线
c++·算法·编程·题解·洛谷·扫描线·信息学竞赛
a1879272183111 小时前
【算法】双指针与滑动窗口(一):框架总纲——三类问题、一个原理与判决书
算法·leetcode·区间·双指针·滑动窗口·原理·算法讲解
shehuiyuelaiyuehao11 小时前
算法42,模拟算法,模拟z字形变换
算法
朝朝辞暮i11 小时前
C++第一课
开发语言·c++·算法
橘子汽水16812 小时前
Leetcode 208,207实现Trie前缀树,课程表
java·数据结构·算法·leetcode
hanlin0312 小时前
刷题笔记:力扣第169题-多数元素
笔记·算法·leetcode
hfywmsj12 小时前
广州餐饮铺位招租数据建模:基于多维评估体系的选址算法设计与实现
人工智能·算法·广州餐饮铺位招租