前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【论文复现】短期电力负荷

【论文复现】短期电力负荷

作者头像
Eternity._
发布2024-11-06 08:20:02
820
发布2024-11-06 08:20:02
举报
文章被收录于专栏:登神长阶

前言:在当今这个快速运转的现代社会中,电力已成为驱动我们日常生活、工业生产乃至国家经济发展的核心动力。从家庭中的照明、取暖、制冷到企业的机械运转、数据中心的服务器集群,再到城市基础设施如交通、通信和医疗服务,电力的稳定供应与高效利用是衡量一个国家现代化水平的重要标志。然而,随着能源需求的日益增长及可再生能源并网比例的不断提高,电力系统的运行面临着前所未有的挑战,其中,短期电力负荷预测成为了确保电网安全稳定运行、优化资源配置、促进节能减排的关键技术之一。

短期电力负荷预测,顾名思义,是指对未来几小时到几天内电力系统所需电力负荷进行预测的过程。这一预测不仅关乎电力调度部门能否精准安排发电计划、有效平衡供需、减少备用容量、降低成本,还直接影响到用户侧电力需求的响应管理、智能电网的调度决策以及能源市场的价格波动。特别是在极端天气条件、节假日效应、经济政策变动等不确定因素的作用下,短期负荷波动更加复杂多变,使得预测工作充满了挑战。

让我们携手共进,在这个充满机遇与挑战的新时代,为构建更加绿色、高效、智能的电力供应体系贡献力量!

论文发表

  1. 来自《IEEE Transactions on Smart Grid》2022年7月的13卷第4期,《IEEE Transactions on Smart Grid》在中科院升级版中,大类工程技术位于1区,小类工程:电子与电气位于1区,非综述类期刊。
  2. 作者包括IEEE会员Nakyoung Kim、IEEE学生会员Hyunseo Park、IEEE高级会员Joohyung Lee,以及IEEE高级会员Jun Kyun Choi。
  3. 链接地址:https://ieeexplore.ieee.org/document/9732470

问题背景

一. 基本问题

短期电力负荷预测(STLF),即对未来几小时到几周的电力负荷进行准确预测。

二. 本论文发现的问题

在电力负荷预测中,由于数据的高维性和波动性,传统的特征提取方法往往难以捕捉到负荷数据中的复杂模式和关系。

对于论文发现问题的解决方案:

本论文通过提出一个名为MultiTag2Vec的特征提取框架来解决短期电力负荷预测(STLF)中的特征工程问题。该框架包括两个主要过程:标记(tagging)和嵌入(embedding)。

  1. 标记过程:首先,通过从高维时间序列数据中提取关键信息,将电气负荷数据转换成紧凑形式。这一步通过聚类子序列来发现重复出现的模式,并为每个模式分配唯一的标签,从而实现数据的标记。
  2. 嵌入过程:接下来,通过学习标签序列中的时间和维度关系来提取特征。为了捕捉这些关系,提出了一个带有卷积层的网络模型,该模型采用数学分析设计的多输出结构。通过训练,可以从任何任意多维标签中提取特征。

本文所涉及的所有资源的获取方式: https://www.aspiringcode.com/contentid=17296608955895&uid=955c202cf27c4fc892972176d2a63734

复现:

一. 多维特征提取的提取框架:

  1. 时间序列切分,聚类,打标签
代码语言:javascript
复制
def segment_time_series(X, T):
    """
    将时间序列 X 分段为长度为 T 的子序列。
    X: 多元时间序列 (N x D), N 为时间序列长度, D 为维度数
    T: 每个子序列的长度
    返回: 分段后的子序列集合,形状为 (N_segment, T, D)
    """
    N, D = X.shape
    N_segment = N // T  # 计算分段后的子序列数量
    segments = np.array([X[i*T:(i+1)*T] for i in range(N_segment)])
    return segments

# 2. 模式发现
def discover_patterns(segments, K):
    """
    对分段后的子序列进行聚类,提取模式。
    segments: 分段后的子序列集合, 形状为 (N_segment, T, D)
    K: 聚类的数量,即模式的数量
    返回: 每个维度的模式集合,形状为 (K, T, D)
    """
    N_segment, T, D = segments.shape
    patterns = []
    
    # 对每个维度单独进行聚类
    for d in range(D):
        # 提取第 d 个维度的所有子序列
        data_d = segments[:, :, d]  # 形状为 (N_segment, T)
        
        # 使用 KMeans 进行聚类
        kmeans = KMeans(n_clusters=K, random_state=42)
        kmeans.fit(data_d)
        
        # 保存聚类中心(模式)
        patterns.append(kmeans.cluster_centers_)
    
    # patterns 为 D 维的聚类中心集合,形状为 (D, K, T)
    return np.array(patterns)

# 3. 数据标记
def tag_data(segments, patterns):
    """
    对每个子序列打标签,标签为距离最近的聚类中心。
    segments: 分段后的子序列集合, 形状为 (N_segment, T, D)
    patterns: 每个维度的聚类中心集合,形状为 (D, K, T)
    返回: 每个子序列的标签集合,形状为 (N_segment, D)
    """
    N_segment, T, D = segments.shape
    K = patterns.shape[1]  # 模式的数量
    labels = np.zeros((N_segment, D), dtype=int)
    
    # 对每个维度进行标记
    for d in range(D):
        for i in range(N_segment):
            # 计算当前子序列与所有聚类中心的距离
            distances = np.linalg.norm(segments[i, :, d] - patterns[d], axis=1)
            
            # 选择最小距离的聚类中心的标签
            labels[i, d] = np.argmin(distances)
    
    return labels
  1. 嵌入网络定义:
代码语言:javascript
复制
class EmbeddingNetwork(nn.Module):
    def __init__(self, D, K, M):
        super(EmbeddingNetwork, self).__init__()
        # 卷积层,用于提取输入张量的特征
        self.conv = nn.Conv2d(in_channels=D, out_channels=M, kernel_size=(1, K), stride=1)  
        self.pool = nn.AdaptiveAvgPool2d((1, 1))


        # 两个并行的全连接层,用于预测两个维度的输出标签
        self.fc1 = nn.Linear(M, K)
        self.fc2 = nn.Linear(M, K)

    def forward(self, x):
        # 卷积层
        print(x.shape)
        x = self.conv(x)  # 卷积操作
        print(x.shape)
        x = self.pool(x)  # 使用自适应平均池化,将每个样本缩减为大小为 (M, 1)
        print(x.shape)
        x = x.view(x.size(0), -1)  # 展平张量,形状变为 (batch_size, M)
         # 两个并行的全连接层
        output1 = self.fc1(x)  # 维度1的输出
        output2 = self.fc2(x)  # 维度2的输出
        # 将两个输出拼接在一起,形成最后的输出
        output = torch.stack((output1, output2), dim=1)
        return output

二. 论文中进行性能测试的MultiTag2Vec-STLF模型:

代码语言:javascript
复制
class FeatureExtractor(nn.Module):
    def __init__(self, embedding_network):
        super(FeatureExtractor, self).__init__()
        self.conv = embedding_network.conv

    def forward(self, x):
        x = self.conv(x)  # 卷积层
        x = x.view(x.size(0), -1)  # 展平张量
        return x

# 初始化特征提取器
feature_extractor = FeatureExtractor(embedding_network)

# 4. 定义 MultiTag2Vec-STLF 模型
class MultiTag2VecSTLF(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim, feature_extractor):
        super(MultiTag2VecSTLF, self).__init__()
        self.feature_extractor = feature_extractor
        # 冻结特征提取器的参数
        for param in self.feature_extractor.parameters():
            param.requires_grad = False
        # 双向 LSTM 层
        self.lstm = nn.LSTM(input_dim, hidden_dim, batch_first=True, bidirectional=True)
         # 自注意力机制
        self.attention = nn.MultiheadAttention(embed_dim=2 * hidden_dim, num_heads=1, batch_first=True)
        # 全连接层用于预测下一天 24 小时的负荷
        self.fc = nn.Linear(2 * hidden_dim, output_dim)

    def forward(self, x):
        x = self.feature_extractor(x)
       
        x = x.view(x.size()[0], seg_c, -1)
       
        # LSTM 前向传播
        lstm_out, _ = self.lstm(x)  # lstm_out 形状: (batch_size, seq_length, 2 * hidden_dim)
        # 注意力机制
        attn_output, _ = self.attention(lstm_out, lstm_out, lstm_out)  # 计算自注意力,形状: (batch_size, seq_length, 2 * hidden_dim)
        context_vector = torch.sum(attn_output, dim=1)  # 计算上下文向量,形状: (batch_size, 2 * hidden_dim)
        # 全连接层预测
        output = self.fc(context_vector)  # 预测输出,形状: (batch_size, output_dim)
        return output

三. 与整数编码(IE)的特征处理方法进行对比

使用论文中的GEFCom2014数据集中的温度和负荷数据,训练的参数设置按照论文中最优效果的参数设置。论文中使用的温度数据来自于数据集中的哪一个气象站,论文中没有说,此处是选择w1气象站的温度数据训练的结果和论文中的RMSE指标不太一样,但是从IE和MultiTag2Vec的RMSE指标对比可以看到,论文提出的特征提取方法具有一定优势。

特征处理方法

RMSE

IE

34.0563

MultiTag2Vec

32.1983

部署方式

Python 3.9.12 Pytorch 以及其他的常用python库

编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!

更多内容详见:

代码语言:javascript
复制
https://www.aspiringcode.comuid=2f3a8c82324141c48058d8e14f59b3ce
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 论文发表
  • 问题背景
    • 一. 基本问题
      • 二. 本论文发现的问题
      • 对于论文发现问题的解决方案:
      • 复现:
        • 一. 多维特征提取的提取框架:
          • 二. 论文中进行性能测试的MultiTag2Vec-STLF模型:
            • 三. 与整数编码(IE)的特征处理方法进行对比
            • 部署方式
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档