基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

47 阅读3分钟

1.算法运行效果图预览

(完整程序运行后无水印)

1.jpeg

2.jpeg

3.jpeg

4.jpeg

5.jpeg

6.jpeg

2.算法运行软件版本

matlab2022a

 

3.部分核心程序

(完整版代码包含操作步骤视频) `for t=1:Iters

t

    for i=1:Num

        [pa(i)]  = func_obj(xwoa(i,:));

        Fitout   = pa(i);

        %更新

        if Fitout < woa_get 

            woa_get = Fitout;

            woa_idx = xwoa(i,:);

        end

    end

    %调整参数

    c1 = 2-t*((1)/300);

    c2 =-1+t*((-1)/300);

    %位置更新

    for i=1:Num

        r1         = rand();

        r2         = rand();

        K1         = 2c1r1-c1; 

        K2         = 2*r2;            

        l          =(c2-1)*rand + 1; 

        rand_flag  = rand();  

 

        for j=1:D

            if rand_flag<0.5  

               if abs(K1)>=1

                  RLidx    = floor(Num*rand()+1);

                  X_rand   = xwoa(RLidx, :);

                  D_X_rand = abs(K2*X_rand(j)-xwoa(i,j));

                  xwoa(i,j)= X_rand(j)-K1*D_X_rand;    

               else

                  D_Leader = abs(K2*woa_idx(j)-xwoa(i,j));

                  xwoa(i,j)= woa_idx(j)-K1*D_Leader;   

               end

            else

                distLeader = abs(woa_idx(j)-xwoa(i,j));

                xwoa(i,j)  = distLeaderexp(2l).*cos(l.2pi)+woa_idx(j);

            end

            %目标函数更新

            if xwoa(i,j)>=tmps(j,2)

               xwoa(i,j)=tmps(j,2);

            end

            if xwoa(i,j)<=tmps(j,1)

               xwoa(i,j)=tmps(j,1);

            end

        end

    end

end

 

...........................................................

 

%训练

[net,INFO] = trainNetwork(Ptrain_reshape, t_train, CNN_GRN_SAM, opt);

Rerr = INFO.TrainingRMSE;

Rlos = INFO.TrainingLoss;

figure

subplot(211)

plot(Rerr)

xlabel('迭代次数')

ylabel('RMSE')

grid on

   

subplot(212)

plot(Rlos)

xlabel('迭代次数')

ylabel('LOSS')

grid on

%数据预测

 

tmps   = predict(net, Ptest_reshape );

T_pred = mapminmax('reverse', tmps', vmax2);

figure

plot(T_test, 'r')

hold on

plot(T_pred, 'b-x')

legend('真实值', '预测值')

grid on

%%试集结果

figure

plotregression(T_test,T_pred,['回归']);

ERR=mean(abs(T_test-T_pred));

ERR

save R2.mat Rerr Rlos T_test T_pred ERR

186`

4.算法理论概述

       时间序列预测在众多领域中都具有重要的应用价值。传统的时间序列预测方法在处理复杂的非线性时间序列数据时往往表现出一定的局限性。近年来,深度学习技术的发展为时间序列预测提供了新的思路和方法。

 

网络结构

 

CNN-GRU-SAM 网络由卷积层、GRU 层、自注意力机制层和全连接层组成。

 

      卷积层用于提取时间序列数据的局部特征;GRU 层用于处理时间序列数据中的长期依赖关系;自注意力机制层用于捕捉时间序列数据中的全局特征;全连接层将提取到的特征进行整合,输出预测结果。

 

算法流程

 

        WOA即Whale Optimization Algorithm(鲸鱼优化算法),是一种受自然界鲸鱼捕食行为启发的生物启发式优化算法,由Eslam Mohamed于2016年提出,常用于解决各种连续优化问题,包括函数优化、机器学习参数调整、工程设计等领域中的复杂优化任务。

 

1.数据预处理:对时间序列数据进行归一化处理,使其取值范围在([0,1])之间。

 

2.初始化种群:随机生成一组种群,每个个体代表一组网络参数。

 

3.计算适应度值:对于每个个体,将其对应的网络参数代入 CNN-GRU-SAM 网络中,对训练数据进行预测,并计算预测结果与真实值之间的误差,作为该个体的适应度值。

 

4.更新个体信息。

 

5.重复步骤 3 和 4,直到满足停止条件(如达到最大迭代次数或适应度值小于某个阈值)。6.输出最优网络参数:将全局最优位置对应的网络参数作为最优网络参数,代入 CNN-GRU-SAM 网络中,对测试数据进行预测,得到最终的预测结果。