【预测】基于CNN-BiLSTM-Attention的光伏预测模型

01 基本信息

摘要: 为解决光伏功率输出受光照、温度、气象条件等因素影响导致的强波动性与时序依赖性问题,本文构建了CNN-BiLSTM-Attention(卷积神经网络-双向长短期记忆网络-注意力机制)融合预测模型。模型首先对光伏相关数据集(如历史功率、气象特征)进行预处理(划分训练/测试集、归一化、维度重塑),再通过CNN层提取光伏数据中的局部时空特征(如短期气象突变对功率的影响);引入SE(Squeeze-and-Excitation)通道注意力机制,对CNN提取的特征进行通道权重分配,强化关键特征(如光照强度特征)的贡献、抑制冗余信息;随后通过BiLSTM层捕捉光伏功率的长短期时序依赖关系(如日内功率变化趋势、多日周期规律);最终经全连接层与回归层输出光伏功率预测值。模型采用Adam优化器训练,以均方根误差(RMSE)、决定系数(R²)等为评价指标,实现对光伏功率的高精度预测,为光伏电站的功率调度与并网稳定提供支撑。程序运行环境: matlab2020+版本,注释清晰,效果好!数据: 光伏数据包括太阳辐照度、温度和出力数据

02 主要内容

2.1 CNN 层:提取局部时空特征

光伏功率受短期局部因素影响显著(如1小时内云层遮挡导致的功率骤降),CNN通过卷积核滑动实现局部特征提取------将输入特征(如光照、温度)映射为高维特征图,捕捉特征间的局部关联(如光照强度与功率的短期非线性关系)。卷积层的核心公式如下:

上式中,Y为输出特征图,X为输入特征图,σ为激活函数。

2.2 SE注意力机制:通道权重分配

CNN提取的64维特征通道中,不同通道对光伏功率的影响差异显著(如"光照强度通道"比"湿度通道"更重要)。SE(Squeeze-and-Excitation)注意力通过"压缩-激励"两步,为每个通道分配自适应权重,强化关键通道特征,抑制冗余信息,提升模型对重要特征的敏感度。

2.3 BiLSTM层:捕捉长短期时序依赖

光伏功率具有显著的时序连续性(如日内功率从低到高再到低的趋势、多日功率受天气周期影响的规律),LSTM(长短期记忆网络)通过"遗忘门、输入门、输出门"解决传统RNN的梯度消失问题,而BiLSTM同时从"前向时序"(过去→现在)和"反向时序"(未来→现在)学习依赖关系,更全面捕捉光伏功率的时序特征。

03 部分代码

.rtcContent { padding: 30px; } .lineNode {font-size: 10pt; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; }warning off % 关闭报警信息close all % 关闭开启的图窗clear % 清空变量clc % 清空命令行tic% restoredefaultpath%% 导入数据res = xlsread('data1.xlsx');%% 数据分析num_size = 720; % 训练集占数据集比例outdim = 1; % 最后一列为输出num_samples = size(res, 1); % 样本个数% res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)num_train_s = 720; % 训练集样本个数f_ = size(res, 2) - outdim; % 输入特征维度%% 划分训练集和测试集P_train = res(1: num_train_s, 1: f_)';T_train = res(1: num_train_s, f_ + 1: end)';M = size(P_train, 2);P_test = res(num_train_s + 1: end, 1: f_)';T_test = res(num_train_s + 1: end, f_ + 1: end)';N = size(P_test, 2);%% 数据归一化[p_train, ps_input] = mapminmax(P_train, 0, 1);p_test = mapminmax('apply', P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, 0, 1);t_test = mapminmax('apply', T_test, ps_output);%% 数据平铺% 将数据平铺成1维数据只是一种处理方式% 也可以平铺成2维数据,以及3维数据,需要修改对应模型结构% 但是应该始终和输入层数据结构保持一致p_train = double(reshape(p_train, f_, 1, 1, M));p_test = double(reshape(p_test , f_, 1, 1, N));t_train = double(t_train)';t_test = double(t_test )';

04 运行结果

优秀的预测代码能够帮文章增色不少,专门研究预测方向的同学可以研究此代码并开展对比分析,其他电力方向的同学可以在预测的基础上开展调度以及配置等研究

相关推荐
好汉学技术1 小时前
如何在 MATLAB 中绘制三维线图?
matlab
88号技师3 小时前
2026年3月一区SCI-B样条曲线优化算法B-spline curves optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
rit84324991 天前
有限元法求转子临界转速的MATLAB实现
开发语言·matlab
Matlab程序设计与单片机1 天前
【机器人最短路径规划】基于标准蚁群算法
matlab·蚁群算法·路径规划问题
Marye_爱吃樱桃1 天前
MATLAB R2024b的安装、简单设置——保姆级教程
开发语言·matlab
IT猿手1 天前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
Evand J2 天前
【MATLAB复现RRT(快速随机树)算法】用于二维平面上的无人车路径规划与避障,含性能分析与可视化
算法·matlab·平面·无人车·rrt·避障
s09071362 天前
【声纳成像】基于滑动子孔径与加权拼接的条带式多子阵SAS连续成像(MATLAB仿真)
开发语言·算法·matlab·合成孔径声呐·后向投影算法·条带拼接
IT猿手2 天前
基于 ZOH 离散化与增量 PID 的四旋翼无人机轨迹跟踪控制研究,MATLAB代码
开发语言·算法·matlab·无人机·动态路径规划·openclaw
IT猿手2 天前
基于控制障碍函数(Control Barrier Function, CBF)的无人机编队三维动态避障路径规划,MATLAB代码
开发语言·matlab·无人机·动态路径规划·无人机编队