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

猎豹算法(CO)优化BP神经网络原理及Matlab代码

时间:2024-09-08 09:24:31浏览次数:14  
标签:猎物 CO pop 猎豹 BP Matlab end

目录

0 引言

1 数学模型

2 优化方式

3 Maltab代码

3.1 伪代码

3.2 CO主函数代码

3.3 CO-BP

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 优化方式

前篇对BP神经网络原理讲解(BP神经网络原理及matlab代码-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述CO原理介绍,可以将BP神经网络权值和阈值作为猎豹种群位置,每一个种群位置对应BP神经网络的预测值,将这个预测值作为适应度进行上述猎豹狩猎活动,更新更优猎豹位置。

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-BP

1)单输出回归预测:单输出回归预测:猎豹算法优化BP神经网络(CO-BP)

2)多输出回归预测:私信

3)分类模型:私信

4)时间序列:私信

4 视频讲解

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

标签:猎物,CO,pop,猎豹,BP,Matlab,end
From: https://blog.csdn.net/m0_74389201/article/details/141671260

相关文章

  • 猎豹算法(CO)优化支持向量机原理及Matlab代码
    目录0引言1数学模型2优化方式3Maltab代码3.1伪代码3.2CO主函数代码3.3CO-SVM4视频讲解0引言猎豹算法(cheetahoptimizer,CO)是MohammadAminAkbari于2022年基于猎豹的狩猎策略启发而提出的智能算法。CO模拟猎豹的三种主要策略来捕猎猎物,即搜索、坐着和攻击;同时......
  • 猎豹算法(CO)优化长短期记忆神经网络原理及Matlab代码
    目录0引言1数学模型2优化方式3Maltab代码3.1伪代码3.2CO主函数代码3.3CO-LSTM4视频讲解0引言猎豹算法(cheetahoptimizer,CO)是MohammadAminAkbari于2022年基于猎豹的狩猎策略启发而提出的智能算法。CO模拟猎豹的三种主要策略来捕猎猎物,即搜索、坐着和攻击;同......
  • 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;......