新算法!直接写: EVO-CNN-LSTM-Attention能量谷优化卷积、长短期记忆网络融合注意力机制的多变量回归预测程序

适用平台:Matlab2023版及以上

能量谷优化算法(Energy valley optimizer,EVO)是2023年提出的一种新颖的元启发式算法。EVO算法的灵感来自于宇宙中粒子的行为,特别是这些粒子的稳定性和衰变过程。大多数粒子不稳定,倾向于通过分解或衰变来释放能量,而少数粒子则能无限期地保持稳定。该算法提出时间很短,目前还没有套用这个算法的文献

粒子衰变原理为EVO算法提供了基础。通过模仿粒子达到稳定状态的趋势,提高了粒子参数的性能。算法在优化问题中搜索初始候选项的最优解,并通过逐步更新的过程,寻求稳定点,类似于物理世界中粒子寻求稳定的行为,创新性较高。

优化套用:

我们利用EVO对我们的CNN-LSTM-SelfAttention卷积神经网络(CNN)结合长短期记忆网络(LSTM)融合多头自注意力机制(Multihead Self-Attention)的回归预测程序代码中的超参数进行优化;构成EVO-CNN-Attention预测模型。

EVO算法考虑了三种衰变过程,即α衰变、β衰变和γ衰变,每种衰变类型对应于算法中不同的搜索和更新策略:

α衰变:涉及α粒子(密集且带正电)的发射,导致N(中子数)和Z(质子数)在N/Z比率中的减少。

β衰变:涉及β粒子(高速负电子)的弹射。这一过程通过减少N值和增加Z值来增加N/Z比率。

γ衰变:涉及γ射线(高能量光子)的发射。这种衰变类型不需要改变N/Z值。

EVO算法的创新点主要包括以下几个方面:

①引入了粒子衰变的概念:根据粒子衰变的物理原理,该算法模拟了粒子的衰变过程,并将衰变过程应用于解空间中的解候选者。通过衰变过程,可以根据粒子的稳定性水平来更新解向量,从而改进解候选者的性能。

②不同类型衰变模式的建模:算法中考虑了α衰变、γ衰变和β衰变三种衰变模式,并分别对它们进行了数学建模。通过生成随机数来确定发射粒子的数量和选择哪些粒子进行更新,从而模拟了粒子的衰变过程。

③基于稳定性水平的位置更新:根据粒子的稳定性水平,该算法采用了不同的位置更新方法。对于稳定性较低的粒子,采用控制性的移动方法使粒子向最佳稳定性水平的粒子靠近;对于稳定性较高的粒子,采用控制性的移动方法使粒子向邻近粒子靠近。这样可以在探索和开发之间找到一个平衡,提高算法的全局搜索能力。

④考虑了衰变过程中的约束:算法中考虑了粒子的中子富集水平和稳定性边界的约束条件。根据粒子的中子富集水平,可以确定粒子进行电子俘获或正电子发射的随机移动。这样可以更好地限制粒子的移动范围,避免超出预定义的上下边界。

综上,该算法通过模拟粒子的衰变过程和考虑约束条件,实现了对解空间中解候选者性能的改进。这些数学创新点使得算法能够在探索和开发之间寻找平衡,提高全局搜索能力,从而可以应用于解决复杂的优化问题。

EVO-CNN-LSTM-Multihead SelfAttention预测模型的创新性:

卷积神经网络 (CNN):CNN用于捕捉序列数据中的空间相关性。它通过卷积核在输入数据上滑动,从局部区域提取特征,这有助于检测输入序列中的局部模式和特征。在CNN层之后通常会添加池化层来减小数据的空间维度,以降低计算复杂性。

长短时记忆网络 (LSTM):长短期记忆网络是一种循环神经网络(RNN)的变体,专门用于处理序列数据的建模。LSTM通过门控机制(输入门、遗忘门和输出门)来控制对过去信息的遗忘和记忆,从而有效地处理长序列依赖关系。在时序预测中,LSTM可以用于学习序列数据中的长期依赖关系,捕捉到序列中的时间演化模式。

自注意力层 (Self-Attention):Self-Attention自注意力机制是一种用于模型关注输入序列中不同位置相关性的机制。它通过计算每个位置与其他位置之间的注意力权重,进而对输入序列进行加权求和。自注意力能够帮助模型在处理序列数据时,对不同位置的信息进行适当的加权,从而更好地捕捉序列中的关键信息。在时序预测任务中,自注意力机制可以用于对序列中不同时间步之间的相关性进行建模。

EVO超参数优化:能量谷优化算法对模型中的难以确定的学习率、卷积核大小、神经元个数等参数进行寻优,使得模型的结构更加合理,提高了预测精度,对模型结构和训练参数进行优化,免除了人工选取参数环节,避免 了人为造成的不确定性因素,强化了模型的自适应 选择参数能力。

结合这四种层的结构,模型首先通过CNN层来捕捉输入序列的空间特征,然后通过LSTM层来捕捉时间相关性,最后通过Self-Attention层来更好地理解序列内部的关联。这种综合结构可以更全面地处理具有时空相关性的序列数据,引入EVO优化算法,对CNN-LSTM-Attention模型参数进行寻优,使得模型的结构更加合理,提高了预测精度,构成TSOA-CNN-LSTM-Attention复合预测模型。适用于,风速预测,光伏功率预测,发电功率预测,海上风电预测,碳价预测等等。它的创新点在于综合了不同类型的神经网络层,使其适用于广泛的应用,从而提高了对序列数据的建模和分析能力。

功能:

①多变量特征输入,单序列变量输出,输入前一天的特征,实现后一天的预测,超前24步预测。

②通过EVO优化算法优化学习率、卷积核大小、神经元个数,这3个关键参数,以最小MAPE为目标函数。

③提供损失、RMSE迭代变化极坐标图;测试对比图;适应度曲线(若首轮精度最高,则适应度曲线为水平直线)。

④提供MAPE、RMSE、MAE等计算结果展示。

适用领域:

风速预测、光伏功率预测、发电功率预测、碳价预测等多种应用。

数据集格式:

前一天18个气象特征,采样时间为24小时,输出为第二天的24小时的功率出力,也就是18×24输入,1×24输出,一共有75个这样的样本。

​预测值与实际值对比结果:

训练误差曲线的极坐标形式(误差由内到外越来越接近0):

适应度曲线:

EVO部分核心代码:

完整代码:https://mbd.pub/o/bread/mbd-ZZiYm5lx
%% 能量谷优化算法EVO信息
CostFunction = @(x) objectiveFunction1(x);            %% @目标函数
VarNumber = 3;                                        %% 变量个数
VarMin = [0.001, 1, 100];                             %% 变量下界(学习率,卷积核大小,神经元个数)
VarMax = [0.01, 5, 120];                              %% 变量上界(学习率,卷积核大小,神经元个数)%% 通用参数
MaxFes = 15 ;                                       %% 最大函数评估次数
nParticles = 5 ;                                    %% 初始候选解个数%% 计数器
Iter=0;                                             %% 迭代次数
FEs=0;                                              %% 函数评估次数%% 初始化
Particles=[]; NELs=[];tsmvalue={};
for i=1:nParticlesParticles(i,:)=unifrnd(VarMin,VarMax,[1 VarNumber]);[NELs(i,1),tsmvalue{i,1},Net{i,1},Info{i,1}]=CostFunction(Particles(i,:));FEs=FEs+1;
end% 对粒子进行排序for a = 1:size(NELs,1)cellNEL{a,1} = NELs(a,:);endMixdata=[cellNEL,tsmvalue,Net,Info];
sortedData = sortrows(Mixdata, 1);[NELs, SortOrder]=sort(NELs);
Particles=Particles(SortOrder,:);
BS=Particles(1,:);  
BS_NEL=NELs(1);           %% 最优的误差结果
WS_NEL=NELs(end);         %% 最差的误差结果
BS_PD=sortedData(1,2);    %% 最小误差对应的预测结果
BS_NT=sortedData(1,3);    %% 最小误差对应的网络
BS_IF=cell2mat(sortedData(1,4)); %% 最小误差对应的训练曲线valubest=sortedData(:,2); 
netbest=sortedData(:,3);  
infobest=sortedData(:,4); 
%% 主循环
while FEs<MaxFesIter=Iter+1;NewParticles=[];NewNELs=[];Tsmvalues={};NewNets={};NewInfos={};for i=1:nParticlesDist=[];for j=1:nParticlesDist(j,1)=distance(Particles(i,:), Particles(j,:));end[ ~, a]=sort(Dist);CnPtIndex=randi(nParticles);if CnPtIndex<3CnPtIndex=CnPtIndex+2;endCnPtA=Particles(a(2:CnPtIndex),:);CnPtB=NELs(a(2:CnPtIndex),:);X_NG=mean(CnPtA);X_CP=mean(Particles);EB=mean(NELs);            SL=(NELs(i)-BS_NEL)/(WS_NEL-BS_NEL); SB=rand;if NELs(i)>EB   if SB>SL         AlphaIndex1=randi(VarNumber);AlphaIndex2=randi([1 VarNumber], AlphaIndex1 , 1);NewParticle(1,:)=Particles(i,:);NewParticle(1,AlphaIndex2)=BS(AlphaIndex2);               GamaIndex1=randi(VarNumber);GamaIndex2=randi([1 VarNumber], GamaIndex1 , 1);NewParticle(2,:)=Particles(i,:);NewParticle(2,GamaIndex2)=X_NG(GamaIndex2);           NewParticle = max(NewParticle,VarMin);NewParticle = min(NewParticle,VarMax);  [NewNEL(1,1),Tsmvalue{1,1},NewNet{1,1},NewInfo{1,1}]=CostFunction(NewParticle(1,:));[NewNEL(2,1),Tsmvalue{2,1},NewNet{2,1},NewInfo{2,1}]=CostFunction(NewParticle(2,:));FEs=FEs+2;    else               

部分图片来源于网络,侵权联系删除!

欢迎感兴趣的小伙伴关注下方公众号代码前的链接获得完整版代码,小编会继续推送更有质量的学习资料、文章和程序代码!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2 组件传递数据

向子组件传递数据通过Props 1.创建子组件 详细步骤&#xff1a; 1.在components创建子组件 2.等父组件接受到参数后通过Props来接受父组件传递过来的数据 <template><div id"app"><h2>title:{{ title }}</h2><p>tips:{{ tips }}<…

IDEA 设置 SpringBoot logback 彩色日志(附配置文件)

1、背景说明 最开始使用 SpringBoot 时&#xff0c;控制台日志是带彩色的&#xff0c;让人眼前一亮&#x1f604; 后来彩色莫名丢失&#xff0c;由于影响不大&#xff0c;一直没有处理。 2、配置彩色 最近找到了解决方法&#xff08;其实是因为自定义 logback.xml&#xff0…

java并发编程五 ReentrantLock,锁的活跃性

多把锁 一间大屋子有两个功能&#xff1a;睡觉、学习&#xff0c;互不相干。 现在小南要学习&#xff0c;小女要睡觉&#xff0c;但如果只用一间屋子&#xff08;一个对象锁&#xff09;的话&#xff0c;那么并发度很低 解决方法是准备多个房间&#xff08;多个对象锁&#xf…

GNSS技术的巧妙运用:灾害应对中的定位与救援

随着全球气候变化的加剧&#xff0c;自然灾害的频发成为当今社会面临的重大挑战之一。在灾害发生后&#xff0c;及时、准确的救援至关重要。全球导航卫星系统&#xff08;GNSS&#xff09;技术通过其卓越的定位功能&#xff0c;为灾害应对提供了独特的支持。本文将深入研究GNSS…

使用MybatisPlus置空某些指定字段

当前的MybatisPlus默认会对空实体内的字段不置空&#xff0c;所以才引出了此种方法&#xff0c;很方便简单&#xff1a; 使用 Wrappers.lambdaUpdate方法就可以解决&#xff0c;方法的源码如下&#xff1a;条件为entity内的值&#xff0c;使用lambdaUpdate去set空的值 举个例子…

11.2 设备树下的 LED 驱动

一、修改设备树文件 首先进入该目录下 /linux/atk-mpl/linux/my_linux/linux-5.4.31/arch/arm/boot/dts 打开 stm32mp157d-atk.dts 文件&#xff0c;在根节点 "/" 最后输入以下内容&#xff1a; stm32mp1_led {compatible "atkstm32mp1-led"; // 设置…

Java操作Word修订功能:启用、接受、拒绝、获取修订

Word的修订功能是一种在文档中进行编辑和审阅的功能。它允许多个用户对同一文档进行修改并跟踪这些修改&#xff0c;以便进行审查和接受或拒绝修改。修订功能通常用于团队合作、专业编辑和文件审查等场景。 本文将从以下几个方面介绍如何使用免费工具Free Spire.Doc for Java在…

机器视觉系统选型-高图像精度

图像精度 X方向系统精度&#xff08;X方向象素值&#xff09;&#xff1d; 视野范围&#xff08;X方向&#xff09; CCD芯片象素数量&#xff08;X方向&#xff09; Y方向系统精度&#xff08;Y方向象素值&#xff09;&#xff1d; 视野范围&#xff08;Y方向 CCD芯片象素数量&…

【lesson17】minishell(shell的模拟实现)

文章目录 模拟实现shell的思路具体实现一直循环&#xff08;一&#xff09;显示提示行符&#xff08;二&#xff09;获取用户输入的字符串&#xff08;三&#xff09;对字符串进行解析&#xff08;四&#xff09;创建子进程执行指令&#xff08;5&#xff09; 细节问题解决问题…

Redis第2讲——Java三种客户端(Jedis、Lettuce和Redisson)

上篇文章介绍了Redis的9种数据类型和常命令、7种数据结构和9种编码方式。但是如果想要把它应用到项目中&#xff0c;我们还需要一个redis的客户端。redis的Java客户端种类还是很多的&#xff0c;其中使用最广泛的有三种——Jedis、lettuce和redisson&#xff0c;下面我们一起来…

web前端游戏项目-雷霆战机飞机大战游戏【附源码】

文章目录 一&#xff1a;雷霆战机HTML源码&#xff1a;JS文件&#xff1a;&#xff08;1&#xff09;function.js&#xff08;2&#xff09;impact.js&#xff08;3&#xff09;move.1.1.js&#xff08;4&#xff09;script.js 二&#xff1a;飞机大战HTML源码&#xff1a;CSS源…

性能压力测试--确保企业数字化业务稳健运行

随着企业的数字化转型和依赖云计算的普及&#xff0c;软件系统的性能已经成为企业成功运营的关键因素之一。性能压力测试作为确保系统在各种条件下都能高效运行的关键步骤&#xff0c;对企业的重要性不可忽视。以下是性能压力测试对企业的几个重要方面的影响和作用&#xff1a;…

最新AI创作系统ChatGPT系统源码+DALL-E3文生图+AI绘画+GPT语音对话功能

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

ubuntu 20.04安装一系列软件

1&#xff09;安装下载的包的指令&#xff1a; sudo dpkg -i xxx.deb 2&#xff09;通用指令&#xff1a; sudo apt-get install xxxx 3&#xff09;更新和升级软件包&#xff08;遇到问题先尝试这个指令&#xff09;&#xff1a; sudo apt-get update sudo apt-get install…

Java_集合进阶(Collection和List系列)

一、集合概述和分类 1.1 集合的分类 已经学习过了ArrayList集合&#xff0c;但是除了ArrayList集合&#xff0c;Java还提供了很多种其他的集合&#xff0c;如下图所示&#xff1a; 我想你的第一感觉是这些集合好多呀&#xff01;但是&#xff0c;我们学习时会对这些集合进行…

基于alibaba druid的血缘解析工具

基于alibaba druid的血缘解析 1、前言 仅仅对mysql数据库的select查询语句进行了血缘解析&#xff0c;该血缘解析包含了原始表字段、临时表字段和目标表字段的关联关系。 2、涉及到技术 主要使用了druid的如下接口对语法树进行解析&#xff1a; &#xff08;1&#xff09;…

JavaWeb笔记之前端开发CSS

一 、引言 1.1 CSS概念 层叠样式表(英文全称&#xff1a;Cascading Style Sheets)是一种用来表现HTML&#xff08;标准通用标记语言的一个应用&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。CSS不仅可以静态地修饰网页&…

美颜技术详解:深入了解视频美颜SDK的工作机制

本文将深入探讨视频美颜SDK的工作机制&#xff0c;揭示其背后的科技奥秘和算法原理。 1.引言 视频美颜SDK作为一种集成到应用程序中的技术工具&#xff0c;通过先进的算法和图像处理技术&#xff0c;为用户提供令人印象深刻的实时美颜效果。 2.视频美颜SDK的基本工作原理 首…

SVN小白常见操作流程

SVN小白常见操作流程 一、什么是Subversion&#xff1f;二、TortoiseSVN客户端安装教程三、SVN 操作3.1 SVN Ckeckout(检出)3.2 Add(新增文件)3.3 SVN Commit(提交)3.4 SVN Update(更新操作)3.5SVN Delete(删除操作)3.6 SVN Revert to a revision(版本回溯)3.7 不同版本内容之间…

Jenkins 执行远程脚本的插件—SSH2 Easy

SSH2 Easy 是什么&#xff1f; SSH2 Easy 是一个 Jenkins 插件&#xff0c;它用于在 Jenkins 构建过程中通过 SSH2 协议与远程服务器进行交互。通过该插件&#xff0c;用户可以在 Jenkins 的构建过程中执行远程命令、上传或下载文件、管理远程服务器等操作。 以下是 SSH2 Eas…