DBO优化TCN的电力负荷预测,附MATLAB代码

news2025/1/13 7:28:35

今天为大家带来一期基于DBO-TCN的电力负荷预测。不得不说,TCN在时序数据中的预测效果在一定程度上要优于LSTM。

原理详解

文章对TCN网络的五个参数进行优化,分别是:

正则化参数,学习率,滤波器个数,滤波器大小,区块数。这五个参数属于TCN网络中比较重要的几个参数,参数的选择会影响最后的精度。

采用蜣螂优化TCN,参数设置范围分别是:

正则化参数[0.001 0.1]
学习率[ 0.0001 0.01]
滤波器个数[20 100]
滤波器大小[2 10]
区块数[2 10]

将DBO种群数设置为:30,迭代次数设置为30。


数据准备

对电力负荷数据进行处理

本次数据包含负荷值,温度,湿度,风速,压强,降水量,能见度,水汽压和体感温度,部分数据截图如下:

4cfaef431149d7b9e93e94aa5f6aa826.png

选取1200个样本作为训练集,每个样本组成为:当天24个小时的全部数据,因此训练集的输入数据大小为1200*216,其中216=24*9,24代表24个小时,9代表9个特征。训练集的输出数据大小为:1200*1。1代表未来一小时的负荷值。

选取300个样本作为测试集,同理,测试集的输入数据大小为300*216,训练集的输出数据大小为:300*1。

结果展示

采用TCN网络对电力负荷数据进行训练和预测

TCN的预测结果如下:

180041c1a32a7dcc47145fe97a7d3b7b.png

可以看到,未优化的TCN网络预测效果不是很理想,但是相比于上一期给出的LSTM的预测效果已经好很多了。

DBO-TCN模型的预测效果如下:

62b7a8938b310dff40fb8375d49bfa16.png

误差对比图如下:

f144617f9dac544fe6f9a71893dfc71b.png

可以看到DBO-TCN预测效果有了明显提升,DBO-TCN的MSE误差为13.821,相比于未优化TCN的23.238有了很大提升!

DBN-TCN的回归拟合图:

9730713bb84a5287f6ad8b8437e97cc2.png

误差直方图:

b300a227cd3dbbf956f514ab9d4193bc.png

6ed94692e8fcae2240490f549045f130.png

6a5db0d61220cd5de6396e61a266fd0a.png

部分代码

% 网络训练
net0 = trainNetwork(inputn,outputn,lgraph,options0 );
an0 = net0.predict(inputn_test);
test_simu0=mapminmax('reverse',an0,outputps); %把仿真得到的数据还原为原始的数量级
%误差指标
error0 = output_test - test_simu0;
mse0=mse(output_test,test_simu0)
%% 标准TCN神经网络作图
figure
plot(output_test,'b-','markerfacecolor',[0.5,0.5,0.9],'MarkerSize',6)
hold on
plot(test_simu0,'r--','MarkerSize',6)
title(['TCN的mse误差:',num2str(mse0)])
legend('真实y','预测的y')
xlabel('样本数')
ylabel('负荷值')
box off
set(gcf,'color','w')


%% 调用DBO优化TCN
disp('调用DBO优化TCN......')
% DBO优化参数设置
SearchAgents = 20; % 种群数量  30
Max_iterations = 30; % 迭代次数   30
lowerbound = [0.001 0.0001 20 2 2]; %五个参数的下限分别是正则化参数,学习率,滤波器个数:numFilters,滤波器大小:filterSize,区块数:numBlocks
upperbound = [0.1 0.01 100 10 10];    %五个参数的上限
dimension = length(lowerbound);%数量,即要优化的TCN参数个数
[fMin,Best_pos,Convergence_curve,bestnet]  = DBOforTCN(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,inputn,outputn,inputn_test,outputps,output_test,numFeatures,outputSize);


L2Regularization = Best_pos(1,1); % 最佳L2正则化系数
InitialLearnRate = Best_pos(1,2) ;% 最佳初始学习率
numFilters = fix(Best_pos(1,3)); 
filterSize = fix(Best_pos(1,4));
numBlocks = fix(Best_pos(1,5));
disp(['最优参数:',num2str(Best_pos)])
disp('优化结束,将最佳net导出并用于测试......')
setdemorandstream(pi);
%% 对测试集的测试
an = bestnet.predict(inputn_test); 
test_simu  = mapminmax('reverse',an,outputps);
error = test_simu-output_test;
msee = mse(output_test,test_simu);
figure
hold on 
plot(test_simu,'g')
plot(output_test,'b')
legend('DBO-TCN预测值','实际值')
ylabel('预测结果')
xlabel('预测样本')
title(['DBO-TCN的mse误差:',num2str(msee)])
box off
set(gcf,'color','w')


figure
plot(abs(error),'g-*')
hold on
plot(abs(error0),'-or')
title('预测误差对比图','fontsize',12)
xlabel('预测样本','fontsize',12)
ylabel('误差绝对值','fontsize',12)
legend('DBO-TCN','TCN')
%% 回归图与误差直方图
figure;
plotregression(test_simu,output_test,['优化后回归图']);
set(gcf,'color','w')


figure;
ploterrhist(test_simu-output_test,['误差直方图']);
set(gcf,'color','w')


%% 打印出评价指标
% 预测结果评价
ae= abs(test_simu-output_test);
rmse = (mean(ae.^2)).^0.5;
mse = mean(ae.^2);
mae = mean(ae);
mape = mean(ae./test_simu);
R = corr(output_test,test_simu);
R2 = 1 - norm(output_test -  test_simu)^2 / norm(output_test-mean(output_test ))^2;
disp('预测结果评价指标:')
disp(['RMSE = ', num2str(rmse)])
disp(['MSE  = ', num2str(mse)])
disp(['MAE  = ', num2str(mae)])
disp(['MAPE = ', num2str(mape)])
disp(['相关系数R = ', num2str(R)])
disp(['决定系数R^2为:  ',num2str(R2)])

代码获取

完整代码获取,后台回复关键词:

DBOTCN

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

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

相关文章

(二)k8s实战-深入Pod详解

一、配置文件详解 创建Pod nginx样例 apiVersion: v1 # api文档版本 kind: Pod # 资源对象类型,Pod, Deployment,StatefulSet metadata: # Pod相关的元数据,用于描述Pod的数据name: nginx-demo # Pod的名称labels: # 定义Pod的标签type: app # 自定义l…

SpringBoot 跨域问题和解决方法

Spring Boot 是一种用于构建独立的、生产级别的Java应用程序的框架。在开发Web应用程序时,经常会遇到跨域资源共享(CORS)问题。本文将详细介绍Spring Boot中的跨域问题以及相应的解决方法。 目录 什么是跨域?1. 使用Spring Boot…

MySQL中到全外连接(full outer join)编写方法说明

在SQL中,全外连接(full outer join)是一种无论是否匹配,都返回两张表中所有记录的连接: 不幸的是,MySQL不支持这种关联,我们必须以某种方式模拟它。但该如何操作呢? 在SQL中,同样的…

西瓜书第三章

广义线性模型 考虑单点可微函数 g ( ⋅ ) g(\cdot) g(⋅),令 y g − 1 ( ω T x b ) yg^{-1}(\omega^{T}xb) yg−1(ωTxb),这样得到的模型称为“广义线性模型”,其中函数 g ( ⋅ ) g(\cdot) g(⋅)称为“联系函数”。显然,对数线…

Maven聚合项目(微服务项目)创建流程,以及pom详解

1、首先创建springboot项目作为父项目 只留下pom.xml 文件&#xff0c;删除src目录及其他无用文件 2、创建子项目 子项目可以是maven项目&#xff0c;也可以是springboot项目 3、父子项目关联 4、父项目中依赖管理 <?xml version"1.0" encoding"UTF-8&qu…

iOS 分别对一张图的局部进行磨砂,拼接起来不能贴合

效果图 需求&#xff0c;由于视图层级的原因&#xff0c;需要对图片分开进行磨砂&#xff0c; 然后组合在一起 如图&#xff0c;上下两部分&#xff0c;上下两个UIImageVIew大小相同&#xff0c;都是和图片同样的大小&#xff0c;只是上面的UIimageVIew 只展示上半部份 &#…

基于java SpringBoot CRM客户关系管理系统设计

当今计算机技术和信息管理技术的迅速发展和广泛应用&#xff0c;为管理相关理论的应用提供了广阔的平台。IT技术和DBT技术&#xff08;数据库技术&#xff09;基于《客户信息管理系统》设计的客户信息管理系统正在逐步发展成为管理模式发展的新趋势&#xff0c;企业建立客户信息…

ModaHub魔搭社区:AI Agent在 知识图谱场景下的AgentBench基准测试

近日,来自清华大学、俄亥俄州立大学和加州大学伯克利分校的研究者设计了一个测试工具——AgentBench,用于评估LLM在多维度开放式生成环境中的推理能力和决策能力。研究者对25个LLM进行了全面评估,包括基于API的商业模型和开源模型。 他们发现,顶级商业LLM在复杂环境中表现出…

[保研/考研机试] KY207 二叉排序树 清华大学复试上机题 C++实现

题目链接&#xff1a; 二叉排序树_牛客题霸_牛客网二叉排序树&#xff0c;也称为二叉查找树。可以是一颗空树&#xff0c;也可以是一颗具有如下特性的非空二叉树&#xff1a; 1。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692721757794 描述&#x…

Ae 效果:CC Light Sweep

生成/CC Light Sweep Generate/CC Light Sweep CC Light Sweep&#xff08;CC 光线扫描&#xff09;可以创建一个动态的光线扫描&#xff0c;常用于模拟一束光在图像上移动的效果。支持 Alpha 通道并能基于 Alpha 通道边缘创造逼真的光照。 ◆ ◆ ◆ 效果属性说明 Center 中心…

实时云渲染的关键技术是什么

首先&#xff0c;我们需要了解实时云渲染的概念。实时云渲染是指将原本在本地电脑上进行的渲染工作转移到云端服务器上完成&#xff0c;并实时将处理结果返回给终端用户显示。这其实是一个合成词&#xff0c;由实时、云和渲染三个关键词组成。实时表示具有时效性和同步效果&…

访问学者申请中4个难点解析

在众多申请过程中&#xff0c;成为一名访问学者可能是一个具有挑战性的目标。这个过程可能涉及到许多复杂的步骤和问题。在本文中&#xff0c;知识人网小编将解析访问学者申请中的四个难点&#xff0c;以帮助申请人更好地应对这一挑战&#xff0c;增加成功的机会。 1.研究课题的…

【xxl-job快速入门搭建】

目录标题 xxl-job快速入门搭建源码地址项目结构初始化数据库启动项目1、启动服务端2、启动任务执行器端 MD文档指导教程功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内…

基于Echarts的中国地图数据展示

概述 基于echarts的大数据中国地图展示&#xff0c;结合API定制&#xff0c;开发样式&#xff0c;监听鼠标事件&#xff0c;实现带参数路由跳转等自定义事件。 详细 一、概述 实际项目中大概率会遇到很多需要进行数据展示的地方&#xff0c;如折现图&#xff0c;柱状图等&…

【Linux操作系统】Linux系统编程中信号捕捉的实现

在Linux系统编程中&#xff0c;信号是一种重要的机制&#xff0c;用于实现进程间通信和控制。当某个事件发生时&#xff0c;如用户按下CtrlC键&#xff0c;操作系统会向进程发送一个信号&#xff0c;进程可以捕获并相应地处理该信号。本篇博客将介绍信号的分类、捕获与处理方式…

matlab工具箱Filter Designer设计butterworth带通滤波器

1、在matlab控制界面输入fdatool; 2、在显示的界面中选择合适的参数&#xff1b;本实验中采样频率是200&#xff0c;低通30hz&#xff0c;高通60hz,点击butterworth滤波器。 3、点击设计滤波器按钮后&#xff0c;在生成的界面点击红框按钮&#xff0c;可生成simulink模型到当前…

python批量做网卡bond

python脚本获取服务器网卡的MAC地址和本机IP #!/usr/bin/pythonimport fcntl,socket,structdef getHwAddr(ifname):s socket.socket(socket.AF_INET, socket.SOCK_DGRAM)info fcntl.ioctl(s.fileno(), 0x8927, struct.pack(256s, ifname[:15]))return :.join([%02x % ord(ch…

gPRC代理方式详细介绍

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【官方中文文档】Mybatis-Spring #目录

目录 此页面用于在GitHub上呈现索引。 NOTE: 由于链接目标是在使用maven-site-plugin转换为html的假设下指定的&#xff0c;因此在GitHub上的呈现中有一个锚点已损坏。 简介入门SqlSessionFactoryBean事务使用 SqlSession注入映射器Spring Boot使用 MyBatis APISpring Batch示…