多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测


目录

  • 多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测
  • 预测效果
  • 基本介绍
  • 模型描述
  • 程序设计
  • 参考资料


预测效果

多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_多变量多步


多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_CNN-LSTM_02


多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_多变量多步_03

多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_多变量多步_04

基本介绍

MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量时间序列预测。在这项研究中,我们提出了一种人工大猩猩部队优化器 (GTO),设计用于时间序列分析的不断发展的卷积神经网络-长短期记忆 (CNN-LSTM) 网络。

多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_卷积长短期记忆神经网络_05

模型描述

提出了一种用于时间序列分析的混合 CNN-LSTM 网络。 CNN 与 LSTM 集成,通过保留序列数据中嵌入的有效确定性和随机趋势,自动构建准确且稳健的特征表示,用到卷积,激活,池化,学习,全连接层等。 为了克服局部最优解停滞的可能性和经典算法收敛速度慢的问题,新提出人工大猩猩部队优化器具有独特的搜索机制。 它们包括用于动态搜索区域调整的非线性探索方案, 随后使用建议的 GTO设计了不断发展的 CNN-LSTM 模型,其中网络拓扑和学习超参数针对时间序列预测和分类任务进行了优化。 使用基准CNN-LSTM 进行评估,所提出的 GTO优化的 CNN-LSTM 模型产生的结果优于基准CNN-LSTM的结果。 与基线方法相比,由所提出的 GTO-CNN-LSTM网络提供了更好的表示能力,不仅可以捕获重要的特征交互,还可以将复杂的依赖关系封装在复杂的时间上下文中,以执行时间序列任务。

多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_CNN-LSTM_06


多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_时间序列预测_07

多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_多变量多步_08


多维时序 | MATLAB实现GTO-CNN-LSTM人工大猩猩部队优化卷积长短期记忆神经网络多变量多步时间序列预测_多变量多步_09

程序设计

  • 完整源码和数据私信博主获取或同等价值程序兑换获取。
% 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;