Press "Enter" to skip to content

MATLAB人工大猩猩部队GTO优化CNN-LSTM用于多变量负荷预测

基于MATLAB2020b的深度学习框架,提出了一种基于CNN-LSTM的多变量电力负荷预测方法,该方法将历史负荷与气象数据作为输入,输出一天96个时刻负荷值,建模学习特征内部动态变化规律,即多变量输入多输出模型。同时,针对该模型超参数选择困难的问题,提出利用人工大猩猩部队GTO算法实现该模型超参数的优化选择。

 

1.CNN-LSTM

 

MATLAB2020b自带的深度学习框架,其中会用到convolution2dLayer,sequenceFoldingLayer,reluLayer,averagePooling2dLayer,lstmLayer,fullyConnectedLayer等。

 

需要的函数主要 参考这里 ,据此我们建立CNN-LSTM模型如下:

 

 

2.人工大猩猩部队优化算法

 

原理参考这里。

 

 

3.优化CNN-LSTM超参数

 

从1中的网络结构图我们看到CNN-LSTM含两个卷积层,两个池化层,一个lstm层,一个全连接层,这些层的超参数是需要手动设置的,以及学习、训练次数、batchsize等,共有10来个参数,如何进行选择是不易的,因此采用优化算法进行优化选择。

 

GTO优化问题是对适应度函数求极大值或极小值的问题,本文以最小化CNN-LSTM网络期望输出与实际输出之间的均方差为适应度函数,即找到一组网络超参数,使得 CNN-LSTM的误差最小。 GTO优化CNN-LSTM,分为GTO部分、CNN-LSTM部分和数据部分。其中,CNN-LSTM部分首先根据 GTO传入的参数进行解码,获得所需超参数,然后利用数据部分传入的训练集进行网络训练,最后对验证集进行预测,获得实际输出值与期望输出值的误差均方差,并将均方差作为适应度值返回给GTO部分。GTO部分根据适应度值进行优化,实现种群与全局最优解的更新。 通过该方法,最终可获得优化的网络超参数。

 

4.结果

 

数据为2016负荷预测竞赛数据,采用2012年数据,进行滚动预测建模,多变量输入多输出。

 

data=xlsread('电荷数据.csv','B2:CX376');
%负荷数据--每天96个负荷值
%气象数据 最高温度℃最低温度℃ 平均温度℃ 相对湿度(平均) 降雨量(mm)
power=data(:,1:96);
weather=data(:,97:end);
% 归一化 或者 标准化 看哪个效果好
method=@mapminmax;%  mapstd mapminmax
[x1,mappingx1]=method(power');
[x2,mappingx2]=method(weather');
data=[x1' x2'];
% 前steps天steps*101 为输入,来预测未来一天的96负荷值 为输出
steps=10;
samples=size(data,1)-steps;%样本数
for i=1:samples
    input{i,:}=data(i:i+steps-1,:);
    output(i,:)=data(i+steps,1:96);
end

 

4.1 CNN-LSTM

 

 

4.2 GTO优化CNN-LSTM。

 

GTO找到一组网络超参数,使得 CNN-LSTM的误差最小,主要优化的超参数是:学习率,训练次数,batchsize,卷积层1的核数量、大小,池化层1的核大小,卷积层2的核数量、大小,池化层2的核大小,lstm层与全连接隐含层的节点数,共11个参数,适应度曲线为:

 

 

显示在第6次优化的时候,找到最优解,对应的11个参数分别是:

 

 

利用该超参数进行建模,结果为:

 

 

4.3 各算法结果对比

 

为了方便看,我们只画出最后两天的值,如图

 

 

5 更多

 

完整代码见评论区我的评论。后续将会推出粒子群、遗传、灰狼、浮游、阿基米德、算术优化、麻雀优化等,新旧算法都有。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注