基于神经网络的电力系统的负荷预测

一、背景介绍:

电力系统负荷预测是生产部门的重要工作之一,通过准确的负荷预测,可以经济合理地安排机组的启停、减少旋转备用容量、合理安排检修计划、降低发电成本和提高经济效益。负荷预测按预测的时间可以分为长期、中期和短期负荷预测。其中,短期负荷预测中,周负 荷预测(未来1周)、日负荷预测(未来24小时)及提前小时预测对于电力系统的实时运行 调度至关重要。负荷预测对电力系统控制、运行和计划都有着重要意义。因为对未来时刻进 行预调度要以负荷预测的结果为依据,负荷预测结果的准确性将直接影响调度的结果,从而 对电力系统的安全稳定运行和经济性带来重要影响。

力系统负荷变化受多方面的影响。一方面,存在着由于未知不确定因素引起 的随机波动;另一方面,又具有周期变化的规律性,这也使得负荷曲线具有相似性。同时,由于受天气、节假日等特殊情况影响,致使负荷变化出现差异。假设某电力系统在过去12天的有功负荷值,以及有关气象特征经归一化后的数据如表1所示。

1   电力系统负荷变化样本集

日期

电 力 负 荷

   

1

0.2452

0.1466

0.1314

0.2243

0.5523

0.6642

0.7015

0.6981

0.6821

0.6945

0.7549

0.8215

2

0.2217

0.1581

0.1408

0.2304

0.5134

0.5312

0.6819

0.7125

0.7265

0.6847

0.7826

0.8325

0.2415

0.3027

0

3

0.2525

0.1627

0.1507

0.2406

0.5502

0.5636

0.7051

0.7352

0.7459

0.7015

0.8064

0.8156

0.2385

0.3125

0

4

0.2016

0.1105

0.1243

0.1978

0.5021

0.5232

0.6819

0.6952

0.7015

0.6825

0.7825

0.7895

0.2216

0.2701

0

5

0.2115

0.1201

0.1312

0.2019

0.5532

0.5736

0.7029

0.7032

0.7189

0.7019

0.7965

0.8025

0.2352

0.2506

0.5

6

0.2335

0.1322

0.1534

0.2214

0.5623

0.5827

0.7198

0.7276

0.7359

0.7506

0.8092

0.8221

0.2542

0.3125

0

7

0.2368

0.1432

0.1653

0.2205

0.5823

0.5971

0.7136

0.7129

0.7263

0.7153

0.8091

0.8217

0.2601

0.3198

0

8

0.2342

0.1368

0.1602

0.2131

0.5726

0.5822

0.7101

0.7098

0.7127

0.7121

0.7995

0.8126

0.2579

0.3099

0

9

0.2113

0.1212

0.1305

0.1819

0.4952

0.5312

0.6886

0.6898

0.6999

0.7323

0.7721

0.7956

0.2301

0.2867

0.5

10

0.2005

0.1121

0.1207

0.1605

0.4556

0.5022

0.6553

0.6673

0.6798

0.7023

0.7521

0.7756

0.2234

0.2799

1

11

0.2123

0.1257

0.1343

0.2079

0.5579

0.5716

0.7059

0.7145

0.7205

0.7401

0.8019

0.8136

0.2314

0.2977

0

12

0.2119

0.1215

0.1621

0.2161

0.6171

0.6159]

0.7155

0.7201

0.7243

0.7298

0.8179

0.8229

0.2317

0.2936

0

在表1中,由于电力负荷每隔2个小时测量1次,故一天共有12组负荷数据。而气象特征分别为预测日的最高气温、最低气温和天气特征值,其中分别用0表示晴、0.5表示阴天和1表示雨天等天气特征。

试根据电力系统以前的电力负荷和当日的气象特征预测当日的电力负荷。

提示:

①确定训练样本集

② 网络设计和训练伪代码

net=newff(minmax(X),[* *],{ });

net.trainParam.epochs=100;

net.trainParam.goal=0.001;

net=train(net,X,T);

y=sim(net,X);

 网络测试

网络训练成功后,利用测试样本对网络进行测试。测试样本由表1中的第11 天 的 1 2组实际负荷数据和第12天的预测日当天的3个气象特征值组成,

Xtest

ytest=sim(net,Xtest)

  • 工程实现:

用BP网络预测电力负荷

1)网络创建

BP一般分为3层输入层,中间层(隐藏层),输出层。

通过单隐层的BP网络实现。由于输入量有15个元素,所以网络输出层的神经元有15个,根据Kolmogorov定理网络中间层神经元取31神经元为最佳。根据12个输出向量定义输出层的神经元为12个。网络中间层神经元传递函数采用S型正切函网络经过训练后才可以用于电力负荷预测的实际应用。考虑到网络的结构比较复杂,神经网络元个数比较多,需要适当增大训练次数和学习速率。训练参数的设定如表4。3所示

训练参数表

训练次数

训练目标

学习速率

10000

0.001

0.01

有关程序如下:

net.trainParam。epochs=10000

net.trainParam。goal=0.001;

LP.lr=0.01;

3)网络测试

输出层神经元函数采用S型对数函数logsig。因为输出数据位于[0,1]之间。输入量的[0,1]之间用变量threshold来规定。Bp的网络训练函数为trainlm,所以在newff中调用trainlm函数。

把输出值减去实际值之后再除以实际值就是数据的相对误差了,matlab的程序如下所示:

    z=y—X;

    c=X.\z;

    plot(1:12,c);

    grid;

    title('相对误差曲线’);

    xlabel(’时间’);

    ylabel(’相对误差率’);

训练过程可视化如下

BP神经网络MATLAB语法

1. 数据预处理

在训练神经网络前一般需要对数据进行预处理,一种重要的预处理手段是归一化处理。下面简要介绍归一化处理的原理与方法。

(1) 什么是归一化?

数据归一化,就是将数据映射到[0,1]或[-1,1]区间或更小的区间,比如(0.1,0.9) 。

(2) 为什么要归一化?

<1>输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。

<2>数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小。

<3>由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。例如神经网络的输出层若采用S形激活函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。

<4>S形激活函数在(0,1)区间以外区域很平缓,区分度太小。例如S形函数f(X)在参数a=1时,f(100)与f(5)只相差0.0067。

(3) 归一化算法

  一种简单而快速的归一化算法是线性转换算法。线性转换算法常见有两种形式:

<1> y = ( x - min )/( max - min )

  其中min为x的最小值,max为x的最大值,输入向量为x,归一化后的输出向量为y 。上式将数据归一化到 [ 0 , 1 ]区间,当激活函数采用S形函数时(值域为(0,1))时这条式子适用。

<2> y = 2 * ( x - min ) / ( max - min ) - 1

这条公式将数据归一化到 [ -1 , 1 ] 区间。当激活函数采用双极S形函数(值域为(-1,1))时这条式子适用。

(4) Matlab数据归一化处理函数

Matlab中归一化处理数据可以采用premnmx , postmnmx , tramnmx 这3个函数。

<1> premnmx

语法:[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t)

参数:

pn: p矩阵按行归一化后的矩阵

minp,maxp:p矩阵每一行的最小值,最大值

tn:t矩阵按行归一化后的矩阵

mint,maxt:t矩阵每一行的最小值,最大值

作用:将矩阵p,t归一化到[-1,1] ,主要用于归一化处理训练数据集。

<2> tramnmx

语法:[pn] = tramnmx(p,minp,maxp)

参数:

minp,maxp:premnmx函数计算的矩阵的最小,最大值

pn:归一化后的矩阵

作用:主要用于归一化处理待分类的输入数据。

<3> postmnmx

语法: [p,t] = postmnmx(pn,minp,maxp,tn,mint,maxt)

参数:

minp,maxp:premnmx函数计算的p矩阵每行的最小值,最大值

mint,maxt:premnmx函数计算的t矩阵每行的最小值,最大值

作用:将矩阵pn,tn映射回归一化处理前的范围。postmnmx函数主要用于将神经网络的输出结果映射回归一化前的数据范围。

2. 使用Matlab实现神经网络

使用Matlab建立前馈神经网络主要会使用到下面3个函数:

newff :前馈网络创建函数

train:训练一个神经网络

sim :使用网络进行仿真

下面简要介绍这3个函数的用法。

(1) newff函数

<1>语法

newff函数参数列表有很多的可选参数,具体可以参考帮助文档,这里介绍一种简单形式。

语法:net = newff ( A, B, {C} ,‘trainFun’)

参数:

A:一个n×2的矩阵,第i行元素为输入信号xi的最小值和最大值;

B:一个k维行向量,其元素为网络中各层节点数;

C:一个k维字符串行向量,每一分量为对应层神经元的激活函数;

trainFun :为学习规则采用的训练算法。

表3.1 BP网络的常用函数表

函数类型

函数名称

函数用途

前向网络创建函数

newcf

创建级联前向网络

Newff

创建前向BP网络

传递函数

logsig

S型的对数函数

tansig

S型的正切函数

purelin

纯线性函数

学习函数

learngd

基于梯度下降法的学习函数

learngdm

梯度下降动量学习函数

性能函数

mse

均方误差函数

msereg

均方误差规范化函数

显示函数

plotperf

绘制网络的性能

plotes

绘制一个单独神经元的误差曲面

plotep

绘制权值和阈值在误差曲面上的位置

errsurf

计算单个神经元的误差曲面

newff函数用于创建一个BP网络。调用格式为:

net=newff

net=newff(PR,[S1 S2..SN1],{TF1 TF2..TFN1},BTF,BLF,PF)

其中,net=newff;用于在对话框中创建一个BP网络。

net为创建的新BP神经网络;

PR为网络输入向量取值范围的矩阵;

[S1 S2…SNl]表示网络隐含层和输出层神经元的个数;

{TFl TF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’;

BTF表示网络的训练函数,默认为‘trainlm’;

BLF表示网络的权值学习函数,默认为‘learngdm’;

PF表示性能数,默认为‘mse’。

<2>常用的激活函数

  常用的激活函数有:

a) 线性函数 (Linear transfer function)

  该函数的字符串为’purelin’。

b) 对数S形转移函数( Logarithmic sigmoid transfer function )

该函数的字符串为’logsig’。

c) 双曲正切S形函数 (Hyperbolic tangent sigmoid transfer function )

该函数的字符串为’tansig’。

Matlab的安装目录下的toolbox\nnet\nnet\nntransfer子目录中有所有激活函数的定义说明。

<3>常见的训练函数

常见的训练函数有:

traingd :梯度下降BP训练函数(Gradient descent backpropagation)

traingdx :梯度下降自适应学习率训练函数

<4>网络配置参数

一些重要的网络配置参数如下:

net.trainparam.goal :神经网络训练的目标误差

net.trainparam.show: 显示中间结果的周期

net.trainparam.epochs :最大迭代次数

net.trainParam.lr: 学习率

(2) train函数

网络训练学习函数。

语法:[ net, tr, Y1, E ] = train( net, X, Y )

参数:

X:网络实际输入

Y:网络应有输出

tr:训练跟踪信息

Y1:网络实际输出

E:误差矩阵

(3) sim函数

语法:Y=sim(net,X)

参数:

net:网络

X:输入给网络的K×N矩阵,其中K为网络输入个数,N为数据样本数

Y:输出矩阵Q×N,其中Q为网络输出个数

  • 源代码:

% 定义输入数据矩阵P

P=[0.2452 0.1466 0.1314 0.2243 0.5523 0.6642 0.7105 0.6981 0.6821 0.6945 0.7549 0.8215 0.2415 0.3027 0;

    0.2217 0.1581 0.1408 0.2304 0.5134 0.5312 0.6819 0.7125 0.7265 0.6847 0.7826 0.8325 0.2385 0.3125 0;

    0.2525 0.1627 0.1507 0.2406 0.5502 0.5636 0.7051 0.7352 0.7459 0.7015 0.8064 0.8156 0.2216  0.2701 1;

    0.2016 0.1105 0.1243 0.1978 0.5021 0.5232 0.6819 0.6952 0.7015 0.6825 0.7825 0.7895 0.2352 0.2506 0.5;

    0.2115 0.1201 0.1312 0.2019 0.5332 0.5736 0.7029 0.7032 0.7189 0.7019 0.7965 0.8025 0.2542 0.3125 0;

    0.2335 0.1322 0.1534 0.2214 0.5623 0.5827 0.7198 0.7276 0.7359 0.7506 0.8092 0.8221 0.2601 0.3198 0;

    0.2368 0.1432 0.1653 0.2205 0.5823 0.5971 0.7136 0.7129 0.7263 0.7153 0.8091 0.8217 0.2579 0.3099 0;

   0.2342 0.1368 0.1602 0.2131 0.5726 0.5822 0.7101 0.7098 0.7127 0.7121 0.7995 0.7126 0.2301 0.2867 0.5;

   0.2113 0.1212 0.1305 0.1819 0.4952 0.5312 0.6886 0.6898 0.6999 0.7323 0.7721 0.7956 0.2234 0.2799 1;

   0.2005 0.1121 0.1207 0.1605 0.4556 0.5022 0.6553 0.6673 0.6798 0.7023 0.7521 0.7756 0.2314 0.2977 0]';

 

% 定义目标数据矩阵T

T=[0.2217 0.1581 0.1408 0.2304 0.5134 0.5312 0.6819 0.7125 0.7265 0.6847 0.7826 0.8325;

    0.2525 0.1627 0.1507 0.2406 0.5502 0.5636 0.7051 0.7352 0.7459 0.7015 0.8064 0.8156;

    0.2016 0.1105 0.1243 0.1978 0.5021 0.5232 0.6819 0.6952 0.7015 0.6825 0.7825 0.7895;

    0.2115 0.1201 0.1312 0.2019 0.5532 0.5736 0.7029 0.7032 0.7189 0.7019 0.7965 0.8025;

    0.2335 0.1322 0.1534 0.2214 0.5623 0.5827 0.7198 0.7276 0.7359 0.7506 0.8092  0.8221;

    0.2368 0.1432 0.1653 0.2205 0.5823 0.5971 0.7136 0.7129 0.7263 0.7153 0.8091 0.8217;

    0.2342 0.7368 0.1602 0.2131 0.5726 0.5822 0.7101 0.7098 0.7127 0.7121 0.7995 0.8126;

    0.2113 0.1212 0.1305 0.1819 0.4952 0.5312 0.6886 0.6898 0.6999 0.7323 0.7721 0.7956;

    0.2005 0.1121 0.1207 0.1605 0.4556 0.5022 0.6552 0.6673 0.6798 0.7023 0.7521 0.7756;

    0.2123 0.1257 0.1343 0.2079 0.5579 0.5716 0.7059 0.7145 0.7205 0.7401 0.8019 0.8136]';

threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;];

 

% 构建网络结构

net=newff(threshold,[31,12],{'tansig','logsig'},'trainlm');

 

% 设置训练参数

net.trainParam.epochs=10000;

net.trainParam.goal=0.001;

LP.lr=0.01;

net=train(net,P,T);

 

% 定义测试数据

P_test=[0.2123 0.1257 0.1343 0.2079 0.5579 0.5716 0.7059 0.7145 0.7205 0.7401 0.8019 0.8136 0.2317 0.3936 0]';

 

% 测试并得到预测结果

y=sim(net,P_test);

 

% 定义真实结果

X=[0.2119 0.1215 0.1621 0.2161 0.6171 0.6159 0.7155 0.7201 0.7243 0.7298 0.8179 0.8229]';

 

% 计算预测误差

 z=y-X;

 c=X.\z;

 

 % 绘制预测相对误差曲线

plot(1:12,c);

grid;

title('相对误差曲线');

xlabel('时间');

ylabel('相对误差率');

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

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

相关文章

​​快速排序(四)——挖坑法,前后指针法与非递归

目录 ​一.前言 二.挖坑法 三.前后指针法 四.递归优化 五.非递归 六.结语 一.前言 本文我们接着上篇文章的重点快排&#xff0c;现在继续讲解对快排优化的挖坑法&#xff0c;前后指针法以及非递归方法&#xff0c;下面是上篇文章快排链接&#xff1a;https://mp.csdn.net…

C#,字符串匹配(模式搜索)有限自动机(Finite Automata)算法的源代码

一、有限状态自动机 图中两个圆圈&#xff0c;也叫节点&#xff0c;用于表示状态&#xff0c;从图中可以看成&#xff0c;它有两个状态&#xff0c;分别叫0和1。从每个节点出发&#xff0c;都会有若干条边。当处于某个状态时&#xff0c;如果输入的字符跟该节点出发的某条边的内…

用Axure RP 9制作滑块

制作流程 1.打开界面 放置一个水平线 修改长为400 线段为5 2.放入圆 如图 3.修改圆的长和宽 如图 4.将圆变成动态面板 5.设置交互事件 如图 6.增加交互事件 7.增加 8.修改成跟随水平

基于springboot+vue的网上点餐系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 背景和意…

php基础学习之数据类型

php数据类型的基本概念 数据类型&#xff1a;data type&#xff0c;在PHP中指的是数据本身的类型&#xff0c;而不是变量的类型。 PHP 是一种弱类型语言&#xff0c;变量本身没有数据类型。 把变量类比成一个杯子&#xff08;容器&#xff09;&#xff0c;杯子可以装雪碧、可…

STL之unordered_map使用方法

这里写目录标题 STL之unordered_map使用方法1.什么是STL呢2.unordered_map2.1 头文件&#xff1a;2.2 怎么创建&#xff1a;2.3 初始化&#xff1a;2.4 根据key获取对应value值&#xff1a;2.5 遍历&#xff0c;判断key是否存在&#xff1a;2.6 怎么根据迭代器it获取key和value…

Jenkins中文插件安装与使用

安装中文插件 进入Jenkins的系统管理—插件管理&#xff0c;选择Available plugins搜索Locale&#xff0c;进行下载安装 使用 安装完成之后&#xff0c;进入系统配置&#xff0c;找到Locale&#xff0c;Default Language输入zh_CN为中文模式&#xff0c;输入en_US为英文模式 …

Flutter 自定义AppBar实现滚动渐变

1、使用ListView实现上下滚动。 2、使用Stack&#xff1a;允许将其子部件放在彼此的顶部&#xff0c;第一个子部件将放置在底部。所以AppBar&#xff0c;写在ListView下面。 3、MediaQuery.removePadding&#xff1a;当使用ListView的时候发现&#xff0c;顶部有块默认的Padd…

数据的存储

目录 1 -> 数据类型的介绍 1.1 -> 类型的基本归类 2 -> 整型在内存中的存储 2.1 -> 原码、反码、补码 2.2 -> 大小端介绍 3 -> 浮点型在内存中的存储 3.1 -> 浮点数存储规则 1 -> 数据类型的介绍 基本内置类型有&#xff1a; char /…

视频转换成文字,原来转换的方法这么简单!

在我们的生活中&#xff0c;不少小伙伴是否遇到过这样的情况&#xff1f;观看网络视频时&#xff0c;由于解说内容极为引人入胜&#xff0c;忍不住想将其内容记录下来&#xff0c;但这手动逐句整理的过程既耗时又费力。幸运的是&#xff0c;经过一番努力查找&#xff0c;确实有…

【C++杂货铺】三分钟彻底搞懂如何使用C++中max函数

&#x1f308;前言 欢迎收看本期【C杂货铺】&#xff0c;这期内容&#xff0c;我们将围绕C中max函数部分进行讲解&#xff0c;包含了如何查询库函数&#xff0c;max函数的使用方法灯。如果你想学习C&#xff0c;或者刚学完C语言衔接C&#xff0c;那么这篇文章将会非常有效的帮助…

RC滤波电路的原理

RC滤波电路分为低通滤波和高通滤波 低通滤波通过低频信号 看上面这两个电路 先分析低通滤波 由于电容C具有隔直通交的特性&#xff0c;所以输入的高频分量相当于经过电阻R后直接对地短接&#xff0c;并没有输出到后端负载上&#xff0c;只有低频的输入分量才会输出到后端。 电…

JAVA输入任意一个数字,实现递减求和(计算任意整数n的和)

摘要&#xff1a;本文介绍了使用Java编程语言计算任意整数n及其之前所有整数的和的示例代码。代码使用了Scanner类来读取用户输入的整数值&#xff0c;并通过循环计算出和结果并生成计算公式字符串。 内容&#xff1a; 在这个示例中&#xff0c;我们将展示如何使用Java编程语言…

k8s-helm

Helm: 什么是helm,在没有这个heml之前&#xff0c;deployment service ingress的作用就是通过打包的方式&#xff0c;把deployment service ingress这些打包在一块&#xff0c;一键式的部署服务&#xff0c;类似于yum 官方提供的一个类似于安全仓库的功能&#xff0c;可以实现…

【Linux】【实战系列】10 分钟掌握日常开发中 Linux 文本与文件处理命令

文章目录 文本查看和处理cattailheadmore & lessmoreless grep组合融合技 awk 文本编辑vi & vim三种模式使用基本使用其它使用技巧 文件搜索find 最后个人简介 hello&#xff0c;大家好&#xff0c;我是 Lorin&#xff0c;今天和大家分享一期 Linux 命令实战教学&#…

WebAssembly002 emcc Emscripten js端传入数组给c++

Emscripten下载 安装Emscripten&#xff1a;可以在Emscripten的官方网站&#xff08;https://emscripten.org/&#xff09;上找到安装说明。我的踩坑记录在&#xff1a;WebAssembly002 emcc install 解决 Error: Downloading URL ‘https://storage.googleapis.com/…‘ erro…

第九站(17天):C++IO流

文件IO流 对象:文件,控制台,特定数据类型stringstream (写数据输出流out,读数据输入流in) ofstream : ofstream outfile;//输出流:从键盘输出数据,写入到文件 //文件打开默认位ios::out//字节覆盖写 //可以截断设置为:ios::out | ios::trunc//将之前文件全部…

关于网络模型的笔记

1. OSI 七层参考模型&#xff1a; 简介&#xff1a; 七层模型&#xff0c;亦称 OSI&#xff08;Open System Interconnection&#xff09;参考模型&#xff0c;即开放式系统互联。参考模型 是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联…

DolphinScheduler-3.2.0集群部署教程

本文目录 1.集群部署方案(2 Master 3 Worker)2.前置准备工作3.端口说明4.DS集群部署1.时间同步2.配置用户、权限3.配置集群免密登陆4.ZK集群启动5.初始化数据库1.创建数据库、用户、授权2.解压缩安装包3.添加MySQL驱动至libs目录 6.配置文件修改1.dolphinscheduler_env.sh 配置…

基于YOLOv5、v7、v8的竹签计数系统的设计与实现

文章目录 前言效果演示一、实现思路① 算法原理② 程序流程图 二、系统设计与实现三、模型评估与优化① Yolov5② Yolov7③Yolov8 四、模型对比 前言 该系统是一个综合型的应用&#xff0c;基于PyTorch框架的YOLOv5、YOLOv7和YOLOv8&#xff0c;结合了Django后端和Vue3前端&am…