麻雀搜索算法(SSA)

文章介绍了麻雀搜索算法(SSA)的基本原理和流程,包括种群初始化、适应度值计算、捕食者、加入者和警觉者的位置更新。提供了一段Python代码示例,用于求解二维空间中目标函数的最小值,展示了算法在解决优化问题中的应用。通过迭代和适应度函数,算法找到最优解并输出结果。此外,还绘制了适应度曲线以可视化优化过程。
摘要由CSDN通过智能技术生成

一、算法原理

        

 加入者位置更新:

 警觉者位置更新:

                                                             

二、算法流程

        步骤1:初始化种群、迭代次数,初始化捕食者和加入者比例;

       步骤2 :计算适应度值,并排序;

       步骤3:利用式(3-4)更新捕食者位置;

       步骤4:利用式(4)更新加入者位置;

       步骤5:利用式(3-6)更新警戒者位置;

       步骤6:计算适应度值,并更新麻雀位置;

       步骤7:是否满足停止条件,满足则退出,输出结果,否则,重复执行步骤2-6。

三、部分python代码

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值