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

火鹰算法(FHO)优化BP神经网络原理及Matlab代码

时间:2024-08-24 09:23:13浏览次数:8  
标签:猎物 FHO Pop 神经网络 火鹰 BP

目录

0 引言

1 数学模型

2 优化方式

3 Matlab代码

3.1 伪代码

3.2 FHO主函数代码

3.3 FHO-BP

4 视频讲解

0 引言

火鹰优化(Fire Hawk Optimizer, FHO)算法是由Mahdi Azizi等人于2022年提出一种基于黑鸢(Milvus migrans)、啸栗鸢(Haliastur sphenurus)和褐隼(Falco berigora)等火鹰的觅食行为的进化算法。算法灵感来源火鹰利用自然条件纵火引诱猎物出逃行为来实现捕食行为。

1 数学模型

FHO利用纵火进行捕食行为数学模型主要包括生火、传火及捕食等过程,其数学模型见下:

1)初始化火鹰和猎物的位置:利用随机初始化方程来确定

式中N为总位置数,d为问题维度,Xmin和Xmax为解空间的上下界限。同时将位置对应适应度较好作为火鹰,其他作为食物位置,其方程见下式:

式中PR为猎物位置,FH为火鹰位置,同时m+n=N。

2)确定PR和FH距离:便于火鹰对猎物进行纵火捕食。

式中Dk1为第l只火鹰和第k只猎物的距离,(x1,y1)为火鹰坐标,(x2,y2)为猎物的坐标。

3)火鹰纵火更新自身位置:火鹰通过捡燃烧火把在自己特定领域进行纵火引出猎物,或使用其他火鹰火把进行纵火更新自身位置。

FH1new为FH1只火鹰的新位置,GB为当前搜索空间最优火鹰,FHnear为邻居火鹰,r1和r2为0到1均匀分布的随机数,用于确定火鹰向最优火鹰或者邻居火鹰移动的趋势。

4)猎物位置更新:在火鹰纵火后,其一,猎物会进行躲避、误向火鹰位置跑去从而更新自身新位置,其二,猎物会向其他领域火鹰移动甚至向更远地方移动,其位置更新如下:

式(7)中PRqnew为被第l只火鹰(FHl)包括的第q个猎物,其中SP1为FH1火鹰属下的安全点,r3和r4为0到1均匀分布的随机数,用于确定猎物向火鹰或者向安全点移动的概率;式(8)PRq new为第q猎物被第l个火鹰包围新位置,其中FHalter为搜索空间另一只火鹰,SP为FH1火鹰领域之外的安全点,r5和r6为0到1均匀分布的随机数,用于确定猎物向其他火鹰或者向其他领域安全点移动的概率.

2 优化方式

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

3 Matlab代码

3.1 伪代码

3.2 FHO主函数代码

%% 参数
%nPop 种群
%VarMin,VarMax 问题维度上下界限
%VarNumber 问题维度
%SYD 适应度函数
%HN 火鹰个体数
%distance 距离函数
%MaxFes 最大迭代次数


%% 初始化
Pop=[]; 
Cost=[];
for i=1:nPop
    % 初始化种群
    Pop(i,:)=unifrnd(VarMin,VarMax,[1 VarNumber]);
    
    % 初始化适应度
    Cost(i,1)=SYD(Pop(i,:),net);
    net.trainParam.showWindow = 0;
    FEs=FEs+1;
end
% 种群排序
[Cost, SortOrder]=sort(Cost);
Pop=Pop(SortOrder,:);
BestPop=Pop(1,:);
SP=mean(Pop);

% 火鹰
FHPops=Pop(1:HN,:);

% 猎物
Pop2=Pop(HN+1:end,:);

% 火鹰与猎物之间的距离
for i=1:HN
    nPop2=size(Pop2,1);
    if nPop2<HN
        break
    end
    Dist=[];
    for q=1:nPop2
        Dist(q,1)=distance(FHPops(i,:), Pop2(q,:));

    end
    [ ~, b]=sort(Dist);
    alfa=randi(nPop2);
    PopNew{i,:}=Pop2(b(1:alfa),:);
    Pop2(b(1:alfa),:)=[];

    if isempty(Pop2)==1
        break
    end
end
if isempty(Pop2)==0

    PopNew{end,:}=[PopNew{end,:} ;Pop2];

end

% 更新最佳
GB=Cost(1);
BestPos=BestPop;

%% 开始
while FEs < MaxFes
    Iter=Iter+1;
    PopTot=[];
    Cost=[];
    for i=1:size(PopNew,1)
        PR=cell2mat(PopNew(i));
        FHl=FHPops(i,:);
        SPl=mean(PR);
        
        Ir=unifrnd(0,1,1,2);
        FHnear=FHPops(randi(HN),:);
        FHl_new=FHl+(Ir(1)*GB-Ir(2)*FHnear);
        FHl_new = max(FHl_new,VarMin);
        FHl_new = min(FHl_new,VarMax);
        PopTot=[PopTot ;FHl_new];
        
        for q=1:size(PR,1)
            
            Ir=unifrnd(0,1,1,2);
            PRq_new1=PR(q,:)+((Ir(1)*FHl-Ir(2)*SPl));
            PRq_new1 = max(PRq_new1,VarMin);
            PRq_new1 = min(PRq_new1,VarMax);
            PopTot=[PopTot ;PRq_new1];
            
            Ir=unifrnd(0,1,1,2);
            FHAlter=FHPops(randi(HN),:);
            PRq_new2=PR(q,:)+((Ir(1)*FHAlter-Ir(2)*SP));
            PRq_new2 = max(PRq_new2,VarMin);
            PRq_new2 = min(PRq_new2,VarMax);
            PopTot=[PopTot ;PRq_new2];
        end
    end
    for i=1:size(PopTot,1)
        Cost(i,1)=SYD(PopTot(i,:),net);
        net.trainParam.showWindow = 0;       
    end
   % 种群排列
    [Cost, SortOrder]=sort(Cost);
    PopTot=PopTot(SortOrder,:);
    Pop=PopTot(1:nPop,:);

    HN = randi([1 ceil(nPop/5)],1,1);

    BestPop=Pop(1,:);
    SP=mean(Pop);
    FHPops=Pop(1:HN,:);
    Pop2=Pop(HN+1:end,:);
    clear PopNew
    
    % 火鹰与猎物之间的距离
    for i=1:HN
        nPop2=size(Pop2,1);
        if nPop2<HN
            break
        end
        Dist=[];
        for q=1:nPop2
            Dist(q,1)=distance(FHPops(i,:), Pop2(q,:));
        end
        [ ~, b]=sort(Dist);
        alfa=randi(nPop2);
        PopNew{i,:}=Pop2(b(1:alfa),:);
        Pop2(b(1:alfa),:)=[];
        if isempty(Pop2)==1
            break
        end
    end

    if isempty(Pop2)==0
        PopNew{end,:}=[PopNew{end,:} ;Pop2];
    end

    % 更新最佳适应度
    if Cost(1)<GB
        BestPos=BestPop;
    end
    GB=min(GB,Cost(1));
    
    BestCosts(Iter)=GB;
    FEs = FEs+1;
    Conv_History(FEs)=GB;
    
end

3.3 FHO-BP

1)单输出回归预测:单输出回归预测:火鹰算法优化BP神经网络模型(FHO-BP)

2)多输出回归预测:多输出回归预测:火鹰算法优化BP神经网络模型(FHO-BP)

3)分类模型:分类模型:火鹰算法优化BP神经网络模型(FHO-BP)

4)时间序列:时间序列:火鹰算法优化BP神经网络模型(FHO-BP)

4 视频讲解

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

标签:猎物,FHO,Pop,神经网络,火鹰,BP
From: https://blog.csdn.net/m0_74389201/article/details/141322945

相关文章

  • 火鹰算法(FHO)优化支持向量机原理及Matlab代码
    目录0引言1数学模型2优化方式3Matlab代码3.1伪代码3.2FHO主函数代码3.3FHO-SVM4视频讲解0引言火鹰优化(FireHawkOptimizer,FHO)算法是由Mahdi Azizi等人于2022年提出一种基于黑鸢(Milvusmigrans)、啸栗鸢(Haliastursphenurus)和褐隼(Falcoberigora)......
  • Webpack 核心流程
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:霜序三个阶段初始化阶段初始化参数:从配置文件、配置对象、shell参数中读取,与默认的配置参数结合得出最后的参数。创建编译器对象:通......
  • webpack4升级到webpack5后部分页面出现Uncaught (in promise) ReferenceError: Cannot
    循环依赖当两个或多个模块相互引用时,就会发生JavaScript中的循环依赖(也称为循环依赖)。这可以是直接引用(A->B->A):或间接( A->B->C->A):虽然循环依赖可能不会直接导致错误,但它们几乎总是会带来意想不到的后果。这可能表现为TypeScript类型检查缓慢或开发服务器频......
  • webpack 热更新实现原理
    修改entry配置首先通过启动webpack-dev-server会修改webpack.config.js的entry配置,新增两个入口文件:webpack-dev-server/client/index.jswebpack/hot/dev-server.jswebpack-dev-server/client/index.js包含的是客户端向服务端通信的相关代码。webpack/hot/dev-s......
  • 使用cilium开发ebpf程序
    使用go开发ebpf程序最常见的一个框架就是cilium。开发前需要了解ebpf,了解go语言的基础知识。在本地安装go之后下载bpf2gogogetgithub.com/cilium/ebpf/cmd/bpf2go从最简单的开发框架开始下载示例源码gitclonehttps://github.com/cilium/ebpf.git在ebpf/examples下是官方......
  • JSP学校社团管理系统bp138(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表项目功能:用户,社长,社团信息,加入社团,退出社团,社团统计,社团活动,活动报名,社团成员开题报告内容JSP学校社团管理系统  开题报告一、课题题目JSP学校社团管理系统设计与实现二、课题研究背景及意义2.1研究背景随着高校扩招和社团文化的日益丰富......
  • 粒子群算法和引力搜索算法的混合算法(PSOGSA)优化BP神经网络原理及matlab代码
    目录0引言1数学模型2模型对比3matlab代码3.1伪代码示意图3.2PSOGSA-BP4视频讲解0引言基于已发表智能算法文献研究,SeyedaliMirjalili等人在发现PSO的开发能力与GSA的探索能力有者较好结合性能,因此基于二者算法优势点提出混合算法PSOGSA。该算法主要利用PSO鸟......
  • python subprocess 执行Linux指令
    一、subprocess模块1、概述subprocess模块首先推荐使用的是它的run方法subprocess.run(),更高级的用法可以直接使用Popen接口subprocess.Popen()。2、优点安全性:与os.system相比,subprocess避免了shell注入攻击的风险。灵活性:subprocess可以与子进程的stdin、stdout和std......
  • webpack 构建流程
    webpack可以分为4个阶段:初始化阶段-webpack合并配置项创建Compiler注册插件编译阶段-build读取入口文件从入口文件开始编译调用loader对源代码进行转换借助babel解析为AST收集依赖模块递归对依赖模块进行编译操作生成阶段-seal创建chunk对......
  • Abp vNext+SignalR
    我的项目基于ABPvNext(版本8.2.0)+Blazor+SQLServer。从官网下载的模板默认不包含SignalR,因此这里记录了如何在ABPvNext中集成SignalR实现实时通信的过程。以下是一个详细的集成步骤指南:1.安装所需的NuGet包官方文档:https://abp.io/docs/latest/framework/rea......