麻雀搜索算法(Sparrow Search Algorithm,SSA)


原论文:
[1]薛建凯. 一种新型的群智能优化技术的研究与应用[D].东华大学,2020.

1 算法思想

借鉴生物行为:
麻雀有两种类型:发现者和加入者。
发现者:负责寻找食物,为种群提供觅食区域的信息;
加入者:利用发现者获取食物;
在自然状态下,个体间会相互监视,麻雀种群中的加入者为了提高自身的捕食率,通常会争夺高摄取量同伴的食物资源。在觅食的同时,所有个体均会对周围环境保持警惕以防天敌的到来。

抽象得到规则:

  1. 在整个种群中,发现者拥有较高的能源储备并且负责搜索食物丰富的区域,为所有的加入者提供觅食区域和方向。在算法中适应度值越大的麻雀,能量储备越高;
  2. 每只麻雀发现天敌会立即报警。当报警值大于安全值时,发现者会带着加入者去其它安全区域进行觅食;
  3. 算法中根据能否找到更好的食物来定义麻雀的身份,虽然麻雀的身份会随时转变,但是发现者和加入者在种群内的比重是不变的;
  4. 能量储备较高的麻雀将充当发现者。为了获得更多的能量,能量较低的加入者有可能飞到其他地方觅食;
  5. 在觅食过程中,加入者总是能够跟随能量储备较高的发现者进行觅食。为了提高自己的捕食率,个体会监视发现者进而争夺更多的食物资源。
  6. 当天敌构成一定的威胁时,位于群体边缘的麻雀为了获得更好的位置会迅速向安全区域移动,而位于种群中间的麻雀则会随机移动。

2 算法步骤

  1. 初始化种群及相关参数,并计算初始种群的适应度值;
  2. 更新发现者位置 X i , j t + 1 X_{i,j}^{t+1} Xi,jt+1
    在这里插入图片描述
    (这里的i只遍历发现者,不遍历整个种群,下面有参数说明表)
    假设发现者占种群的20%,那么根据适应度值给种群排完序后,前20%的个体就是发现者,也就是说,在代码实现中只需要更新前20%的个体位置就相当于更新了发现者位置。
    预警值 R 2 < 安全值 S T 时 预警值R_2<安全值ST时 预警值R2<安全值ST,表示是安全的,此时发现者的搜索范围比较大;当 预警值 R 2 > = 安全值 S T 时 预警值R_2>=安全值ST时 预警值R2>=安全值ST,表示有了一定数量的捕食者,需要移动到安全的区域。
  3. 更新加入者位置;
    在这里插入图片描述
    (这里的n是加入者数量,不是种群数量,下面有参数说明表)
    假设加入者占种群的80%,那么根据适应度值给种群排完序后,后80%的个体就是发现者,也就是说,在代码实现中只需要更新后80%的个体位置就相当于更新了加入者位置。
    当该加入者为前一半的较优加入者时,用第一个子公式更新位置,当该加入者为后一半的较差加入者时,相当于麻雀非常饥饿,需要随机飞到别的地方。
  4. 更新意识到危险的麻雀位置;
    在这里插入图片描述
    (这里的i只遍历意识到危险的麻雀数量,不是整个种群,下面有参数说明表)
    这儿没懂种群外围的麻雀为什么对应第一个子公式。。
  5. 判断是否满足停止条件,若满足,输出最优麻雀位置,否则返回步骤2。

参数说明表:

符号 含义 符号 含义
X i , j t X_{i,j}^{t} Xi,jt 第 i 只麻雀在第 t 次迭代中的第 j 维位置信息 i t e r m a x iter_{max} itermax 最大迭代次数
α \alpha α [0,1]的随机数 R 2 R_2 R2 [0,1]的随机数,表示预警值
S T ST ST [0.5,1]的常数,表示安全值 Q Q Q 服从正态分布的随机数
L L L 全1的1×d矩阵 X w o r s t t X_{worst}^t Xworstt 第t次迭代中最差的个体
X p X_p Xp 目前最优发现者的位置 A 1×d的矩阵,元素为随机赋值的1或-1
A + A^+ A+ = A T ( A A T ) − 1 =A^T(AA^T)^{-1} =AT(AAT)1 β \beta β 服从均值为0、方差为1的正态分布的随机数
K [-1,1]的随机数,正负表示麻雀移动方向,大小表示步长控制参数 f i f_i fi 当前个体的适应度值
f g f_g fg 当前最大适应度值 f w f_w fw 当前最小适应度值

3 求解函数最值(Python实现)

测试函数:
f ( x 1 , x 2 ) = x 1 2 + x 2 2 f(x_1,x_2)=x_1^2+x_2^2 f(x1,x2)=x12+x22
标准答案是0,函数长这个样子:
在这里插入图片描述

import numpy as np
from matplotlib import pyplot as plt
import SSA

'''适应度函数'''
def fun(X):
        O=X[0]**2 + X[1]**2
        return O

'''麻雀搜索算法求解x1^2 + x2^2的最小值'''
'''主函数 '''
#设置参数
pop = 50 #种群数量
MaxIter = 100 #最大迭代次数
dim = 2 #维度
lb = -10*np.ones(dim) #下边界
ub = 10*np.ones(dim)#上边界
#适应度函数选择
fobj = fun
GbestScore,GbestPositon,Curve = SSA.SSA(pop,dim,lb,ub,MaxIter,fobj) 
print('最优适应度值:',GbestScore)
print('最优解[x1,x2]:',GbestPositon)

# 绘制适应度曲线
plt.figure(1)
plt.plot(Curve,'r-',linewidth=2)
plt.xlabel('Iteration',fontsize='medium')
plt.ylabel("Fitness",fontsize='medium')
plt.grid()
plt.title('SSA',fontsize='large')
plt.show()
  
'''麻雀搜索算法'''
def SSA(pop,dim,lb,ub,Max_iter,fun):
    ST = 0.6 #预警值
    PD = 0.7 #发现者的比列,剩下的是加入者
    SD = 0.2 #意识到有危险麻雀的比重
    PDNumber = int(pop*PD) #发现者数量
    SDNumber = int(pop*SD) #意识到有危险麻雀数量
    X,lb,ub = initial(pop, dim, ub, lb) #初始化种群
    fitness = CaculateFitness(X,fun) #计算适应度值
    fitness,sortIndex = SortFitness(fitness) #对适应度值排序
    X = SortPosition(X,sortIndex) #种群排序
    GbestScore = copy.copy(fitness[0])
    GbestPositon = np.zeros([1,dim])
    GbestPositon[0,:] = copy.copy(X[0,:])
    Curve = np.zeros([Max_iter,1])
    for i in range(Max_iter):
        
        BestF = fitness[0]
        
        X = PDUpdate(X,PDNumber,ST,Max_iter,dim)#发现者更新
        
        X = JDUpdate(X,PDNumber,pop,dim) #加入者更新
        
        X = SDUpdate(X,pop,SDNumber,fitness,BestF) #危险更新
        
        X = BorderCheck(X,ub,lb,pop,dim) #边界检测
        
        fitness = CaculateFitness(X,fun) #计算适应度值
        fitness,sortIndex = SortFitness(fitness) #对适应度值排序
        X = SortPosition(X,sortIndex) #种群排序
        if(fitness[0]<=GbestScore): #更新全局最优
            GbestScore = copy.copy(fitness[0])
            GbestPositon[0,:] = copy.copy(X[0,:])
        Curve[i] = GbestScore
    
    return GbestScore,GbestPositon,Curve

运行结果:
最优适应度值: [6.99557365e-50]
最优解[x1,x2]: [[-2.14105478e-25 -1.55288701e-25]]
非常接近理论上的最优值[0,0]。

适应度函数曲线:
在这里插入图片描述

4 算法进阶

算法优缺点:

  1. 会陷入局部最优解;
  2. 与哈里斯鹰优化算法相比,鹰效果更好;
  3. 经典的测试函数效果非常好,但对于比较新的测试函数(如cec2017)效果不好;

旭佬的博客,有事没事逛一逛

直接改进SSA

文献 改进策略
吕鑫,慕晓冬,张钧,王震.混沌麻雀搜索优化算法[J].北京航空航天大学学报,2021,47(08):1712-1720. Tent混沌序列,高斯变异
毛清华,张强.融合柯西变异和反向学习的改进麻雀算法[J].计算机科学与探索,2021,15(06):1155-1164. 柯西变异+反向学习+sin混沌序列
汤安迪,韩统,徐登武,谢磊.基于混沌麻雀搜索算法的无人机航迹规划方法[J].计算机应用,2021,41(07):2128-2136. 立方映射+反向学习+高斯游走策略
李敦桥.一种混合麻雀搜索算法[J].电脑知识与技术,2021,17(05):232-234. 模拟退火的Metropolis准则
黄敬宇. 融合t分布和Tent混沌映射的麻雀搜索算法研究[D].兰州大学,2021. t分布+Tent混沌
张伟康,刘升,任春慧.混合策略改进的麻雀搜索算法[J].计算机工程与应用,2021,57(24):74-82. Circle映射
段玉先,刘昌云.基于Sobol序列和纵横交叉策略的麻雀搜索算法[J].计算机应用,2022,42(01):36-43. Sobol序列和纵横交叉策略
李鹏,丁倩雯.基于麻雀算法优化的OSTU分割算法[J].电子测量技术,2021,44(19):148-154. Singer混沌映射随机游走策略
刘丽娜,南新元,石跃飞.改进麻雀搜索算法求解作业车间调度问题[J].计算机应用研究,2021,38(12):3634-3639. 量子计算+正余弦搜索
毛清华,张强,毛承成,柏嘉旋.混合正弦余弦算法和Lévy飞行的麻雀算法[J].山西大学学报(自然科学版),2021,44(06):1086-1091. Levy飞行
欧阳城添,朱东林,王丰奇,邱亚娴.基于折射麻雀搜索算法的无人机路径规划[J].电光与控制,2022,29(06):25-31. 折射反向学习+模拟退火机制
高晨峰,陈家清,石默涵.融合黄金正弦和曲线自适应的多策略麻雀搜索算法[J].计算机应用研究,2022,39(02):491-499. Chebyshev混沌映射+柯西扰动
张晓萌,张艳珠,刘禄,张硕,熊夫睿.融合多策略的改进麻雀搜索算法[J].计算机应用研究,2022,39(04):1086-1091+1117. 正弦搜索+多样性变异
汤安迪,韩统,徐登武,谢磊.基于等级制度和布朗运动的混沌麻雀搜索算法[J].空军工程大学学报(自然科学版),2021,22(03):96-103. 等级制度+布朗运动
唐延强,李成海,宋亚飞,陈晨,曹波.自适应变异麻雀搜索优化算法[J/OL].北京航空航天大学学报:1-14[2022-10-19]. 猫混沌映射+柯西变异+Tent混沌
陈刚,林东,陈飞,陈祥宇.基于Logistic回归麻雀算法的图像分割[J/OL].北京航空航天大学学报:1-14[2022-10-19]. Logistics
陈功,曾国辉,黄勃,刘瑾.螺旋探索与自适应混合变异的麻雀搜索算法[J/OL].小型微型计算机系统:1-12[2022-10-19]. 螺旋探索+ICMIC混沌
宋立钦,陈文杰,陈伟海,林岩,孙先涛.基于混合策略的麻雀搜索算法改进及应用[J/OL].北京航空航天大学学报:1-16[2022-10-19]. Circle混沌映射+樽海鞘群算法+模拟退火机制
王子恺,黄学雨,朱东林,闫少强,李权,郭伟.融合边界处理机制的学习型麻雀搜索算法[J/OL].北京航空航天大学学报:1-16[2022-10-19]. 边界处理机制+排序配对学习+竞争学习
精英反向策略 柯西变异,高斯变异,鸡群算法

融合别的智能优化算法来改进SSA

文献 融合的智能优化算法
汤安迪,韩统,徐登武,谢磊.基于混沌麻雀搜索算法的无人机航迹规划方法[J].计算机应用,2021,41(07):2128-2136. // 毛清华,张强,毛承成,柏嘉旋.混合正弦余弦算法和Lévy飞行的麻雀算法[J].山西大学学报(自然科学版),2021,44(06):1086-1091. 正余弦算法SCA
许亮,张紫叶,陈曦,赵世伟,王鹿洋,王涛.基于改进麻雀搜索算法优化BP神经网络的气动光学成像偏移预测[J].光电子·激光,2021,32(06):653-658. 鸟群算法BSA
张伟康,刘升,任春慧.混合策略改进的麻雀搜索算法[J].计算机工程与应用,2021,57(24):74-82. 蝴蝶优化算法
高兵,郑雅,秦静,邹启杰,汪祖民.基于麻雀搜索算法和改进粒子群优化算法的网络入侵检测算法[J].计算机应用,2022,42(04):1201-1206. 粒子群PSO
姜南林. 基于改进麻雀搜索算法优化长短期记忆网络的短期电力负荷预测研究[D].南昌大学,2021. 鸟群算法BSA
高晨峰,陈家清,石默涵.融合黄金正弦和曲线自适应的多策略麻雀搜索算法[J].计算机应用研究,2022,39(02):491-499. 黄金正弦
刘睿,莫愿斌.一种改进的麻雀搜索算法[J].计算机技术与发展,2022,32(03):21-26. 萤火虫算法FA
田露,刘升.融合哈密顿图的麻雀与算术混合优化算法[J/OL].计算机科学与探索:1-13[2022-10-19]. 算术优化算法AOA
宋立钦,陈文杰,陈伟海,林岩,孙先涛.基于混合策略的麻雀搜索算法改进及应用[J/OL].北京航空航天大学学报:1-16[2022-10-19]. 樽海鞘群算法
郑旸,龙英文,吉明明,顾嘉城.融合螺旋黏菌算法的混沌麻雀搜索算法与应用[J/OL].计算机工程与应用:1-11[2022-10-19]. 黏菌算法SMA
Energy efficient cluster head selection using improved Sparrow Search Algorithm in Wireless Sensor Networks 差分进化

SMA及其改进的应用

文献 应用
马晨佩,李明辉,巩强令,杨白月.基于麻雀搜索算法优化支持向量机的滚动轴承故障诊断[J].科学技术与工程,2021,21(10):4025-4029. SVM
许亮,张紫叶,陈曦,赵世伟,王鹿洋,王涛.基于改进麻雀搜索算法优化BP神经网络的气动光学成像偏移预测[J].光电子·激光,2021,32(06):653-658. BP神经网络
黄敬宇. 融合t分布和Tent混沌映射的麻雀搜索算法研究[D].兰州大学,2021. SVM+BP神经网络+恶意软件分类问题
欧阳城添,朱东林.融合K-means的多策略改进麻雀搜索算法研究[J].电光与控制,2021,28(12):11-16. // 陈刚,林东,陈飞,陈祥宇.基于Logistic回归麻雀算法的图像分割[J/OL].北京航空航天大学学报:1-14[2022-10-19]. K-means聚类,图像分割
聂晓明,高鹏翔.基于用户偏好和麻雀搜索聚类的协同过滤算法[J].青岛大学学报(自然科学版),2021,34(01):70-76. 用户偏好+聚类+协同过滤推荐算法
姜南林. 基于改进麻雀搜索算法优化长短期记忆网络的短期电力负荷预测研究[D].南昌大学,2021. SVM+LSTM+预测模型
王誉霖. 基于群智能优化算法和XGBoost的血糖预测模型研究[D].北京化工大学,2021. 极限学习机+血糖预测模型
胡青,龚世才,胡珍.基于改进麻雀搜索算法的空气质量指数预测[J].广西科学,2022,29(04):642-651. BP神经网络+空气质量指数预测
A stochastic configuration network based on chaotic sparrow search algorithm 随机配置网络SCN
A novel Random Forest integrated model for imbalanced data classification problem 不平衡数据集+集成方法+随机森林
Rolling bearing performance degradation assessment based on deep belief network and improved support vector data description SVM+深度信念网络DBN+参数优化
Short-term wind speed forecasting based on long short-term memory and improved BP neural network LSTM+BP+风速预测
An automated diagnosis and classification of COVID-19 from chest CT images using a transfer learning-based convolutional neural network CNN+迁移学习+优化超参数+新冠图像诊断
A three-stage framework for vertical carbon price interval forecast based on decomposition–integration method 反向传播神经网络BPNN+碳价格预测+区间预测
汤安迪,韩统,徐登武,谢磊.基于混沌麻雀搜索算法的无人机航迹规划方法[J].计算机应用,2021,41(07):2128-2136. 无人机航迹规划
温泽宇,谢珺,谢刚,续欣莹.基于新型拥挤度距离的多目标麻雀搜索算法[J].计算机工程与应用,2021,57(22):102-109. 多目标问题
刘丽娜,南新元,石跃飞.改进麻雀搜索算法求解作业车间调度问题[J].计算机应用研究,2021,38(12):3634-3639. 作业车间调度问题
王振东,汪嘉宝,李大海.一种增强型麻雀搜索算法的无线传感器网络覆盖优化研究[J].传感技术学报,2021,34(06):818-828. 无线传感器网络覆盖优化问题
韩统,汤安迪,周欢,徐登武,谢磊.基于LASSA算法的多无人机协同航迹规划方法[J].系统工程与电子技术,2022,44(01):233-241. 多无人机协同航迹规划问题
高兵,郑雅,秦静,邹启杰,汪祖民.基于麻雀搜索算法和改进粒子群优化算法的网络入侵检测算法[J].计算机应用,2022,42(04):1201-1206. 网络入侵检测
张月栋,莫愿斌.改进的麻雀搜索算法及其求解旅行商问题[J].计算机系统应用,2022,31(02):200-206. 旅行商问题
刘耿耿,张丽媛,刘笛,刘能现,傅仰耿,郭文忠,陈国龙,蒋伟进.求解复杂约束优化问题的多策略混合麻雀搜索算法[J/OL].控制与决策:1-9[2022-10-19]. 约束优化问题

参考书籍:范旭,《Python智能优化算法——从原理到代码实现与应用》第一版,电子工业出版社。

猜你喜欢

转载自blog.csdn.net/weixin_46838605/article/details/127290940
今日推荐