【没发表过的创新点】基于BiTCN-LSTM的风电功率预测研究(Matlab代码实现)

  欢迎来到本博客❤️❤️

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

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

本文目录如下:

目录

 ⛳️赠与读者

1 概述

一、研究背景与意义

二、BiTCN-LSTM模型概述

三、基于BiTCN-LSTM的风电功率预测模型构建

四、研究优势与挑战

优势:

挑战:

五、未来展望

2 运行结果

3 参考文献

4 Matlab代码、数据


 ⛳️赠与读者

‍做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......

1 概述

基于BiTCN-LSTM(双向时间卷积网络结合长短期记忆网络)的风电功率预测研究是一个结合了深度学习技术中两种强大模型的预测方法。这种方法旨在通过充分利用风电数据的时空特性,提高风电功率预测的准确性和稳定性。以下是对该研究的详细分析:

一、研究背景与意义

风力发电作为可再生能源的重要组成部分,具有无污染、充分利用自然资源等优势,逐渐成为全球能源结构调整和低碳经济发展的重要方向。然而,由于风力发电的不可控性和风速的不稳定性,风力发电机组的功率预测成为提高风电运行效率和风电场运营管理的关键问题之一。准确的风电功率预测有助于风电场运营商制定合理的发电计划和出售电量计划,优化风电场的功率管理和经济效益,同时也有助于电力系统的稳定运行和电力市场的合理调度。

二、BiTCN-LSTM模型概述

BiTCN-LSTM模型结合了双向时间卷积网络(BiTCN)和长短期记忆网络(LSTM)的优点,通过以下方式提高风电功率预测的精度:

  1. 双向时间卷积网络(BiTCN)
    • BiTCN由两个方向的时间卷积层组成,分别用于提取时间序列数据的前向和后向特征。
    • 每个时间卷积层包含多个卷积核,每个卷积核负责提取时间序列数据中特定时间尺度的特征。
    • 通过双向卷积,可以更加全面地提取时间序列数据的特征信息,提高模型的预测能力。
  2. 长短期记忆网络(LSTM)
    • LSTM是一种特殊的循环神经网络(RNN),通过引入遗忘门、输入门和输出门三个门结构,解决了传统RNN中的“长期依赖”问题。
    • LSTM能够有效地捕捉时间序列数据中的长期依赖关系和时序特征,对于风电功率预测中的长期趋势预测尤为重要。

三、基于BiTCN-LSTM的风电功率预测模型构建

基于BiTCN-LSTM的风电功率预测模型构建主要包括以下几个步骤:

  1. 数据收集与预处理
    • 收集风电场的历史风速、风向、温度等气象数据以及相应的风电发电量数据。
    • 对数据进行清洗、去噪、插值等预处理操作,以消除异常值和缺失值对预测结果的影响。
    • 对数据进行归一化处理,以消除不同量纲对模型训练的影响。
  2. 特征选择与提取
    • 根据风电功率的变化特性,选择对预测结果影响较大的特征作为模型的输入。
    • 常用的特征包括历史风电功率数据、历史风速数据、风向数据、温度数据等。
  3. 模型构建与训练
    • 构建BiTCN-LSTM模型,将预处理后的数据输入模型进行训练。
    • 在训练过程中,通过调整模型的参数(如隐藏层单元数、学习率、批处理大小等)来优化模型的预测性能。
    • 使用适当的损失函数(如均方误差MSE)和优化算法(如随机梯度下降SGD)来评估和调整模型。
  4. 模型评估与优化
    • 使用测试集数据对训练好的BiTCN-LSTM模型进行评估,计算预测误差等指标以评估模型的预测性能。
    • 根据评估结果对模型进行进一步优化,以提高预测精度和稳定性。

四、研究优势与挑战

优势:
  1. 高精度预测:BiTCN-LSTM模型能够捕捉时间序列数据中的长期依赖关系和时序特征,从而实现高精度的风电功率预测。
  2. 适应性强:模型具有较强的适应性和泛化能力,能够处理不同时间尺度和不同风电场的数据。
  3. 稳定性好:通过引入门结构解决了传统RNN的“长期依赖”问题,模型在处理长序列数据时具有更好的稳定性。
挑战:
  1. 计算复杂度:BiTCN-LSTM模型的计算复杂度较高,需要较长的训练时间和较高的计算资源。
  2. 数据依赖性:模型的预测性能高度依赖于输入数据的质量和数量。如果数据存在缺失或异常值,可能会对预测结果产生较大影响。
  3. 参数调优:模型的性能受参数影响较大,需要进行细致的参数调优工作以获得最佳预测效果。

五、未来展望

随着大数据和人工智能技术的不断发展,基于BiTCN-LSTM的风电功率预测研究将不断深入和完善。未来可能的研究方向包括:

  1. 多源数据融合:将更多的数据源(如气象数据、地理数据、电网运行数据等)进行融合,以提高预测模型的准确性和鲁棒性。
  2. 模型优化:通过引入注意力机制、残差网络等先进算法对BiTCN-LSTM模型进行优化,以进一步提高预测精度和训练效率。
  3. 实时预测:开发高效的实时预测算法和平台,以实现风电功率的实时预测和动态调度。

2 运行结果

【没发表过的创新点】基于BiTCN-LSTM的风电功率预测研究(Matlab代码实现)_第1张图片

【没发表过的创新点】基于BiTCN-LSTM的风电功率预测研究(Matlab代码实现)_第2张图片

【没发表过的创新点】基于BiTCN-LSTM的风电功率预测研究(Matlab代码实现)_第3张图片

部分代码:

%%  创建网络
% 创建输入层
%  网络参数设置
filterSize = 3;  %  滤波器大小
dropoutFactor = 0.1;
numBlocks = 3; 
numFilters = 30;    %  滤波器个数
NumNeurons = 25;   %  BiGRU神经元个数
layer = sequenceInputLayer(f_, Normalization = "rescale-symmetric", Name = "input");
 
% 创建网络图
lgraph = layerGraph(layer);
outputName = layer.Name;
 
% 建立网络结构 -- 残差块
for i = 1 : numBlocks
    % 膨胀因子
    dilationFactor = 2^(i-1);
 
    % 创建TCN正向支路
    layers = [
        convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal", Name="conv1_" + i)  % 一维卷积层 
        layerNormalizationLayer                                                                                             % 层归一化
        spatialDropoutLayer(dropoutFactor)                                                                                  % 空间丢弃层
        convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal")                     % 一维卷积层  
        layerNormalizationLayer                                                                                             % 层归一化
        reluLayer                                                                                                           % 激活层
        spatialDropoutLayer(dropoutFactor)                                                                                  % 空间丢弃层
        additionLayer(4, Name = "add_" + i)
    ];
 
    % 添加残差块到网络
    lgraph = addLayers(lgraph, layers);
 
    % 连接卷积层到残差块
    lgraph = connectLayers(lgraph, outputName, "conv1_" + i);
 
    % 创建 TCN反向支路flip网络结构
    Fliplayers = [
        FlipLayer("flip_" + i)                                                                                               % 反向翻转
        convolution1dLayer(1, numFilters, Name = "convSkip_"+i);                                                             % 反向残差连接
        convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal", Name="conv2_" + i)   % 一维卷积层
        layerNormalizationLayer                                                                                              % 层归一化
        spatialDropoutLayer(dropoutFactor)                                                                                   % 空间丢弃层
        convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal")                      % 一维卷积层
        layerNormalizationLayer                                                                                              % 层归一化
        reluLayer                                                                                                            % 激活层
        spatialDropoutLayer(dropoutFactor, Name="drop" + i)                                                                  % 空间丢弃层
    ];
 
    % 添加 flip 网络结构到网络
    lgraph = addLayers(lgraph, Fliplayers);
 
    % 连接 flip 卷积层到残差块
    lgraph = connectLayers(lgraph, outputName, "flip_" + i);
    lgraph = connectLayers(lgraph, "drop" + i, "add_" + i + "/in3");
    lgraph = connectLayers(lgraph, "convSkip_"+i, "add_" + i + "/in4");
    % 残差连接 -- 首层
    if i == 1
        % 建立残差卷积层
        % Include convolution in first skip connection.
        layer = convolution1dLayer(1,numFilters,Name="convSkip");

        lgraph = addLayers(lgraph,layer);
        lgraph = connectLayers(lgraph,outputName,"convSkip");
        lgraph = connectLayers(lgraph,"convSkip","add_" + i + "/in2");
    else
        lgraph = connectLayers(lgraph,outputName,"add_" + i + "/in2");
    end
    
    % Update layer output name.
    outputName = "add_" + i;
end

tempLayers = flattenLayer("Name","flatten");
lgraph = addLayers(lgraph,tempLayers);


tempLayers = [
    lstmLayer(35,'Name','lstmlayer')
    fullyConnectedLayer(outdim,"Name","fc")
    regressionLayer("Name","regressionoutput")];
lgraph = addLayers(lgraph,tempLayers);

lgraph = connectLayers(lgraph,outputName,"flatten");
lgraph = connectLayers(lgraph,"flatten","lstmlayer");


%%  训练参数设置

options = trainingOptions('adam', ...                 % 优化算法Adam  
    'MaxEpochs', 150, ...                            % 最大训练次数
    'GradientThreshold', 1, ...                       % 梯度阈值
    'InitialLearnRate', 0.01, ...         % 初始学习率
    'LearnRateSchedule', 'piecewise', ...             % 学习率调整
    'LearnRateDropPeriod', 120, ...                   % 训练850次后开始调整学习率
    'LearnRateDropFactor',0.1, ...                    % 学习率调整因子
    'L2Regularization', 0.001, ...         % 正则化参数
    'ExecutionEnvironment', 'cpu',...                 % 训练环境
    'Verbose', 1, ...                                 % 关闭优化过程
    'Plots', 'none');                    % 画出曲线

%%  训练模型
net = trainNetwork(vp_train,vt_train,lgraph,options);
%%  查看网络结构
figure
plot(lgraph)
title("BiTCN-LSTM网络模型")
set(gcf,'color','w')
%analyzeNetwork(net);% 查看网络结构
%  预测
t_sim1 = predict(net, vp_train); 
t_sim2 = predict(net, vp_test); 

%  数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
T_train1 = T_train;
T_test2 = T_test;

%  数据格式转换
T_sim1 = cell2mat(T_sim1);% cell2mat将cell元胞数组转换为普通数组
T_sim2 = cell2mat(T_sim2);

% 指标计算
disp('…………BiTCN-LSTM训练集误差指标…………')
[mae1,rmse1,mape1,error1]=calc_error(T_train1,T_sim1');
fprintf('\n')
 

3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]孔繁苗.分钟级风电功率多步预测技术研究[D].内蒙古科技大学,2022.

[2]李大舟,于沛,高巍,等.基于社交媒体文本信息的金融时序预测[J].计算机工程与设计, 2021.DOI:10.16208/j.issn1000-7024.2021.08.018.

4 Matlab代码、数据

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

你可能感兴趣的:(lstm,matlab,人工智能)