【预测】基于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 运行结果

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

相关推荐
彬鸿科技11 小时前
bhSDR Studio/Matlab入门指南(十一):AI数据集采集实验界面全解析
人工智能·matlab·软件定义无线电
yuan1999716 小时前
基于 MATLAB PSO 工具箱的函数寻优算法
开发语言·算法·matlab
wearegogog12318 小时前
基于MATLAB实现雷达RCS Swerling模型
开发语言·matlab
强盛机器学习~20 小时前
2026热门方向!基于强化学习的多无人机移动边缘计算与路径规划研究(完整代码&数据)
人工智能·matlab·无人机·边缘计算·强化学习·无人机路径规划
nwsuaf_huasir21 小时前
哈工大latex模板学位论文参考文献引用方法
matlab
机器学习之心1 天前
BiLSTM-BP加权组合模型回归预测:MATLAB实现与三模型对比分析
matlab·回归·bilstm-bp
吃好睡好便好2 天前
矩阵的乘法运算
数据结构·人工智能·学习·线性代数·算法·matlab·矩阵
listhi5202 天前
基于MATLAB的自适应粒子群算法(APSO)实现大规模分类特征选择
算法·matlab·分类
可编程芯片开发2 天前
基于PSO粒子群优化的配电网可靠性指标matlab仿真
matlab·pso粒子群优化·配电网可靠性
yu85939582 天前
基于MATLAB的层合板等效模量及极限强度计算实现
开发语言·matlab