基于人工神经网络的空压机负荷预测(Matlab代码实现)

简介: 基于人工神经网络的空压机负荷预测(Matlab代码实现)

💥1 概述

本研究的目的是预测压缩空气系统的电气负载曲线,这对于行业从业者和软件提供商开发更好的负载管理和前瞻调度程序的实践和工具很有价值。使用两层前馈神经网络和长短期记忆两个人工神经网络来预测空压机的电气负荷。

📚2 运行结果

2.1 算例1

2.2 算例2

2.3 算例3

部分代码:

close all
clear all
% load data
load('data/ac1Data.mat')
% assign data to variables
Load = ac1.load;
Weekday = weekday(ac1.DATE);
Minute = minute(ac1.Time);
Hour = hour(ac1.Time);
Pressure = ac1.LinePressure_bar_;
Temp1 = ac1.InletAirTempC;
Temp2 = ac1.DischargeTemperature_degC_;
% form input 
exoData = [Weekday,Minute,...
    Hour,Pressure,Temp1,Temp2];
% define working day index
workingDayIdx = and(Weekday >1, Weekday < 7); 
% define non-working day index
nonworkingDayIdx = or(Weekday ==1,Weekday == 7); 
% data pre-process/apply hampel filter 
workingExoData = exoData(workingDayIdx,:);
workingLoad= hampel(Load(workingDayIdx),5,2);
nonworkingExoData = exoData(nonworkingDayIdx,:);
nonworkingLoad = hampel(Load(nonworkingDayIdx),5,2);
% define working day test set
inputTestSeries1 = num2cell(workingExoData(end-200:end,:)',1);
targetTestSeries1 = num2cell(workingLoad(end-200:end)');
% define non-working day test set
inputTestSeries2 = num2cell(nonworkingExoData(end-200:end,:)',1);
targetTestSeries2 = num2cell(nonworkingLoad(end-200:end)');
% load pre-trained networks
load('data/ac1_w_ffnn.mat') % for working days
load('data/ac1_nw_ffnn.mat') % for non-working days
netsw = removedelay(netw);
netsn = removedelay(netn);
% forecast values using pre-trained networks
[xsw,xisw,aisw,tsw] = preparets(netsw,inputTestSeries1,{},targetTestSeries1);
ys_w = netsw(xsw,xisw,aisw);
[xsn,xisn,aisn,tsn] = preparets(netsn,inputTestSeries2,{},targetTestSeries2);
ys_n = netsn(xsn,xisn,aisn);
% timeshfit forecasts back to the original positive -- see 'removedelay' documentation
yhat_w = cell2mat(ys_w(end-96:end-1));
y_w = workingLoad(end-(length(yhat_w)-1):end)';
yhat_n = cell2mat(ys_n(end-96:end-1));
y_n = nonworkingLoad(end-(length(yhat_n)-1):end)';
% calculate evaluation metrics
workingDayRMSE = sqrt(mean((y_w - yhat_w).^2));  % calculate root mean squared error for working day forcast
nonworkingDayRMSE = sqrt(mean((y_n - yhat_n).^2));  % calculate root mean squared error for non-working day forcast
RMSE = [workingDayRMSE;nonworkingDayRMSE];
workingDayMASE = mean(abs(y_w-yhat_w))/(mean(abs(y_w(2:end)-y_w(1:end-1)))); % calculate mean absolute scaled error for working day forecast
nonworkingDayMASE = mean(abs(y_n-yhat_n))/(mean(abs(y_n(2:end)-y_n(1:end-1)))); % calculate mean absolute scaled error for non-working day forecast
MASE = [workingDayMASE;nonworkingDayMASE];
mdl_w = fitlm(y_w,yhat_w);
workingDayR2 = mdl_w.Rsquared.Ordinary; % get R2 between observed and predicited for working day forecast
mdl_n = fitlm(y_n,yhat_n);
nonWorkingDayR2 = mdl_n.Rsquared.Ordinary ;% get R2 between observed and predicited for non-working day forecast
R2 = [workingDayR2;nonWorkingDayR2];
T =  table (RMSE,MASE,R2,'RowNames',{'Working Days';'Non-working Days'}); % construct output table
T.Properties.DimensionNames{1} = 'Mode';
figure
subplot(2,2,1)
plot(y_w)
hold on
plot(yhat_w,'.-')
hold off
legend(["Measured" "Predicted"])
xlabel("Timestep (15-minutes)") 
ylabel("Electrical Load (kW)")
title(["Forecast using FFNN";"Compressor 1 - Working Day"])
subplot(2,2,3)
stem(yhat_w - y_w)
xlabel("Timestep (15-minutes)")
ylabel("Error (kW)")
title("RMSE = " + workingDayRMSE)
subplot(2,2,2)
plot(y_n)
hold on
plot(yhat_n,'.-')
hold off
legend(["Measured" "Predicted"])
xlabel("Timestep (15-minutes)") 
ylabel("Electrical Load (kW)")
title(["Forecast using FFNN";"Compressor 1 - Non-Working Day"])
subplot(2,2,4)
stem(yhat_n - y_n)
xlabel("Timestep (15-minutes)")
ylabel("Error (kW)")
title("RMSE = " + nonworkingDayRMSE)
writetable(T,'results/ac1_ffnn_metrics.csv','WriteRowNames',true)
saveas(gcf, 'results/ac1_ffnn_result.png')


🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。


[1]Da-Chun Wu, Babak Bahrami Asl, Ali Razban, Jie Chen (2020) Air Compressor Load Forecasting using Artificial Neural Network


相关文章
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
|
3月前
|
机器学习/深度学习 存储 算法
回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现
本文详细介绍了回声状态网络(Echo State Networks, ESN)的基本概念、优点、缺点、储层计算范式,并提供了ESN的Python代码实现,包括不考虑和考虑超参数的两种ESN实现方式,以及使用ESN进行时间序列预测的示例。
160 4
回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现
|
2月前
|
缓存 算法 物联网
基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量
本系统基于MATLAB 2017b,对AODV与LEACH自组网进行了升级仿真,新增运动节点路由测试,修正丢包率统计。AODV是一种按需路由协议,结合DSDV和DSR,支持动态路由。程序包含参数设置、消息收发等功能模块,通过GUI界面配置节点数量、仿真时间和路由协议等参数,并计算网络性能指标。 该代码实现了节点能量管理、簇头选举、路由发现等功能,并统计了网络性能指标。
164 73
|
1月前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
69 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
2月前
|
安全 C#
某网络硬盘网站被植入传播Trojan.DL.Inject.xz等的代码
某网络硬盘网站被植入传播Trojan.DL.Inject.xz等的代码
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
199 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
安全 网络安全 开发者
探索Python中的装饰器:简化代码,增强功能网络安全与信息安全:从漏洞到防护
【8月更文挑战第30天】本文通过深入浅出的方式介绍了Python中装饰器的概念、用法和高级应用。我们将从基础的装饰器定义开始,逐步深入到如何利用装饰器来改进代码结构,最后探讨其在Web框架中的应用。适合有一定Python基础的开发者阅读,旨在帮助读者更好地理解并运用装饰器来优化他们的代码。
完成切换网络+修改网络连接图标提示的代码框架
完成切换网络+修改网络连接图标提示的代码框架
|
3月前
|
达摩院 供应链 JavaScript
网络流问题--仓储物流调度【数学规划的应用(含代码)】阿里达摩院MindOpt
本文通过使用MindOpt工具优化仓储物流调度问题,旨在提高物流效率并降低成本。首先,通过考虑供需匹配、运输时间与距离、车辆容量、仓库储存能力等因素构建案例场景。接着,利用数学规划方法,包括线性规划和网络流问题,来建立模型。在网络流问题中,通过定义节点(资源)和边(资源间的关系),确保流量守恒和容量限制条件下找到最优解。文中还详细介绍了MindOpt Studio云建模平台和MindOpt APL建模语言的应用,并通过实例展示了如何声明集合、参数、变量、目标函数及约束条件,并最终解析了求解结果。通过这些步骤,实现了在满足各仓库需求的同时最小化运输成本的目标。
|
3月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
56 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码

热门文章

最新文章