量子粒子群、时序预测一网打尽!量子粒子群QPSO、PSO、LSTM、GRU,超前24步回归预测;多图!实验足,直接运行!

文摘   教育   2024-11-03 09:06   江苏  
适用平台:Matlab2021及以上

本程序集合,图超多!对比实验充足!可以直接作为光伏、风速、发电功率预测的完整一章;
程序集合:https://mbd.pub/o/bread/ZZmUm5pu包含程序有:
  • 基于GRU的短期负荷功率预测
  • 基于LSTM短期功率预测
  • 基于PSO-GRU短期功率预测
  • 基于PSO-LSTM短期功率预测
  • 基于QPSO-GRU短期功率预测
  • 基于QPSO-LSTM短期功率预测

量子粒子群QPSO优化算法可以参考中文EI顶级期刊《中国电机工程学报》中的《基于 RFID 传感标签及 QPSO-RVM 的 变压器绕组故障在线诊断技术》和《高电压技术》中的《基于 QPSO-SVR 算法的SF6断路器触头烧蚀 状态评估》,程序注释清晰,干货满满,下面对程序做简要介绍。

子群优化PSO和量子粒子群QPSO的原理:

粒子群优化算法PSO:

简单来说,粒子群算法设计了一种无质量的粒子来模拟鸟群中的鸟,抽象成数学模型,每只鸟儿就是一个粒子,食物的位置也就是问题的最优解,鸟儿与食物的距离也即当前粒子的目标函数值。粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置,是很经典的启发式算法。
量子粒子群QPSO:
QPSO 算法将量子理论应用到粒子行为中,主要对 PSO 算法进行如下改进:

  • 创新点①:不再考虑粒子的移动速度,而根据量子粒子群的平均最优位置更新粒子的位置,因此粒子位置的更新与该粒子之前的运动没有任何关系,增加了粒子运动的随机性,避免了 PSO 算法容易陷入局部最优的问题,使得粒子可以更高效地搜索到全局最优解。

  • 创新点②:采用压缩扩张因子控制粒子位置的更新,增强了全局收敛能力。QPSO 算法的寻优能力优于PSO 算法。

长短期记忆网络 LSTM长短期记忆网络是一种循环神经网络(RNN)的变体,专门用于处理序列数据的建模。LSTM通过门控机制(输入门、遗忘门和输出门)来控制对过去信息的遗忘和记忆,从而有效地处理长序列依赖关系。在时序预测中,LSTM可以用于学习序列数据中的长期依赖关系,捕捉到序列中的时间演化模式。

门控循环单元网络GRU结构上GRU简化了LSTM的结构,它只有两个门:重置门和更新门。运作方式:重置门帮助模型决定过去的信息有多少需要忘记,更新门用于决定要从过去的隐藏状态保留多少信息。特点:GRU在参数数量上比LSTM少,通常计算上也更高效。回归预测上,GRU可以与LSTM达到相似的性能。相较于结构复杂的LSTMGRU通过简化结构提供了一种更高效的预测方案。

代码说明:我们利用粒子群PSO、量子粒子群QPSO同时对LSTM和GRU中的2层神经元个数、学习率、最大迭代次数这四个参数进行优化,减少人为调参给模型带来的误差。构成GRU、LSTM、PSO-GRU、PSO-LSTM、QPSO-GRU、QPSO-LSTM六个模型。
功能:

1多变量特征输入,单序列变量输出,输入前一天的功率出力和预测天的气象特征,实现后一天的预测,超前24步预测。

2通过PSO、QPSO优化算法2层神经元个数学习率、最大迭代次数这四个参数,以最小MSE为目标函数。

3测试对比图;适应度曲线及各超参数的寻优过程变化图。

4提供MAPERMSEMAE、R²等评价指标展示。

适用领域:
风速预测、光伏功率预测、发电功率预测、负荷预测碳价预测等多种应用。
数据集格式:
浙江某地区的功率出力数据,前一天5个气象特征、24h的功率出力、预测天的5个气象特征,输出为预测天的24小时的负荷,也就是34×24输入,1×24输出。
以下是程序的输出结果:

PSO-GRU和GRU:

QPSO-GRU:

PSO-LSTM,LSTM
QPSO-LSTM:
部分代码:
%% 利用优化得到的参数重新训练GRUtrain = 0;                                        % 是否重新训练if train == 1    rng(0)                                        % 设置随机数种子    numFeatures = size(XTrain, 1);                % 输入特征数量    numResponses = size(YTrain, 1);               % 输出特征数量    miniBatchSize = 16;                           % 批处理大小    numHiddenUnits1 = x(1);                       % 第一个GRU层的隐藏单元数量    numHiddenUnits2 = x(2);                       % 第二个GRU层的隐藏单元数量    maxEpochs = x(3);                             % 最大迭代次数    learning_rate = x(4);                         % 学习率        %% QPSO优化后,构建新的GRU模型,组成QPSO-GRU    layers = [ ...        sequenceInputLayer(numFeatures)           % 序列输入层        bilstmLayer(numHiddenUnits1)              % 第一个GRU层        bilstmLayer(numHiddenUnits2)              % 第二个GRU层        selfAttentionLayer(1,32);                 % 多头自注意力机制层Attention        fullyConnectedLayer(numResponses)         % 全连接层        regressionLayer];                         % 回归层        %% 训练选项    options = trainingOptions('adam', ...         % 训练选项配置        'MaxEpochs', maxEpochs, ...               % 最大迭代次数        'MiniBatchSize', miniBatchSize, ...       % 小批量大小        'InitialLearnRate', learning_rate, ...    % 初始学习率        'GradientThreshold', 1, ...               % 梯度阈值        'miniBatchSize',16,...                    % 批处理大小        'Shuffle', 'every-epoch', ...             % 每轮迭代时数据洗牌        'Verbose', true, ...                      % 显示详细信息        'Plots', 'training-progress');            % 显示训练进度图    net = trainNetwork(XTrain, YTrain, layers, options); % 训练BiLSTM网络    save 结果保存/net_qpso_gru net                % 保存训练好的网络else    load 结果保存/net_qpso_gru                    % 加载已训练好的网络end
部分图片来源于网络,侵权联系删除!

完整代码:https://mbd.pub/o/bread/ZZmUm5pu

欢迎感兴趣的小伙伴点击阅读原文上方链接获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~

创新优化及预测代码
免费分享研究理论及方法,基础代码资料,努力提供电力系统相关专业预测及优化研究领域的创新性代码,保质保量!面包多地址:https://mbd.pub/o/yc_yh/work
 最新文章