多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测
预测效果
![1](https://img-blog.csdnimg.cn/263f188ffb8b42fd89a4b32d11cb483d.png#pic_center)
![2](https://img-blog.csdnimg.cn/608e60a69f954bd0a41f1cfc17b5b4dd.png#pic_center)
![3](https://img-blog.csdnimg.cn/b8e297ee38c64086826a393645d7903a.png#pic_center)
![4](https://img-blog.csdnimg.cn/629716c355d7430bb43b888d21f80a5a.png#pic_center)
基本介绍
MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量时间序列预测。在这项研究中,我们提出了一种人工大猩猩部队优化器 (GTO),设计用于时间序列分析的不断发展的卷积神经网络-长短期记忆 (CNN-LSTM) 网络。
![0](https://img-blog.csdnimg.cn/300ae013361a44b2acf082c41bdf7a80.png)
模型描述
提出了一种用于时间序列分析的混合 CNN-LSTM 网络。 CNN 与 LSTM 集成,通过保留序列数据中嵌入的有效确定性和随机趋势,自动构建准确且稳健的特征表示,用到卷积,激活,池化,学习,全连接层等。 为了克服局部最优解停滞的可能性和经典算法收敛速度慢的问题,新提出人工大猩猩部队优化器具有独特的搜索机制。 它们包括用于动态搜索区域调整的非线性探索方案, 随后使用建议的 GTO设计了不断发展的 CNN-LSTM 模型,其中网络拓扑和学习超参数针对时间序列预测和分类任务进行了优化。 使用基准CNN-LSTM 进行评估,所提出的 GTO优化的 CNN-LSTM 模型产生的结果优于基准CNN-LSTM的结果。 与基线方法相比,由所提出的 GTO-CNN-LSTM网络提供了更好的表示能力,不仅可以捕获重要的特征交互,还可以将复杂的依赖关系封装在复杂的时间上下文中,以执行时间序列任务。
![5](https://img-blog.csdnimg.cn/a1544abbd6c944d690c9205c48cca9c7.png)
![6](https://img-blog.csdnimg.cn/d06e375554d547ba84a7f46110c31533.png)
![7](https://img-blog.csdnimg.cn/d5ceba6468f448f2ba66de7b2d0aa16c.png)
![8](https://img-blog.csdnimg.cn/2861bea9287b4140b6fe14e8ee464896.png#pic_center)
程序设计
- 完整源码和数据私信博主获取或同等价值程序兑换获取。
% initialize Silverback
Silverback=[];
Silverback_Score=inf;
%Initialize the first random population of Gorilla
X=initialization(pop_size,variables_no,upper_bound,lower_bound);
convergence_curve=zeros(max_iter,1);
for i=1:pop_size
Pop_Fit(i)=fobj(X(i,:));%#ok
if Pop_Fit(i)<Silverback_Score
Silverback_Score=Pop_Fit(i);
Silverback=X(i,:);
end
end
GX=X(:,:);
lb=ones(1,variables_no).*lower_bound;
ub=ones(1,variables_no).*upper_bound;
%% Controlling parameter
p=0.03;
Beta=3;
w=0.8;
%%Main loop
for It=1:max_iter
a=(cos(2*rand)+1)*(1-It/max_iter);
C=a*(2*rand-1);
%% Exploration:
for i=1:pop_size
if rand<p
GX(i,:) =(ub-lb)*rand+lb;
else
if rand>=0.5
Z = unifrnd(-a,a,1,variables_no);
H=Z.*X(i,:);
GX(i,:)=(rand-a)*X(randi([1,pop_size]),:)+C.*H;
else
GX(i,:)=X(i,:)-C.*(C*(X(i,:)- GX(randi([1,pop_size]),:))+rand*(X(i,:)-GX(randi([1,pop_size]),:))); %ok ok
end
end
end
GX = boundaryCheck(GX, lower_bound, upper_bound);
% Group formation operation
for i=1:pop_size
New_Fit= fobj(GX(i,:));
if New_Fit<Pop_Fit(i)
Pop_Fit(i)=New_Fit;
X(i,:)=GX(i,:);
end
if New_Fit<Silverback_Score
Silverback_Score=New_Fit;
Silverback=GX(i,:);
end
end
%% Exploitation:
for i=1:pop_size
if a>=w
g=2^C;
delta= (abs(mean(GX)).^g).^(1/g);
GX(i,:)=C*delta.*(X(i,:)-Silverback)+X(i,:);
else
if rand>=0.5
h=randn(1,variables_no);
else
h=randn(1,1);
end
r1=rand;
GX(i,:)= Silverback-(Silverback*(2*r1-1)-X(i,:)*(2*r1-1)).*(Beta*h);
end
end
GX = boundaryCheck(GX, lower_bound, upper_bound);
% Group formation operation
for i=1:pop_size
New_Fit= fobj(GX(i,:));
if New_Fit<Pop_Fit(i)
Pop_Fit(i)=New_Fit;
X(i,:)=GX(i,:);
end
if New_Fit<Silverback_Score
Silverback_Score=New_Fit;
Silverback=GX(i,:);
end
end
convergence_curve(It)=Silverback_Score;
参考资料
[1] https://blog.csdn.net/kjm13182345320/article/details/124942934?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/124940799?spm=1001.2014.3001.5502
[3] https://blog.csdn.net/kjm13182345320/article/details/124864369?spm=1001.2014.3001.5502