麻雀搜索算法(Python)

本文介绍了由中国学者提出的麻雀搜索算法,模仿麻雀觅食行为和反捕食策略,通过发现者和加入者角色动态转换,优化种群寻找食物的过程。算法涉及适应度值评估、位置更新规则以及危险感知机制,以求在复杂环境中找到最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

麻雀搜索算法是中国学者Jiankai Xue和Bo Shen受到麻雀的觅食行为和反捕食行为的启发,提出一种最新的群体优化算法。
麻雀是一种聪明的群居生物,具有良好的记忆力,所以麻雀种群在觅食过程中具有一些生物学特性:麻雀种群通常分为两种类型分别是发现者,也称探索者,和加入者,也被称为追随者。发现者寻找食物来源的搜索空间更大,而加入者则根据生产者寻找食物。麻雀具有较强的抗捕食能力,在觅食过程中,部分麻雀被选择作为侦察者以躲避捕食者。发现者和加入者可以动态转化,以获得更好的食物来源。加入者总能找到生产商提供的更好的食物来源,有些加入者甚至监视发现者以获得更多的食物。

麻雀的位置用下列矩阵表示为:
在这里插入图片描述其中,n表示麻雀数量,d表示待优化变量的维数。

所有麻雀的适应度值表示为:
在这里插入图片描述

其中,矩阵的每一行的值表示个体的适应度值。在搜索过程中,先得到食物的是有着较好适应度值发现者,发现者的搜索范围是最大的,因为需要给整个种群寻找食物。发现者的位置更新方法:
在这里插入图片描述其中t是当前迭代次数,j=1,2,3,…,d,Xti,j代表的是在迭代t次时,第i行第j维的值,Itermax表示最大迭代次数,Q表示的是服从正态分布的随机数,L为一个1×d的矩阵,其中每个元素都是1。R2和ST分别表示报警值和安全阈值。当R2<ST时,发现者能够在没有捕食者的情况下继续广泛搜索,当R2≥ST时,意味着麻雀已经被捕食者发现,所有麻雀应该迅速飞到其他安全区域。一些加入者会在整个觅食过程中会盯紧发现者,如果发现者找到了更好的
食物,加入者会立即去争夺食物,加入者的位置更新公式为:
在这里插入图片描述其中,Xp代表当前发现者的最佳位置,Xworst代表麻雀最坏的位置,A表示一个1× d的矩阵,其每个元素值随机被赋值为1或−1,A+=AT(AAT)-1

当i>n/2时表示侦查者没有得到食物,需要飞到其他地方以获得更高的能量。为了注意危险环境,随机选择10% - 20%的麻雀作为侦察麻雀,并根据下式更新侦察麻雀的位置。
在这里插入图片描述
其中,Xbest是种群当前的最优位置,β是随机数,服从正态分布,均值为0,方差为1。K是控制因子,它是一个随机数,当前麻雀的适应度值由fi所表示,fg和fw分别表示当前全局最优适应度值以及当前全局最差适应度值,
ε是常数,值为很小,防止分母为0。当fi≠fg时,此时的麻雀正位于种群的边缘,在那里更容易遇到捕食者;当fi=fg时,表示麻雀位于种群的中心,需要接近其他麻雀以防止捕食。

代码如下:

# -*- coding: utf-8 -*-
""" 
@Time    : 2022/10/20 22:39
@Author  : Xu Yong Kang 
"""
def SSA(pop,dim,lb,ub,Maxiter,fun):
    '''Sparrow Search Algorithm'''
    '''
    Input:
    pop:种群数量
    dim:每个个体的维度
    ub:上边界
    lb:下边界
    fun:适应度函数
    Maxiter:最大迭代次数
    
    Output:
    Bestscore:最优解对应的适应度值
    Bestposition:最优解
    Itercurve:迭代曲线
    '''
    ST=0.8     #安全阈值
    PD=0.2     #探索者比例
    SD=0.1     #意识到危险的麻雀数量占总数比例
    PDnumber=int(pop*PD)            #探索者数量
    SDNumber=int(pop*SD)            #意识到有危险的麻雀数量
    X=initialization(pop,ub,lb,dim)  #种群初始化
    fitness=CaculateFitness(X,fun)    #适应度值计算
    fitness,sortIndex=SortFitness(fitness)
    X=SortPosition(X,sortIndex)
    Bestscore=copy.copy(fitness[0])
    Bestposition=np.zeros([1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值