首页 > 编程语言 >猎豹算法(CO)优化长短期记忆神经网络原理及Matlab代码

猎豹算法(CO)优化长短期记忆神经网络原理及Matlab代码

时间:2024-09-08 09:23:59浏览次数:10  
标签:猎物 CO 长短期 pop 猎豹 Matlab 狩猎 end

目录

0 引言

1 数学模型

2 优化方式

3 Maltab代码

3.1 伪代码

3.2 CO主函数代码

3.3 CO-LSTM

4 视频讲解

0 引言

猎豹算法(cheetah optimizer,CO)是MohammadAminAkbari于2022年基于猎豹的狩猎策略启发而提出的智能算法。CO模拟猎豹的三种主要策略来捕猎猎物,即搜索、坐着和攻击;同时猎豹狩猎过程中还加入了离开猎物回家的策略,以提高该框架的种群多样性、收敛性能和鲁棒性。

1 数学模型

CO数学模拟包括俩部分,狩猎策略(搜索猎物,坐等猎物,攻击猎物),回家重新开始新一轮狩猎,以下是其的数学模型构建:

1)搜索策略:猎物在寻找猎物阶段,对设置区域进行扫描。

式中X为猎物种群位置,r和a分别为猎物随机参数和步长,符合正态分布形式。

2)坐等策略:在搜索策略下,猎物可能会暴露在猎豹的视野中。在这种情况下,猎豹的每一个动作都可能让猎物意识到猎豹的存在,并导致猎物逃跑。为了避免这种担忧,猎豹可能会决定伏击(躺在地上或躲在灌木丛中),以获得足够的接近它的猎物。其数学模型如下

3)攻击策略:猎豹在决定攻击猎物时,其利用两个关键因素来攻击猎物:速度和敏捷性。当一只猎豹决定攻击它时,全速冲向猎物。过了一会儿,猎物注意到了猎豹的攻击,并开始逃跑。猎豹用其敏锐的眼睛在拦截路径上快速追逐猎物,其数学模型如下:

式中rij转向因子,其式子为|ri,j| exp (ri,j/2)sin 2πri,j,该因子反映了猎豹在捕猎模式下的急转弯策略。βij为相互因子,其反映捕猎过程中猎豹之间或猎豹和首领之间的相互作用。

4)回家重新新的猎豹位置进行新一轮的狩猎活动:猎豹狩猎到食物会返回家园食用,或其为狩猎到食物会回到家园中,重新分布首领猎豹等位置重新进行上述狩猎策略,进而捕捉猎物。

2 优化方式

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

3 Maltab代码

3.1 伪代码

3.2 CO主函数代码

%% 参数
% pop 包括种群pop.Position和对应适应度pop.Cost
% MaxIt 最大迭代次数
% X_best 最好适应度种群位置
% Globest 最好适应度
% SYD 适应度函数
% T 狩猎时间
% it 迭代计算器



%% CO的主函数代码
while FEs <= MaxIt 

    m = 1+randi (ceil(n/2));         
    i0 = randi(n,1,m);% 随机选择猎豹成员              
    for k = 1 : m % 每个成员执行以下任务      
        i = i0(k);           
                
        % 定义成员io邻居              
        if k == length(i0)                    
            a = i0(k-1);                
        else                  
            a = i0(k+1);                
        end              
                
        X = pop(i).Position;    % 第 i 只猎豹的当前位置                
        X1 = pop(a).Position;   % 邻居a的位置        
        Xb = BestSol.Position;  % 领导位置     
        Xbest = X_best.Position;% 最佳位置                   
                
        kk=0;
                
        % 执行选择重组种群,可能会提高 CO精度                         
        if i<=2 && t>2 && t>ceil(0.2*T+1) && abs(BestCost(t-2)-BestCost(t-ceil(0.2*T+1)))<=0.0001*Globest(t-1)                                 
            X = X_best.Position;                          
            kk = 0;                      
        elseif i == 3                         
            X = BestSol.Position;                                  
            kk = -0.1*rand*t/T;
        else                                    
            kk = 0.25;                             
        end     
                
        if mod(it,100)==0 || it==1               
            xd = randperm(numel(X));
        end
 
        Z = X;
                
        %
                
        for j = xd % 选择任意一组安排
            
            r_Hat = randn;% R随机化参数, 可用Eq (1)
            r1 = rand;
            if k == 1 % 领导者的步长(假定 k==1 与领导者编号相关联)
                alpha = 0.0001*t/T.*(ub(j)-lb(j)); % 步长,公式 可用(1)                   
            else       % 成员步长                       
                alpha = 0.0001*t/T*abs(Xb(j)-X(j))+0.001.*round(double(rand>0.9));%成员步长,可用公式 (1)         
            end
                          
            r = randn;
            r_Check = abs(r).^exp(r/2).*sin(2*pi*r); % 标准正态分布的正态分布随机数,可用Eq(3)
            beta = X1(j)-X(j);     % 猎豹之间或猎豹与领导者在捕获模式下的互动系数,可用Eq(3)  
           
            h0 = exp(2-2*t/T);
            H = abs(2*r1*h0-h0);

            r2 = rand;
            r3 = kk+rand;

            
            if r2 <= r3             
                r4 = 3*rand; 
                
                if H > r4 
                    % 搜索策略
                    Z(j) = X(j)+r_Hat.^-1.*alpha;    % 搜索, Eq(1)                     
                else
                    % 攻击策略
                    Z(j) = Xbest(j)+r_Check.*beta;    % 攻击, Eq(3) 
                end
            else
                Z(j) = X(j); % 坐等, Eq
            end
        end

        % 更新成员 i 的解
        % 边界检查          
        xx1=find(Z<lb);
        Z(xx1)=lb(xx1)+rand(1,numel(xx1)).*(ub(xx1)-lb(xx1));
        xx1=find(Z>ub);
        Z(xx1)=lb(xx1)+rand(1,numel(xx1)).*(ub(xx1)-lb(xx1));
                

        % 适应度比较
               
        NewSol.Position = Z;
        NewSol.Cost = SYD(NewSol.Position,net);
        net.trainParam.showWindow = 0;
                
        if NewSol.Cost < pop(i).Cost
            pop(i) = NewSol;
            if pop(i).Cost < BestSol.Cost
                BestSol = pop(i);
            end
        end
        FEs = FEs+1;
    end

    t = t+1; 
            
    % 离开猎物,返回家园
    
    if t>T && t-round(T)-1>=1 && t>2
        if  abs(BestCost(t-1)-BestCost(t-round(T)-1))<=abs(0.01*BestCost(t-1))

            % 更改领导者位置
            best = X_best.Position;
            j0=randi(D,1,ceil(D/10*rand));
            best(j0) = lb(j0)+rand(1,length(j0)).*(ub(j0)-lb(j0));
            BestSol.Cost = SYD(best,net);
            net.trainParam.showWindow = 0;
            BestSol.Position = best; % 领导人的新位置 
            FEs = FEs+1;
            
            i0 = randi(n,1,round(1*n));
            pop(i0(n-m+1:n)) = pop1(i0(1:m)); % 一些种群恢复了最初的位置
            pop(i) = X_best; % 将成员 i 替换为猎物
                    
            t = 1; % 重置狩猎时间  
        end
    end
    it = it +1;          
            
    % 更新猎物(全体最佳)位置
    if BestSol.Cost<X_best.Cost
        X_best=BestSol;
    end
    
    BestCost(t)=BestSol.Cost;
    CO_Convergence(FEs) = X_best.Cost;
end
end

3.3 CO-LSTM

1)时间序列:时间序列:猎豹算法优化长短期记忆神经网络(CO-LSTM)

4 视频讲解

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

标签:猎物,CO,长短期,pop,猎豹,Matlab,狩猎,end
From: https://blog.csdn.net/m0_74389201/article/details/141672594

相关文章

  • SpringBoot自动装配-Condition
    SpringBoot的自动装配(Auto-configuration)是其框架中一项强大的功能,它基于条件化装配(ConditionalConfiguration)机制,能够根据应用程序的依赖和配置自动完成大部分常见的配置工作,从而大大减少了开发者在项目中进行繁琐手动配置的工作量。Condition机制是SpringBoot自动装配的......
  • Calico和flannel区别
    Calico和Flannel是Kubernetes中常用的网络插件(CNI插件),它们在设计理念、功能和使用场景上有一些显著的区别。以下是它们的主要区别:1.网络架构Calico:使用了路由(Layer3)模型,支持IP路由。采用了BGP(边界网关协议)进行网络路由,这使得它能够在大规模集群中表现出色。支持多种网络......
  • calico网络原理、组网方式
    Calico是一个用于Kubernetes和其他容器编排系统的网络插件,主要提供高性能的网络连接和安全策略。其设计理念和组网方式如下:网络原理Layer3路由:Calico采用Layer3(L3)网络模型,允许每个Pod拥有一个唯一的IP地址。它通过在基础网络上直接路由IP流量来实现这一点,而不是使用Overl......
  • kubeconfig存放内容
    kubeconfig文件是Kubernetes客户端(如kubectl)用于与Kubernetes集群进行交互的配置文件。该文件包含了连接到一个或多个Kubernetes集群所需的信息。以下是kubeconfig文件中存放的主要内容:1.clusters描述:定义了Kubernetes集群的信息,包括集群的名称和API服务器的地......
  • LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现N*K时间复杂度
    3177.求出最长好子序列II题目链接题目描述给你一个整数数组nums和一个非负整数k。如果一个整数序列seq满足在下标范围[0,seq.length-2]中最多只有k个下标i满足seq[i]!=seq[i+1],那么我们称这个整数序列为好序列。请你返回nums中好子序列的最长长度......
  • Leetcode 第 409 场周赛题解
    Leetcode第409场周赛题解Leetcode第409场周赛题解题目1:3242.设计相邻元素求和服务思路代码复杂度分析题目2:3243.新增道路查询后的最短距离I思路代码复杂度分析题目3:3244.新增道路查询后的最短距离II思路代码复杂度分析题目4:3245.交替组III思路代码复杂度......
  • [Qt]cmake下Qt隐藏console的窗口
    最近在用Qt写一个GUI,最后release之后发现,伴随窗口启动的还有一个console窗口我用的是mingw+cmake的编译方法,查了很多资料终于找到了解决方法,如下:在CMakeList.txt中添加,然后console窗口就不见啦 #隐藏consoleif(WIN32)if(MSVC)set_target_propert......
  • Codeforces Round 970 (Div. 3)
    A.Sakurako'sExam分类讨论即可,当a为奇数,无法消去1,或者a==0且b为奇数时,无法消去2#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;voidsolve(){ inta,b; intflag=1; cin>>a>>b; if(a&1)flag=0;......
  • 【智能优化算法】水流优化器(WFO),SCI顶刊,含有MathType公式、伪代码、visio的流程图、m
    该文末包括5个内容:用MathType编辑的公式、伪代码、visio的流程图,matlab代码,PDF论文,拿来直接用,可以帮助科研者省下超多时间。受自然界水流形态的启发,该算法论文作者提出了一种新的全局优化算法——水流优化器(WFO)。发表在顶级SCI期刊IEEETransactionsonCybernetics(影响因......
  • LCP 485. 最大连续 1 的个数[lleetcode -11]
    从今天起,我们的算法开始研究搜索,首先就是DFS深度优先搜索(depth-firstseach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍历;因此遍历需要用先入后出的栈来实现,也可以通过与栈等价的递归来实现。对于树结构而言,由于总是对新节点调用遍历,因此看起来是向着“深”的方向前进......