1 简介
为了解决短期负荷预测精度低,准确性差等问题,采用一种使用鲸鱼优化算法(WOA)优化长短期记忆网络(LSTM)的短期负荷预测模型.针对模型的参数较难选择的问题,利用WOA对LSTM模型参数寻优.通过实例验证了预测模型的有效性,结果表明WOA-LSTM比LSTM模型具有更好的效果.
1.1 鲸鱼优化算法(Whale Optimization Algorithm,WOA)
1.2 LSTM模型
1.3 基于鲸鱼算法优化LSTM流程
2 部分代码
%% clc clear all close all %加载数据,重构为行向量 num=100; x=1:num; db=0.1; data =abs(0.5.*sin(x)+0.5.*cos(x)+db*rand(1,num)); data1 =data;%把你的负荷数据赋值给data变量就可以了。 %data是行向量。要是还不明白,就留言吧。 %% %序列的前 90% 用于训练,后 10% 用于测试 numTimeStepsTrain = floor(0.9*numel(data)); dataTrain = data(1:numTimeStepsTrain+1); dataTest = data1(numTimeStepsTrain+1:end); %数据预处理,将训练数据标准化为具有零均值和单位方差。 mu = mean(dataTrain); sig = std(dataTrain); dataTrainStandardized = dataTrain; %输入LSTM的时间序列交替一个时间步 XTrain = dataTrainStandardized(1:end-1); YTrain = dataTrainStandardized(2:end); %% %创建LSTM回归网络,指定LSTM层的隐含单元个数96*3 %序列预测,因此,输入一维,输出一维 numFeatures = 1; numResponses = 1; numHiddenUnits = 20*3; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits) fullyConnectedLayer(numResponses) regressionLayer]; %% WOA lb=0.001;%学习率下限 ub=0.1;%学习率上限 % Main loop while t<Max_iter t end %将预测值与测试数据进行比较。 figure(1) subplot(2,1,1) plot(YTest,'gs-','LineWidth',2) hold on plot(YPred_best,'ro-','LineWidth',2) hold off legend('观测值','预测值') xlabel('时间') ylabel('数据值') title('Forecast with Updates') subplot(2,1,2) stem(YPred_best - YTest) xlabel('时间') ylabel('均方差值') title('均方差图 ' ) figure(2) plot(dataTrain(1:end-1)) hold on idx = numTimeStepsTrain:(numTimeStepsTrain+numTimeStepsTest); plot(idx,[data(numTimeStepsTrain) YPred_best],'.-') hold off xlabel('时间') ylabel('数据值') title('预测图') legend('观测值', '预测值') figure(3) plot(1:Max_iter,Convergence_curve,'bo-'); hold on; title('鲸鱼优化后Error-Cost曲线图'); xlabel('迭代次数') ylabel('误差适应度值')
3 仿真结果
4 参考文献
[1]曹开田, 高莘尧, 姜梦彦. 一种基于鲸鱼算法优化LSTM的频谱感知方法:.
[2]刘昊东, 邹必昌. 基于鲸鱼算法优化长短期记忆网络的短期负荷预测[J]. 电子世界(3):2.