SCI一区级 | Matlab实现BES-CNN-GRU-Mutilhead-Attention多变量时间序列预测

server/2024/11/14 23:14:16/

MutilheadAttention_0">SCI一区级 | Matlab实现BES-CNN-GRU-Mutilhead-Attention秃鹰算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测

目录

预测效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

基本介绍

1.Matlab实现BES-CNN-GRU-Mutilhead-Attention秃鹰算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测,要求Matlab2023版以上;
2.输入多个特征,输出单个变量,考虑历史特征的影响,多变量时间序列预测
3.data为数据集,main.m为主程序,运行即可,所有文件放在一个文件夹;
4.命令窗口输出R2、MSE、MAE、MAPE和RMSE多指标评价;
5.算法优化学习率,神经元个数,注意力机制的键值, 卷积核个数。

程序设计

layers0 = [ ...% 输入特征sequenceInputLayer([numFeatures,1,1],'name','input')   %输入层设置sequenceFoldingLayer('name','fold')         %使用序列折叠层对图像序列的时间步长进行独立的卷积运算。% CNN特征提取convolution2dLayer([3,1],16,'Stride',[1,1],'name','conv1')  %添加卷积层,641表示过滤器大小,10过滤器个数,Stride是垂直和水平过滤的步长batchNormalizationLayer('name','batchnorm1')  % BN层,用于加速训练过程,防止梯度消失或梯度爆炸reluLayer('name','relu1')       % ReLU激活层,用于保持输出的非线性性及修正梯度的问题% 池化层maxPooling2dLayer([2,1],'Stride',2,'Padding','same','name','maxpool')   % 第一层池化层,包括3x3大小的池化窗口,步长为1,same填充方式% 展开层sequenceUnfoldingLayer('name','unfold')       %独立的卷积运行结束后,要将序列恢复%平滑层flattenLayer('name','flatten')selfAttentionLayer(2,2)          %创建2个头,2个键和查询通道的自注意力层  dropoutLayer(0.1,'name','dropout_1')        % Dropout层,以概率为0.2丢弃输入fullyConnectedLayer(1,'name','fullconnect')   % 全连接层设置(影响输出维度)(cell层出来的输出层) %regressionLayer('Name','output')    ];lgraph0 = layerGraph(layers0);
lgraph0 = connectLayers(lgraph0,'fold/miniBatchSize','unfold/miniBatchSize');
pNum = round( pop *  P_percent );    % The population size of the producers   for t=1:MaxIt%%               1- select_space [pop BestSol s1(t)]=select_space(fobj,pop,nPop,BestSol,low,high,dim);%%                2- search in space[pop BestSol s2(t)]=search_space(fobj,pop,BestSol,nPop,low,high);%%                3- swoop[pop BestSol s3(t)]=swoop(fobj,pop,BestSol,nPop,low,high);Convergence_curve(t)=BestSol.cost;disp(num2str([t BestSol.cost]))ed=cputime;timep=ed-st;
end
function [pop BestSol s1]=select_space(fobj,pop,npop,BestSol,low,high,dim)
Mean=mean(pop.pos);
% Empty Structure for Individuals
empty_individual.pos = [];
empty_individual.cost = [];
lm= 2;
s1=0;
for i=1:npopnewsol=empty_individual;newsol.pos= BestSol.pos+ lm*rand(1,dim).*(Mean - pop.pos(i,:));newsol.pos = max(newsol.pos, low);newsol.pos = min(newsol.pos, high);newsol.cost=fobj(newsol.pos);if newsol.cost<pop.cost(i)pop.pos(i,:) = newsol.pos;pop.cost(i)= newsol.cost;s1=s1+1;if pop.cost(i) < BestSol.costBestSol.pos= pop.pos(i,:);BestSol.cost=pop.cost(i); endend
end

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/128577926?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501


http://www.ppmy.cn/server/18285.html

相关文章

ROS1快速入门学习笔记 - 01Linux基础

目录 一、Linux极简基础 二、C与Python极简基础 1. for循环 2. while循环 3. 面向对象 一、Linux极简基础 终端快捷键&#xff1a;ctrlaltt 命令行的操作方式 查看当前终端所在路径&#xff1a;pwd切换路径cd&#xff1b;例如cd /home/ 进入home文件夹&#xff1b;cd …

Flutter 从源码扒一扒Stream机制

Stream的基本使用 //1、创建一个流控制对象&#xff0c;只要用来控制流的暂停、取消和订阅 StreamController _controller StreamController();//2、实现对一个流的订阅和监听事件 _controller.stream.listen((event) { print("event$event"); });//3、添加一个事件…

采购数据分析驾驶舱分享,照着它抄作业

今天我们来看一张采购管理驾驶舱。这是一张充分运用了多种数据可视化图表、智能分析功能&#xff0c;从物料和供应商的角度全面分析采购情况的BI数据可视化报表&#xff0c;主要分为三个部分&#xff0c;接下来就分部分来了解一下。 第一部分&#xff1a;关键指标计算及颜色预…

【Redis】集群

文章目录 一、集群的功能二、Redis集群的槽位slot和分片2.1、概念2.2、slot槽位映射的算法2.2.1 哈希取余分区2.2.2 一致性hash算法2.2.3 哈希槽分区面试题&#xff1a;为什么redis集群的最大槽数是16384&#xff1f;面试题&#xff1a;redis集群会不会写丢失&#xff1f; redi…

盘点安防监控市场常见的AI视频智能分析边缘计算硬件及其特点分析

在当今数字化时代&#xff0c;视频智能分析边缘计算技术及其硬件产品正逐渐崭露头角&#xff0c;成为众多行业领域的得力助手。视频AI智能分析边缘计算硬件是一种专门设计用于实现视频分析和边缘计算的硬件设备。它通常具有高性能的处理器、专门的图形处理单元&#xff08;GPU&…

【JavaScript】localStorage

1. 什么是 localStorage&#xff1f; localStorage 是一个 JavaScript API&#xff0c;允许在浏览器中存储键值对数据。它提供了一个简单的持久性存储方案&#xff0c;数据保存在用户的本地浏览器中&#xff0c;并且在页面刷新或关闭后依然存在。它只能存储字符串类型的数据。…

APP开发_ js 控制手机是否显示状态栏

1 Android 控制手机显示或隐藏状态栏的方法 1.1 使用 View 的 setSystemUiVisibility 方法 这个方法允许设置系统 UI 的可见性&#xff0c;包括状态栏。你可以通过组合不同的标志来实现不同的效果。 示例代码&#xff1a; Override protected void onCreate(Bundle saved…

<c++基础(6)>宏定义与函数的区别

最近需要使用openvino封装动态库&#xff0c;其中存在一个问题是openvino和windows.h之间的冲突&#xff0c;其主要是minwaindef.h中的宏定义引起的。所以好奇为什么使用宏定义处理函数过程。 //minwaindef.h中关于min、max的宏定义 #ifndef max #define max(a,b) …