【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

2.1 Python

2.2 Matlab

🎉3 参考文献

🌈4 Matlab代码、数据、文章讲解


💥1 概述

文献来源:

摘要:对任意来流条件下的风电场发电功率进行准确预测,是提高电网对风电接纳能力的有效措施。针对大型风电场的功率预测采用单点位风速外推预测代表性差的局限,提出基于高斯混合模型(GMM)聚类的风电场短期功率预测方法。方法结合数据分布特征,利用GMM聚类将大型风电场划分为若干机组群,借助贝叶斯信息准则指标评价,获得风电场内最优机组分组方案。实际算例验证表明,按照小时级、月度级、年度级等时间尺度进行统计,所建立的GMM聚类模型均极大地提高了未分组的风电功率预测模型的准确性。相较于应用广泛的k-means聚类、层次凝聚聚类等方法,GMM聚类方法在分组功率预测中表现出了显著优势,为大型风电场短期功率预测模型的优化及运行经济性的提升提供了技术支持与依据。

关键词:

风电机组;高斯混合模型聚类;合理性评价;功率预测;

 随着风力发电的大规模并网,风能的间歇性和波动性带来的问题凸显,对风电场发电功率进行准

确预测,将不确定的风电转变为可调度的友好型电源,是提高风力发电市场竞争力的有效方式[
1 - 2 。面向日前电力平衡的风电场短期功率预测方法主要有基于学习算法的统计方法[3- 4 和基于求解大气运动方程的物理方法[5- 7 两大类。神经网络法、时间序列法、卡尔曼滤波法等统计方法能够自发地适应不同的风电场特征,具有计算速度快、预测精度高的特点,在风电功率预测领域得到了广泛应用[8] 。但由于统计方法具有黑箱性,预测功率的准确性提升仍是困扰研究及工程人员的重要难题,尤其对于复杂地形及大型风电场。因气候、地形及风电机组排布等的综合作用,风电场内不同机组表现出相异的出力特征,利用单一点位的风速外推预测整场发电功率,将难以保证预测精度;若针对单台机组分别建模,将极大地影响功率预测的时效性和经济性[9] ,且会增加整场预测的不确定性。因此,将整场的风电机组划分为若干机组群,建立考虑风电场内机组分群的功率预测模型,对于提高风电场短期功率预测的准确性和经济性具有重要意义。在风电功率预测及分析领域,分组聚类方法已得到广泛应用。文献[10]提出在神经网络预测方法
中引入基于划分的 k - means 聚类算法,对包含气象和历史功率信息的样本进行分类,克服了神经网络的不稳定性和过拟合风险;文献[11 ]基于模型的自组织特征映射(SOM )聚类算法与 K 折验证相结合,将训练样本按照数据分布特征分类,提高了功率预测模型中不同基学习器的预测能力;文献[6, 12 ]基于多种常用聚类方法建立风电机组分组模型,研究了不同分组方法在风电功率预测统计及物理模型中的适应性,显著提高了未分组模型的功率预测准确性。上述方法利用有限参数实现了风电场内机组分组,但仍难以全面反映不同机组的多峰、多模式特征。针对以上局限,结合风电机组运行数据的分布特 征 ,提 出 了 基 于 非 参 数 化 的 高 斯 混 合 模 型(Gaussian mixture model GMM )聚类的风电场短期功 率 预 测 方 法 。 利 用 贝 叶 斯 信 息 准 则(Bayesian information criterion, BIC )判定最优聚类个数,依托基于径向基函数(radial basis function RBF )神经网络的功率预测方法,验证所提聚类方法的有效性以及相较于其他聚类方法的优越性,为风电场短期功率预测方法的优化奠定了基础。
基于风电机组分组的功率预测流程图:

📚2 运行结果

2.1 Python

2.2 Matlab

 

 

🎉3 参考文献

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

[1]王一妹,刘辉,宋鹏等.基于高斯混合模型聚类的风电场短期功率预测方法[J].电力系统自动化,2021,45(07):37-43.

🌈4 Matlab代码、数据、文章讲解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用PyTorch实现CNN-BiLSTM-Attention模型的代码: ```python import torch import torch.nn as nn class CNN_BiLSTM_Attention(nn.Module): def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim, dropout, filter_sizes, num_filters): super().__init__() self.embedding = nn.Embedding(vocab_size, embedding_dim) self.convs = nn.ModuleList([ nn.Conv2d(in_channels=1, out_channels=num_filters, kernel_size=(fs, embedding_dim)) for fs in filter_sizes ]) self.lstm = nn.LSTM(embedding_dim, hidden_dim, bidirectional=True, batch_first=True) self.dropout = nn.Dropout(dropout) self.fc = nn.Linear(hidden_dim*2, output_dim) self.attention = nn.Linear(hidden_dim*2, 1) def forward(self, text): embedded = self.embedding(text) # [batch_size, seq_len, embedding_dim] embedded = embedded.unsqueeze(1) # [batch_size, 1, seq_len, embedding_dim] conved = [torch.relu(conv(embedded)).squeeze(3) for conv in self.convs] # [(batch_size, num_filters, seq_len - filter_size + 1), ...] pooled = [nn.functional.max_pool1d(conv, conv.shape[2]).squeeze(2) for conv in conved] # [(batch_size, num_filters), ...] cat = self.dropout(torch.cat(pooled, dim=1)) # [batch_size, num_filters * len(filter_sizes)] lstm_output, (hidden, cell) = self.lstm(embedded) # lstm_output: [batch_size, seq_len, hidden_dim*2], hidden: [2, batch_size, hidden_dim], cell: [2, batch_size, hidden_dim] lstm_output = self.dropout(lstm_output) attention_weights = torch.softmax(self.attention(lstm_output), dim=1) # [batch_size, seq_len, 1] attention_output = torch.sum(lstm_output * attention_weights, dim=1) # [batch_size, hidden_dim*2] output = self.fc(torch.cat((cat, attention_output), dim=1)) return output ``` 其中,`vocab_size`表示词汇表的大小,`embedding_dim`表示词向量的维度,`hidden_dim`表示LSTM的隐藏层维度,`output_dim`表示模型的输出维度,`dropout`表示dropout概率,`filter_sizes`表示卷积核的大小,`num_filters`表示卷积核的数量。 `forward()`方法中,首先通过`embedding`层将文本转换为词向量表示,然后使用`Conv2d`和`max_pool1d`对词向量进行卷积和池化操作,得到文本的卷积特征。接着,将词向量输入到LSTM中,得到LSTM的输出和隐藏状态。然后,通过`Linear`层和`softmax`计算注意力权重,将LSTM的输出和注意力权重相乘得到注意力输出。最后,将卷积特征和注意力输出拼接起来,通过`Linear`层得到模型的输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值