• C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测


    C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

    效果一览

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    基本介绍

    1.Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测(完整源码和数据),优化学习率,BiGRU的神经元个数,滤波器个数, 正则化参数;
    2.输入多个特征,输出单个变量,回归预测,自注意力机制层,运行环境matlab2023及以上;
    3.命令窗口输出R2、MAE、MAPE、 RMSE多指标评价;
    4.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。

    在这里插入图片描述

    程序设计

    • 完整源码和数据获取方式私信博主回复Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测
    %%  清空环境变量
    close all               % 关闭开启的图窗
    clear                   % 清空变量
    clc                     % 清空命令行
    warning off             % 关闭报警信息
    %% 导入数据
    res = xlsread('data.xlsx');
    
    %%  数据分析
    num_size = 0.7;                              % 训练集占数据集比例
    outdim = 1;                                  % 最后一列为输出
    num_samples = size(res, 1);                  % 样本个数
    res = res(randperm(num_samples), :);         % 打乱数据集(不希望打乱时,注释该行)
    num_train_s = round(num_size * num_samples); % 训练集样本个数
    f_ = size(res, 2) - outdim;                  % 输入特征维度
    
    %%  划分训练集和测试集
    P_train = res(1: num_train_s, 1: f_)';
    T_train = res(1: num_train_s, f_ + 1: end)';
    M = size(P_train, 2);
    
    P_test = res(num_train_s + 1: end, 1: f_)';
    T_test = res(num_train_s + 1: end, f_ + 1: end)';
    N = size(P_test, 2);
    
    %%  数据归一化
    [p_train, ps_input] = mapminmax(P_train, 0, 1);
    p_test = mapminmax('apply', P_test, ps_input);
    
    [t_train, ps_output] = mapminmax(T_train, 0, 1);
    t_test = mapminmax('apply', T_test, ps_output);
    
    %%  格式转换
    for i = 1 : M 
        vp_train{i, 1} = p_train(:, i);
        vt_train{i, 1} = t_train(:, i);
    end
    
    for i = 1 : N 
        vp_test{i, 1} = p_test(:, i);
        vt_test{i, 1} = t_test(:, i);
    end
    
    disp('程序运行时间较长,需迭代popsize*maxgen次!可自行调整运行参数')
    
    function [Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)
    
    %%  优化算法初始化
    Alpha_pos = zeros(1, dim);  % 初始化Alpha狼的位置
    Alpha_score = inf;          % 初始化Alpha狼的目标函数值,将其更改为-inf以解决最大化问题
    
    Beta_pos = zeros(1, dim);   % 初始化Beta狼的位置
    Beta_score = inf;           % 初始化Beta狼的目标函数值 ,将其更改为-inf以解决最大化问题
    
    Delta_pos = zeros(1, dim);  % 初始化Delta狼的位置
    Delta_score = inf;          % 初始化Delta狼的目标函数值,将其更改为-inf以解决最大化问题
    
    %%  初始化搜索狼群的位置
    Positions = initialization(SearchAgents_no, dim, ub, lb);
    
    %%  用于记录迭代曲线
    Convergence_curve = zeros(1, Max_iteration);
    %%  循环计数器
    iter = 0;
    
    %%  优化算法主循环
    while iter < Max_iteration           % 对迭代次数循环
        for i = 1 : size(Positions, 1)   % 遍历每个狼
    
            % 返回超出搜索空间边界的搜索狼群
            % 若搜索位置超过了搜索空间,需要重新回到搜索空间
            Flag4ub = Positions(i, :) > ub;
            Flag4lb = Positions(i, :) < lb;
    
            % 若狼的位置在最大值和最小值之间,则位置不需要调整,若超出最大值,最回到最大值边界
            % 若超出最小值,最回答最小值边界
            Positions(i, :) = (Positions(i, :) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;   
    
            % 计算适应度函数值
    %         Positions(i, 2) = round(Positions(i, 2));
    %         fitness = fical(Positions(i, :));
              fitness = fobj(Positions(i, :));
            % 更新 Alpha, Beta, Delta
            if fitness < Alpha_score           % 如果目标函数值小于Alpha狼的目标函数值
                Alpha_score = fitness;         % 则将Alpha狼的目标函数值更新为最优目标函数值
                Alpha_pos = Positions(i, :);   % 同时将Alpha狼的位置更新为最优位置
            end
    
            if fitness > Alpha_score && fitness < Beta_score   % 如果目标函数值介于于Alpha狼和Beta狼的目标函数值之间
                Beta_score = fitness;                          % 则将Beta狼的目标函数值更新为最优目标函数值
                Beta_pos = Positions(i, :);                    % 同时更新Beta狼的位置
            end
    
            if fitness > Alpha_score && fitness > Beta_score && fitness < Delta_score  % 如果目标函数值介于于Beta狼和Delta狼的目标函数值之间
                Delta_score = fitness;                                                 % 则将Delta狼的目标函数值更新为最优目标函数值
                Delta_pos = Positions(i, :);                                           % 同时更新Delta狼的位置
            end
    
        end
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100

    参考资料

    [1] https://blog.csdn.net/kjm13182345320/article/details/129215161
    [2] https://blog.csdn.net/kjm13182345320/article/details/128105718

  • 相关阅读:
    【设计模式】Java设计模式 - 外观模式
    TI/德州仪器 CSD86350Q5D 同步降压 集成电路
    uniapp H5微信公众号跳转小程序 vue项目
    接口测试 - 从0不到1的心路历程
    Java分布式ID
    【OpenCV】Chapter1.图像的基本操作
    二进制搭建及高可用 Kubernetes v1.20
    计算机毕业设计python基于django的少儿编程线上教育系统
    【论文阅读】基于卷积神经的端到端无监督变形图像配准
    你的团队实现需求可追溯性还缺少什么?
  • 原文地址:https://blog.csdn.net/kjm13182345320/article/details/137296103