山瞪羚算法(MGO)优化长短期记忆神经网络原理及Matlab代码

目录

0 引言

1 数学模型

2 优化方式

3 Matlab代码

3.1 伪代码

3.2 MGO主函数代码

3.3 MGO-LSTM

4 视频讲解

0 引言

山瞪羚算法(Mountain Gazelle Optimizer,MGO)是由Benyamin Abdollahzadeh等人于2022年基于野生山瞪羚的社会生活和等级制度提出新型群智能算法。其中该算法利用山地瞪羚生活中的四个主要因素(领地独居雄性、母系畜群、单生雄性畜群、迁徙觅食)来实现有效算法探索和开发。

1 数学模型

MGO优化算法利用山地瞪羚生活中的四个主要因素进行模型构建并优化问题:领地独居雄性(TSM)、母系畜群(MH)、单身雄性畜群(BMH)和迁徙觅食(MSF)

1)TSM:当雄性山瞪羚长到成年并变得足够强壮时,它们就会形成一个孤独的领土,具有高度的领土意识,以及遥远的领土分离。以下公式为模拟该行为。

式中male(gazelle)为成年雄性山瞪羚全局最佳位置,ri1,ri2为随机整数1或者2;BH为年轻雄性群体系数向量,Xra为间隔ra的随机山瞪羚,Mpr为随机数;F为自适应系数,Ni(D)是标准正态分布的随机数,Iter为当前迭代,MaxIter为最大迭代次数;Cofi为是一个随机选择的向量系数。

2)MH:母系群在山瞪羚的生命周期中扮演着至关重要的角色,因为这些类型的群体会生出坚实的雄性瞪羚。这种行为模型如下:

式中r为整个种群中随机选择的山瞪羚向量位置ri3,ri4为1到2之间随机数。

3)BMH:雄性山瞪羚为了领地和雌性交配权进行竞争,其数学模型如下:

式中x为当前山瞪羚位置向量。

4)MSF:山瞪羚寻找食物而迁徙,表现出奔跑和跳跃能力,进而更新自身位置:

2 优化方式

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

3 Matlab代码

3.1 伪代码

3.2 MGO主函数代码

主函数代码

%% 参数
% MaxIter 最大迭代次数
% N 种群大小
% X 种群位置
% Coefficient_Vector cofi随着选择向量
% dim 问题维度
% ub,lb 问题维度边界
% Solution_Imp 4个山瞪羚行为位置更
% Boundary_Check 边界函数

% 主循环
    for Iter=1:MaxIter
        for i=1:N
            
            RandomSolution=randperm(N,ceil(N/3));

            %计算的年轻雄性畜群系数向量
            M=X(randi([(ceil(N/3)),N]),:)*floor(rand)+mean(X(RandomSolution,:)).*ceil(rand);%eq (2)     
            
            % 计算随机选择系数向量
            cofi = Coefficient_Vector(dim,Iter,MaxIter);%eq (4)
            
            %位置参数
            A =randn(1,dim).*exp(2-Iter*(2/MaxIter));
            D =(abs(X(i,:)) + abs(BestX))*(2*rand-1);
                       
            % 进行山瞪羚社会活动的位置更新
            NewX = Solution_Imp(X,BestX,lb,ub,N,cofi,M,A,D,i); 
            
            % 成本函数计算和边界检查
            [NewX , Sol_CostNew] = Boundary_Check(NewX,net,LB,UB);
                        
            % 为羚羊群增添新成员
            X=[X; NewX];       
            Sol_Cost=[Sol_Cost; Sol_CostNew];
            [~,idbest]=min(Sol_Cost);
            BestX=X(idbest,:);
            
        end
        
        % 更新种群
        [Sol_Cost, SortOrder]=sort(Sol_Cost);
        X=X(SortOrder,:);
        [BestFitness,idbest]=min(Sol_Cost);   
        BestX=X(idbest,:);
        X=X(1:N,:);
        Sol_Cost=Sol_Cost(1:N,:);
        cnvg(Iter)=BestFitness;
        BestF=BestFitness;
    end
end

cofi随机选择系数向量代码:

function cofi = Coefficient_Vector(dim,Iter,MaxIter)

    a2=-1+Iter*((-1)/MaxIter);
    u=randn(1,dim);
    v=randn(1,dim); 

    cofi(1,:)=rand(1,dim);
    cofi(2,:)= (a2+1)+rand;
    cofi(3,:)= a2.*randn(1,dim);
    cofi(4,:)= u.*v.^2.*cos((rand*2)*u);
            
end

山瞪羚4个社会行为位置更新代码:

function NewX = Solution_Imp(X,BestX,lb,ub,N,cofi,M,A,D,i)

    NewX(1,:)=(ub-lb)*rand+lb;
    NewX(2,:)=BestX-abs((randi(2)*M-randi(2)*X(i,:)).*A).*cofi(randi(4),:);%eq (1)
    NewX(3,:)=(M+cofi(randi(4),:))+(randi(2)*BestX-randi(2).*X((randi(N)),:)).*cofi(randi(4),:);%eq (6)
    NewX(4,:)=(X(i,:)-D)+(randi(2)*BestX-randi(2)*M).*cofi(randi(4),:);%eq (7)
            
end

3.3 MGO-LSTM

1)时间序列:时间序列:山瞪羚算法优化长短期记忆神经网络(MGO-LSTM)

4 视频讲解

B站搜索:‘ 不想学习的陈成 ’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值