麻雀搜索算法(SSA)优化长短期记忆神经网络原理及matlab代码

目录

0 引言

1 数学模型

2 优化长短期记忆神经网络

3 matlab代码

3.1 伪代码

3.2 SSA主函数代码

3.3 SSA-LSTM

4 视频讲解

0 引言

麻雀搜索算法(Sparrow Search Algorithm,SSA)是由Jiankai Xue等人于2020提出群智能算法,该算法主要受麻雀的觅食行为和反捕食行为启发而构建对应数学模型进行寻优分析。通过多个模型对比分析,SSA算法寻优能力和收敛速度较为不错。

1 数学模型

SSA模拟麻雀的觅食行为和反捕食行为。将麻雀分为生产者和拾荒者,主要是生产者寻优食物的和拾荒者抢夺食物的行为构建数学模型。

1)麻雀种群位置和适应度矩阵表示:

式(1)为麻雀种群位置,其中n为麻雀数量,d为问题维度。式(2)为式(1)对应适应度。

2)生产者探索食物:具有适应度小的麻雀作为生产者,取负责寻找食物和指导整个种群的流动,其数学模型见下式:

式中R2为警报值,ST为安全阈值,当R2<ST意味着周围没有捕食者,生产者进入宽搜索模式,R2≥ST,这意味着一些麻雀已经发现了捕食者;Q为符合正态分布的随机值,L为均匀分布的问题维度随机值。

3)拾荒者监视生产者:拾荒者会频繁地监控生产者。一旦他们发现生产者找到了好的食物,他们就会立即离开现在的位置去争夺食物。如果他们赢了,他们可以立即得到生产者的食物,否则他们将继续执行规则下一步活动,其具体数学模型见下式:

式中Xp为生产者最佳位置,A为随机赋值为1或-1的问题维度的随机矩阵,L为随机问题维度矩阵。

4)群体边缘的麻雀在意识到危险时迅速向安全区域移动以获得更好的位置:当麻雀对应适应大于最小适应度fg时,贼其处于危险位置,将会向最优位置靠拢,当fi=fg。处于种群中间的麻雀意识到危险,需要靠近其他麻雀,此时只能寻求更低适应度种群位置,加快收敛速度。

式β步长控制参数,K∈[-1,1]的随机参数

2 优化长短期记忆神经网络

优化的方式:

前篇对长短期记忆神经网络(长短期记忆神经网络LSTM原理及matlab代码-CSDN博客)原理讲解,从长短期记忆神经网络matlab代码运算过程中,可以看到LSTM受多个超参数影响(隐藏层节点、学习率、分批量、正则化等等)。因此结合上述SSA原理介绍,可以将这些超参数作为麻雀种群,每一个种群对应LSTM的预测值,将这个预测值作为适应度进行上述麻雀觅食和反捕食行为,更新最优位置。

3 matlab代码

3.1 伪代码

3.2 SSA主函数代码

%%参数
% M    最大迭代次数
% pFit 适应度值
% pNum  生产者种群数量
% pop  麻雀种群数量
% fMin 最小适应度
% SYD 适应度函数
% ub、lb 问题维度边界
% dim 问题维度


%SSA主循环
for t = 1 : M    
    [ans, sortIndex] = sort(pFit);
    [fmax,B]=max(pFit);
    worse= x(B,:);

    r2=rand(1);%警报值
    ST = 0.8;%安全阈值
    % 生产者负责寻找食物时位置更新
    if(r2 < ST)
        for i = 1 :pNum  
            r1=rand(1);
            x(sortIndex(i), :)= pX(sortIndex(i),:)*exp(-(i)/(r1*M));% Eq (3)
            x(sortIndex(i), :)= Bounds(x(sortIndex(i),:), lb, ub);
            fit(sortIndex(i))= SYD(x(sortIndex(i),:),net); 
            net.trainParam.showWindow = 0;
        end
    else
        for i = 1 :pNum  
            x(sortIndex(i), :) = pX(sortIndex(i),:)+randn(1)*ones(1,dim); % Eq (3)
            x(sortIndex(i), :) = Bounds(x(sortIndex(i),:), lb, ub);
            fit(sortIndex(i)) = SYD(x(sortIndex(i),:),net);
            net.trainParam.showWindow = 0;
        end    
    end

    [fMin,bestII] = min(fit);      
    bestXX = x(bestII, :); 
    % 拾荒者频繁地监视生产者
    for i = (pNum + 1) : pop  
        A=floor(rand(1,dim)*2)*2-1;%随机赋值为1或-1的dim随机矩阵
        if(i>(pop/2))
            x(sortIndex(i),:)=randn(1)*exp((worse-pX(sortIndex(i), :))/(i)^2); %Eq(4)
        else
            x(sortIndex(i),:)=bestXX+(abs((pX(sortIndex(i),:)-bestXX)))*(A'*(A*A')^(-1))*ones(1,dim);   %Eq(4)
        end 
        x(sortIndex(i),:)= Bounds(x(sortIndex(i),:), lb, ub);
          
        fit(sortIndex(i))= SYD(x(sortIndex(i),:),net);  
        net.trainParam.showWindow = 0;
    end

    c=randperm(numel(sortIndex));
    b=sortIndex(c(1:round(pop* 0.2)));
    
    % 群体边缘的麻雀在意识到危险时迅速向安全区域移动以获得更好的位置
    for j = 1 :length(b)      
    
        if (pFit(sortIndex(b(j)))>(fMin))
            x(sortIndex(b(j)),:)=bestX+(randn(1,dim)).*(abs((pX( sortIndex(b(j)),:)-bestX))); % Eq(5)
        else
            x(sortIndex(b(j)),:) =pX(sortIndex(b(j)),:)+(2*rand(1)-1)*(abs(pX(sortIndex(b(j)),:)-worse))/(pFit(sortIndex( b(j)))-fmax+1e-50); % Eq(5)
        end
        
        x(sortIndex(b(j)),:) =Bounds(x(sortIndex(b(j)),:), lb, ub);
        fit(sortIndex(b(j))) =SYD(x(sortIndex(b(j)),:),net);
        net.trainParam.showWindow = 0;
    end
    for i = 1: pop 
        if (fit(i) < pFit(i))
            pFit(i) = fit(i);
            pX(i,:) = x(i,:);
        end
        
        if(pFit(i) < fMin)
           fMin= pFit(i);
            bestX = pX(i,:);            
        end
    end
    Convergence_curve(t)=fMin;
end

3.3 SSA-LSTM

1)时间序列:时间序列:麻雀搜索算法优化长短期记忆神经网络模型(SSA-LSTM)

4 视频讲解

B站讲解:‘ 不想学习的陈成 ’

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值