基于LSTM神经网络的负荷预测(Python代码实现)

目录

1.概述

2.负荷预测

3.LSTM

4.算例

5.Python代码实现

6.结果 


1.概述

电力系统负荷(电力需求量,即有功功率)预测是指充分考虑历史的系统负荷、经济状况、气象条件和社会事件等因素的影响,对未来一段时间的系统负荷做出预测。负荷预测是电力系统规划与调度的一项重要内容。短期(两周以内)预测是电网内部机组启停、调度和运营计划制定的基础;中期(未来数月)预测可为保障企业生产和社会生活用电,合理安排电网的运营与检修决策提供支持;长期(未来数年)预测可为电网改造、扩建等计划的制定提供参考,以提高电力系统的经济效益和社会效益。

复杂多变的气象条件和社会事件等不确定因素都会对电力系统负荷造成一定的影响,使得传统负荷预测模型的应用存在一定的局限性。同时,随着电力系统负荷结构的多元化,也使得模型应用的效果有所降低,因此电力系统负荷预测问题亟待进一步研究。

2.负荷预测

电力负荷预测是一种典型的时间序列回归预测任务。电力负荷预测是保证电力供需平衡的基础,并为电网、电源的规划建设以及电网企业、电网使用者的经营决策提供信息和依据。负荷预测分为长期、中期、短期和超短期负荷预测,预测对象包括系统负荷和母线负荷,由电网企业负责组织编制。大用户应根据有关规定,按时报送其主要接装容量和年、月用电量预测及日用电负荷变化过程。

3.LSTM


传统RNN网络由于结构存在固有缺陷,在参数更新时会存在梯度消失以及梯度爆炸的问题,导致长距离的历史信息丢失,进一步造成网络极难收敛,无法训练出理想的模型。LSTM作为一种改进的循环神经网络,在原有网络结构的基础上加入了细胞状态(cell state)的结构来控制全局信息的传输,并通过遗忘门,输入门,输出门三种门控单元控制细胞状态信息值的更新。LSTM在极大程度上缓解了传统RNN模型存在的长期依赖问题,减少了长距离历史信息的丢失,输出的预测结果更准确 。LSTM的具体模型如下:



 

LSTM通过以下公式进行更新权值矩阵和偏置参数等网络信息:

  

4.算例

根据附件中提供的某地区电网间隔 15 分钟的负荷数据,建立中短期负荷预测模型: 给出该地区电网未来 10 天间隔 15 分钟的负荷预测结果,并分析其预测精度;

5.Python代码实现

# 划分训练集和测试集,80% 作为训练集
train_size = int(len(data_X) * 0.8)
test_size = len(data_X) - train_size
train_X = data_X[:train_size]
train_Y = data_Y[:train_size]
test_X = data_X[train_size:]
test_Y = data_Y[train_size:]

# 设置LSTM能识别的数据类型,形成tran_X的一维两个参数的数组,train_Y的一维一个参数的数组。并转化为tensor类型

# 把list转numpy三维数组,第一维自适应
train_X = train_X.reshape(-1, 1, input_len)
train_Y = train_Y.reshape(-1, 1, label_len)
test_X = test_X.reshape(-1, 1, input_len)
# numpy数组转tensor
train_x = torch.from_numpy(train_X)
train_y = torch.from_numpy(train_Y)
test_x = torch.from_numpy(test_X)

# 建立LSTM模型,第一层为LSTM神经网络,第二层为一个全连接层。
from torch import nn
from torch.autograd import Variable

class lstm(nn.Module):
    def __init__(self,input_size=input_len,hidden_size=input_len,output_size=label_len,num_layer=2):
        super(lstm,self).__init__()
        self.layer1 = nn.LSTM(input_size,hidden_size,num_layer)
        self.layer2 = nn.Linear(hidden_size,output_size)
    
    def forward(self,x):
        x,_ = self.layer1(x)
        s,b,h = x.size()
        x = x.view(s*b,h)
        x = self.layer2(x)
        x = x.view(s,b,-1)
        return x

6.结果 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值