SCI一区级 | Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测
目录
- SCI一区级 | Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测
- 预测效果
- 基本介绍
- 程序设计
- 参考资料
预测效果
基本介绍
1.Matlab实现GWO-CNN-LSTM-selfAttention灰狼算法优化卷积长短期记忆神经网络融合自注意力机制多变量多步时间序列预测,灰狼算法优化学习率,卷积核大小,神经元个数,以最小MAPE为目标函数;
自注意力层 (Self-Attention):Self-Attention自注意力机制是一种用于模型关注输入序列中不同位置相关性的机制。它通过计算每个位置与其他位置之间的注意力权重,进而对输入序列进行加权求和。自注意力能够帮助模型在处理序列数据时,对不同位置的信息进行适当的加权,从而更好地捕捉序列中的关键信息。在时序预测任务中,自注意力机制可以用于对序列中不同时间步之间的相关性进行建模。
2.运行环境为Matlab2023a及以上,提供损失、RMSE迭代变化极坐标图;网络的特征可视化图;测试对比图;适应度曲线(若首轮精度最高,则适应度曲线为水平直线);
3…excel数据集(负荷数据集),输入多个特征,输出单个变量,考虑历史特征的影响,多变量多步时间序列预测(多步预测即预测下一天96个时间点),main.m为主程序,运行即可,所有文件放在一个文件夹;
4.命令窗口输出SSE、RMSE、MSE、MAE、MAPE、R2、r多指标评价,适用领域:
负荷预测、风速预测、光伏功率预测、发电功率预测、碳价预测等多种应用。
程序设计
- 完整程序和数据获取方式1:同等价值程序兑换;
- 完整程序和数据获取方式2:私信博主回复Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测获取。
%---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 主循环
while l < Max_iter
for i = 1:size(Positions, 1)
% 将超出搜索空间边界的搜索代理放回搜索空间内
Flag4ub = Positions(i, :) > ub;
Flag4lb = Positions(i, :) < lb;
Positions(i, :) = (Positions(i, :) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;
% 计算每个搜索个体的目标函数值
[fitness,Value,Net,Info] = fobj(Positions(i, :));
% 更新Alpha、Beta和Delta的位置向量
if fitness < Alpha_score
Alpha_score = fitness; % 更新Alpha的得分
Alpha_pos = Positions(i, :); % 更新Alpha的位置向量
bestPred = Value;
bestNet = Net;
bestInfo = Info;
end
if fitness > Alpha_score && fitness < Beta_score
Beta_score = fitness; % 更新Beta的得分
Beta_pos = Positions(i, :); % 更新Beta的位置向量
end
if fitness > Alpha_score && fitness > Beta_score && fitness < Delta_score
Delta_score = fitness; % 更新Delta的得分
Delta_pos = Positions(i, :); % 更新Delta的位置向量
end
end
a = 2 - l * ((2) / Max_iter); % a从2线性减少到0
% 更新搜索个体的位置向量
for i = 1:size(Positions, 1)
for j = 1:size(Positions, 2)
r1 = rand(); % r1是[0,1]区间的随机数
r2 = rand(); % r2是[0,1]区间的随机数
A1 = 2 * a * r1 - a; % 参考文献中的公式(3.3)
C1 = 2 * r2; % 参考文献中的公式(3.4)
D_alpha = abs(C1 * Alpha_pos(j) - Positions(i, j)); % 参考文献中的公式(3.5)-part 1
X1 = Alpha_pos(j) - A1 * D_alpha; % 参考文献中的公式(3.6)-part 1
r1 = rand();
r2 = rand();
A2 = 2 * a * r1 - a; % 参考文献中的公式(3.3)
C2 = 2 * r2; % 参考文献中的公式(3.4)
D_beta = abs(C2 * Beta_pos(j) - Positions(i, j)); % 参考文献中的公式(3.5)-part 2
X2 = Beta_pos(j) - A2 * D_beta; % 参考文献中的公式(3.6)-part 2
r1 = rand();
r2 = rand();
参考资料
[1] http://t.csdn.cn/pCWSp
[2] https://download.csdn.net/download/kjm13182345320/87568090?spm=1001.2014.3001.5501
[3] https://blog.csdn.net/kjm13182345320/article/details/129433463?spm=1001.2014.3001.5501