【负荷预测】基于神经网络的负荷预测和价格预测(Matlab代码实现)

2023-11-18

目录

1 概述

2 基于神经网络的负荷预测(Matlab实现)

2.1 代码

2.2 结果 

2.3 回归树模型的进一步改进 

3 基于神经网络的价格预测(Matlab代码实现) 

4 阅读全文(Matlab代码)


1 概述

这个例子演示了用MATLAB建立一个短期电力负荷(或价格)预测系统。两个非线性回归模型(神经网络和袋式回归树)被校准,以预测给定温度预测、假日信息和历史负荷的每小时前日负荷。这些模型在数据上进行训练,并在2008年的样本外数据上进行测试。这些模型被证明能够产生高度准确的日前预测,平均误差在1-2%左右。能够通过MATLAB部署的DLL调用训练好的负荷预测模型。

准确的负荷预测对于公用事业的短期运营和长期规划至关重要。负荷预测会影响许多决策,包括在给定时期内承诺哪些发电机,并广泛影响批发电力市场价格。负荷和价格预测算法通常在简化形式的电价混合模型中也很突出,这是用于模拟市场和模拟能源衍生品的一些最准确的模型。市场参与者在许多交易和风险管理应用程序中也广泛使用电价预测。负荷预测会影响许多决策,包括在给定时期内承诺哪些发电机,并广泛影响批发电力市场价格。负荷预测算法通常在电价混合模型中也很突出,这是电力市场建模最准确的一类方法。市场参与者在许多交易和风险管理应用程序中广泛使用电价预测。传统上,公用事业和营销人员使用商业软件包来执行负荷预测。这些方法的主要缺点是它们是一个黑匣子,不提供如何计算负载预测的透明度。它们通常也只提供实用程序所需功能的 80-90%。在许多情况下,不可能通过现成的产品满足所有要求,例如考虑到区域负载、不同的天气模式等。


2 基于神经网络的负荷预测(Matlab实现)

2.1 部分代码

%% 利用神经网络进行电力负荷预测
% 这个例子展示了用MATLAB建立和验证一个短期的
% 本例演示了用MATLAB建立和验证短期电力负荷预测模型。这些模型考虑到了
% 考虑到多种信息来源,包括温度和
% 假期等多种信息,以构建一个日前负荷预测器。这个脚本使用
% 神经网络。

%% 导入天气和负荷数据
% 所使用的数据集是一个地区2004 - 2008年的历史小时负荷和温度观测表。
% 天气信息包括干球温度和露点。
load Data\DBLoadData.mat
addpath ..\Util

%% 从Excel电子表格中导入假期列表

[num, text] = xlsread('..\Data\Holidays.xls'); 
holidays = text(2:end,1);


%% 生成预测矩阵
% 函数*genPredictors*生成了作为模型输入的预测变量。
% 的输入。对于短期预测,这些变量包括
% * 干球温度
% * 露点
% *一天中的小时
% * 一周中的一天
% *表明是否为假日/周末的标志
% * 前一天的平均负荷
% * 前一天同一小时的负荷
% * 前一周同一小时和同一天的负荷
% 如果目标是中期或长期的负荷预测,只需输入
% 如果目标是中期或长期的负荷预测,只有一天中的小时,一周中的一天,一年中的时间和节假日可以被使用
% 确定性地使用。天气/负荷信息将需要被指定为
% 指定为一个平均数或一个分布
%% 选择预测范围
term = 'short';

[X, dates, labels] = genPredictors(data, term, holidays);

%% 讲数据集分为训练和测试集
% 该数据集被分为两组,一个是包括2004年至2007年数据的_训练_组,
% 另一个是包括2008年数据的_测试_组。
% 训练集包括2004至2007年的数据,测试集包括2008年的数据。
% 训练集用于建立模型(估计其参数)。测试集仅用于预测,以测试模型在样本外数据上的表现。
%++++++ 建立训练集++++++++++
trainInd = data.NumDate < datenum('2008-01-01');
trainX = X(trainInd,:);
trainY = data.SYSLoad(trainInd);

%++++++创建测试集并保存以备不时之需++++++
testInd = data.NumDate >= datenum('2008-01-01');
testX = X(testInd,:);
testY = data.SYSLoad(testInd);
testDates = dates(testInd);

save Data\testSet testDates testX testY
clear X data trainInd testInd term holidays dates ans num text

%% 构建负荷预测模型
% 接下来的几个单元建立了一个神经网络回归模型,
% 用于给定训练数据的日前负荷预测。
% 然后,该模型被用于测试数据以验证其准确性。
%% 初始化和训练网络
% 初始化一个包含 20 个神经元的两层默认网络。使用“平均
% 绝对误差”(MAE)性能指标。然后,用
% 默认的 Levenburg-Marquardt 算法。为了提高效率,预先训练
% 除非特别强制执行重新训练,否则网络会被加载。
reTrain = false;
if reTrain || ~exist('Models\NNModel.mat', 'file')
    net = newfit(trainX', trainY', 20);
    net.performFcn = 'mae';
    net = train(net, trainX', trainY');
    save Models\NNModel.mat net
else
    load Models\NNModel.mat
end
    
%% 采用神经网络模型进行预测
% 一旦建立了模型,对独立的测试集进行预测. 

load Data\testSet
forecastLoad = sim(net, testX')';

%% 比较预测负荷和实际负荷
% 创建一个图表来比较实际负荷和预测负荷以及
% 并计算出预测误差。除了可视化之外,还可以使用平均绝对值等指标来量化
% 预测器的性能,如平均绝对误差(MAE)、平均绝对百分比误差(MAPE)和每日峰值误差(MAPE)等指标。
% 误差(MAE),平均绝对误差(MAPE)和每日峰值预测
% 误差。
err = testY-forecastLoad;
fitPlot(testDates, [testY forecastLoad], err);

errpct = abs(err)./testY*100;

fL = reshape(forecastLoad, 24, length(forecastLoad)/24)';
tY = reshape(testY, 24, length(testY)/24)';
peakerrpct = abs(max(tY,[],2) - max(fL,[],2))./max(tY,[],2) * 100;

MAE = mean(abs(err));
MAPE = mean(errpct(~isinf(errpct)));

fprintf('平均绝对百分比误差 (MAPE): %0.2f%% \n平均绝对误差 (MAE): %0.2f MWh\n每日峰值 MAPE: %0.2f%%\n',...
    MAPE, MAE, mean(peakerrpct))


%% 检查误差的分布情况
% 除了报告标量误差指标(如MAE和MAPE)外,误差分布图和绝对误差也有助于建立
% 误差和绝对误差的分布图可以帮助建立
% 围绕预测者的表现建立直觉
%% 可视化图像
figure;
subplot(3,1,1); hist(err,100); title('误差分布');
subplot(3,1,2); hist(abs(err),100); title('绝对误差分布');
line([MAE MAE], ylim); legend('误差', 'MAE');
subplot(3,1,3); hist(errpct,100); title('绝对百分比误差分布');
line([MAPE MAPE], ylim); legend('误差', 'MAPE');

%% 误差的集体分析
% 为了进一步了解预报器的性能,我们可以
% 为了进一步了解预报员的表现,我们可以按一天中的每一小时、
% 一周中的每一天和一年中的每一个月来直观地显示预报误差百分比。
% 年的月份
[yr, mo, da, hr] = datevec(testDates);

%% 按小时计算
clf;
boxplot(errpct, hr+1);
xlabel('小时'); ylabel('误差百分比的统计');
title('按小时划分的预测误差统计数据');

% 按工作日
figure
boxplot(errpct, weekday(floor(testDates)), 'labels', {'Sun','Mon','Tue','Wed','Thu','Fri','Sat'});
ylabel('误差百分比统计');
title('按工作日划分的预测误差统计明细表');

% 按月份
figure
boxplot(errpct, datestr(testDates,'mmm'));
ylabel('误差百分比统计');
title('按月份划分的预测误差统计细目表');


%% 制作每周图表
%在测试集上每周建立预测负荷与实际负荷的对比。
generateCharts = true;
if generateCharts
    step = 168*2;
    for i = 0:step:length(testDates)-step
        clf;
        fitPlot(testDates(i+1:i+step), [testY(i+1:i+step) forecastLoad(i+1:i+step)], err(i+1:i+step));
        title(sprintf('MAPE: %0.2f%%', mean(errpct(i+1:i+step))));
        snapnow
        
    end
end

2.2 结果 

  

 

 

2.3 回归树模型的进一步改进 

 

3 基于神经网络的价格预测(Matlab代码实现) 

 

 

 

4 完整Matlab代码实现

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【负荷预测】基于神经网络的负荷预测和价格预测(Matlab代码实现) 的相关文章

  • 通过 h5py 将 matlab v7.3 文件读入 python numpy 数组列表

    我知道以前已经有人问过这个问题 但在我看来 仍然没有答案可以解释正在发生的事情 并且不适用于我的情况 我有一个 matlab v7 3 文件 其结构如下 gt rank lt 1x454 cell gt gt each element is
  • 继续在 Matlab 中一遍又一遍地播放声音?

    我正在尝试创建一个 MATLAB 程序来每隔几分钟一遍又一遍地播放声音 现在我将其设置为每隔几秒播放一次 只是为了消除系统中的一些错误 但是 当我的程序尝试重播声音时 我收到此错误 Error using gt audioplayer au
  • 如何将条形图的 XtickLabels 向左移动?

    我目前正在尝试创建频率直方图 为此 我必须创建一个条形图 条形图之间没有空格 然而 这集中于XTickLabels在酒吧的中间 由于它是一个直方图 我希望数值位于每个条形之间的线上 以便它可以直观地指示间隔 本质上 我需要将所有刻度标签移至
  • 使用 GPU 进行 Matlab 卷积

    我用gpuArray尝试了matlab的卷积函数conv2 convn 例如 convn gpuArray rand 100 100 10 single gpuArray rand 5 single 并将其与 cpu 版本 convn ra
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • MATLAB 中时间戳过滤器的优化 - 处理非常大的数据集

    我正在 MATLAB 中编写一个程序 必须使用 MATLAB 并且不能真正使用 MEX 来过滤大量数据 我需要实现的过滤器之一要求我将时间戳向量与其他时间戳不会出现的已知 不良 时间列表进行比较 一个典型的时间戳向量有大约 2 000 00
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • 什么是 ANN 中的纪元以及它如何转换为 MATLAB 中的代码?

    我试图理解 并可视化 训练人工神经网络的时代到底是什么 我们有一个包含约 7000 个产品的训练集 其中有 10 个特征 输入 这些产品必须根据这 10 个输入分为 7 个类别 我们的 ANN 有 10 个输入 这些输入进入由 10 个神经
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列

随机推荐

  • 2021-03-30

    远程调试 使用特定JVM参数运行服务端代码 要让远程服务器运行的代码支持远程调试 则启动的时候必须加上特定的JVM参数 这些参数是 Xdebug Xrunjdwp transport dt socket suspend n server y
  • 全屏Activity弹出键盘不顶起布局

    最近遇到的一个问题是全屏Activity中要求弹出键盘不顶起布局 首先windowSoftInputMode的取值是有多个的 在全屏场景下adjustPan是没有用的 需要使用adjustResize首先确保键盘不顶起布局 android
  • 黑苹果 MacOS 10.15 Catalina 安装详细教程带工具资料

    图文教程悦享地址 点击打开链接 视频教程 B站地址 点击打开链接 一 准备工作 一个8G以上的U盘 有的U盘标的是8G 实际只有X 实际容量小于7 5G的会失败 MacOS镜像 TransMac 刻录工具 DiskGenius 分区工具 E
  • 机器学习DGA域名检测

    恶意域名 恶意域名是指黑客在攻击过程中或者对目标网络实施控制时 使用dga算法生成的域名 这种域名通常硬编码在恶意软件中 我们在做流量分析时不仅要通过流量的指纹特征识别威胁 也可以通过检测是否解析了恶意域名来判断网络中是否存在肉鸡 传统DG
  • IDEA编译报错:java: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出

    IDEA编译Flink源码时报错 java 未报告的异常错误X 必须对其进行捕获或声明以便抛出 原因是环境变量配置的是JDK8 Flink部分代码是基于JDK11编写的 将JDK升级为JDK11 重新编译即成功
  • 推荐一款基于XNA的开源游戏引擎《Engine Nine》

    一 前沿导读 XNA是微软基于 Net部署的下一代3D 2D游戏开发框架 其实XNA严格来说类似下一代的DirectX 当然不是说XNA会取代DirectX 但是基于XNA我们对于面向XBOX360 WP等系列其他平台的移植成本非常的低 据
  • 从系统里面查看服务器端口,从系统里面查看服务器端口号

    从系统里面查看服务器端口号 内容精选 换一换 已成功登录Java性能分析 待安装分析辅助软件的服务器已开启sshd 已安装JDK并配置环境变量 打开 添加目标环境 窗口 如图1所示 参数说明如表1所示 添加目标环境添加目标环境参数说明参数说
  • shell脚本简介+编写

    1 常用Linux命令 2 Linux下脚本编写 3 windows下CMD常用命令 文章目录 一 变量 1 系统预定义变量 2 自定义变量 3 特殊变量 n n n
  • C++ 标准库函数 bind

    背景 可调用对象 对于一个对象或者一个表达式 如果可以对其使用调用运算符 则称为可调用对象 调用形式 一种调用形式对应了一个函数类型 指明了调用返回类型以及传递的参数类型 比如 int int int std bind 概念 可将 bind
  • 勇于尝试新鲜事物,利于项目来积累学习经验

    很多人都会根据企业的发展需求 再选择自己的开发方向 其实没必要完全根据企业的发展路线来决定的个人的职业路线 正如 黑客与画家 和 黑客帝国 所表达的 程序员应该将白天的工作作为一种职业相关性的经验积累 而将晚上的时间用于尝试新的技术和领域
  • matlab 学习算法,matlab深度学习算法合集

    实例简介 CAE CNN NN SAE等等matlab版深度学习算法合集 以及相关测试数据 拿到就能直接用 实例截图 核心代码 DeepLearnToolbox matlab DeepLearnToolbox CAE caeapplygra
  • java中空值怎么表示_JAVA中空值null与字符串null含义的区分

    java中字符串型的量 如 String s 初始化为空时 s null 打印出来为null 但是对他不能进行 isEmpty 和 length 的操作 会抛出空指针异常 给他们后边添加字符串后 s s yuanyuan 打印时前边会保留n
  • 2019年全国一二线城市程序员工资大调查

    我在4月1日到3日之间 抓取了某招聘网站的软件和互联网类招聘数据40万条 其中通过程序判断为程序员的14万条 地域方面 我选择了24个主要城市 这里的程序员包括普通程序员 架构师和算法工程师 美工等不计算在内 这点和2017年不同 如果你只
  • ftp

    1 ftp上传文件 1 1相关依赖
  • OpenMMLab_0【简介】

    1 项目动机 统一的深度学习框架 统一的算法框架和生态 自2018年开源以来已经能够实现很多算法 2 总体现状 3 总体框架概览 3 1 算法训练 部署一体化 3 2 算法框架介绍 MMDetection MMDetection3D 7 个
  • Bootstrap入门(一)

    前言 大家好 我是九歌 今天我要分享的内容是Bootstrap的入门 首先老规矩先上思维导图 提示 以下是本篇文章正文内容 下面案例可供参考 一 Bootstrap 学习一门新的技术我们终究都逃不过三个W What Why Where 1
  • Vue3.0

    teleport Teleport 提供了一种干净的方法 允许我们控制在 DOM 中哪个父节点下呈现 HTML 而不必求助于全局状态或将其拆分为两个组件
  • 《C++ Primer》学习笔记(十五):面向对象编程

    C Primer 学习笔记 十五 面向对象编程 抽象基类 访问控制与继承 构造函数与拷贝控制 文本查询程序再探 练习 面向对象编程的核心思想是数据抽象 继承和动态绑定 在C 语言中 当我们使用基类的引用 或指针 调用一个虚函数时将发生动态绑
  • python跟易语言的爬虫_用易语言写个简单的小爬虫其中的关键点

    一 请求头 ctrl L快捷键创建变量 变量名 类型 协议参数 类 POST数据类 请求头数据 文本型 协议参数 添加 v 4 52 0 请求头数据 协议参数 获取协议头数据 二 请求参数比如post 变量名 类型 请求data参数 类 P
  • 【负荷预测】基于神经网络的负荷预测和价格预测(Matlab代码实现)

    目录 1 概述 2 基于神经网络的负荷预测 Matlab实现 2 1 代码 2 2 结果 2 3 回归树模型的进一步改进 3 基于神经网络的价格预测 Matlab代码实现 4 阅读全文 Matlab代码 1 概述 这个例子演示了用MATLA