时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测

时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测

目录

    • 时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测
      • 预测效果
      • 基本介绍
      • 模型描述
      • 程序设计
      • 参考资料

预测效果

时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测_第1张图片
时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测_第2张图片
时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测_第3张图片
时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测_第4张图片

基本介绍

MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测,运行环境Matlab2020b及以上。优化正则化率、学习率、隐藏层单元数。

模型描述

智能优化算法是受到大自然生物的启发,模拟自然界中的一些事物或生物的行为规律,在解空间内进行全局寻优。近几年新的群智能算法不断涌现,专家学者们通过模拟各种生物,提出了一系列群智能优化算法。这其中薛建凯等于2020年提出的麻雀搜索优化算法(SSA)是一种较新颖的智能优化算法。将麻雀搜索算法与2010年以来提出的蝙蝠、灰狼、蜻蜓、鲸鱼、蝗虫优化算法进行对比,通过单模态和多模态的测试函数检验这几种优化算法的收敛速度,结果证明麻雀搜索算法处理单模态测试函数时,性能表现优越,其最优解和平均解都比其余五种算法要高,且后期收敛速度加快,在处理多模态测试函数时,其收敛速度也远高于其他算法,所以麻雀搜索算法相比其他算法更具有高性能的全局搜索能力。实验结果综合对比来看,2020年提出的麻雀搜索算法各方面的性能都远超其他五种优化算法,较近几年提出的群智能算法而言是一种性能比较优越的算法,其收敛速度,鲁棒性,稳定性都较高。

时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测_第5张图片
时序预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测_第6张图片

程序设计

  • 完整源码和数据私信博主获取或同等价值程序兑换获取。
%% SSA优化参数设置
SearchAgents = 5;     % 种群数量  
Max_iterations = 20 ; % 迭代次数
% 正则化参数、初始学习率、隐藏层单元数
lowerbound = [1e-3 0.001 10 ];%三个参数的下限
upperbound = [1e-1 0.01 100 ];%三个参数的上限
dimension = 3;%数量,即要优化的GRU参数个数
%% SSA优化GRU
%%  参数设置       
ST = 0.8;                    % 预警值
PD = 0.2;                    % 发现者的比列,剩下的是加入者
PDNumber = SearchAgents * PD;         % 发现者数量
SDNumber = SearchAgents - SearchAgents * PD;   % 意识到有危险麻雀数量

%%  判断优化参数个数
if(max(size(upperbound)) == 1)
   upperbound = upperbound .* ones(1, dimension);
   lowerbound = lowerbound .* ones(1, dimension);  
end

%%  种群初始化
pop_lsat = initialization(SearchAgents, dimension, upperbound, lowerbound);
pop_new  = pop_lsat;

%%  计算初始适应度值
fitness = zeros(1, SearchAgents);
for i = 1 : SearchAgents
   fitness(i) =  fun(pop_new(i,:),Train_xNorm,Train_yNorm,Test_xNorm,Test_y,yopt,k);
end

%%  得到全局最优适应度值
[fitness, index]= sort(fitness);
GBestF = fitness(1); 

%%  得到全局最优种群
for i = 1 : SearchAgents
    pop_new(i, :) = pop_lsat(index(i), :);
end

GBestX = pop_new(1, :);
X_new  = pop_new;

%%  优化算法
for i = 1: Max_iterations

   BestF = fitness(1);
   R2 = rand(1);

   for j = 1 : PDNumber
      if(R2 < ST)
          X_new(j, :) = pop_new(j, :) .* exp(-j / (rand(1) * Max_iterations));
      else
          X_new(j, :) = pop_new(j, :) + randn() * ones(1, dimension);
      end     
   end
   
   for j = PDNumber + 1 : SearchAgents
        if(j > (SearchAgents - PDNumber) / 2 + PDNumber)
          X_new(j, :) = randn() .* exp((pop_new(end, :) - pop_new(j, :)) / j^2);
        else
          A = ones(1, dimension);
          for a = 1 : dimension
              if(rand() > 0.5)
                A(a) = -1;
              end
          end
          AA = A' / (A * A');     
          X_new(j, :) = pop_new(1, :) + abs(pop_new(j, :) - pop_new(1, :)) .* AA';
       end
   end
   
   Temp = randperm(SearchAgents);
   SDchooseIndex = Temp(1 : SDNumber); 
   
   for j = 1 : SDNumber
       if(fitness(SDchooseIndex(j)) > BestF)
           X_new(SDchooseIndex(j), :) = pop_new(1, :) + randn() .* abs(pop_new(SDchooseIndex(j), :) - pop_new(1, :));
       elseif(fitness(SDchooseIndex(j)) == BestF)
           K = 2 * rand() -1;
           X_new(SDchooseIndex(j), :) = pop_new(SDchooseIndex(j), :) + K .* (abs(pop_new(SDchooseIndex(j), :) - ...
               pop_new(end, :)) ./ (fitness(SDchooseIndex(j)) - fitness(end) + 10^-8));
       end
   end

%%  边界控制
   for j = 1 : SearchAgents
       for a = 1 : dimension
           if(X_new(j, a) > upperbound(a))
              X_new(j, a) = upperbound(a);
           end
           if(X_new(j, a) < lowerbound(a))
              X_new(j, a) = lowerbound(a);
           end
       end
   end 

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/128564123?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501

你可能感兴趣的:(时序预测,SSA-CNN-GRU,麻雀算法优化,卷积门控循环单元,时间序列预测)