• 多维时序 | MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络)


    多维时序 | MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络)

    效果一览

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

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

    基本介绍

    1.MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络);
    2.运行环境为Matlab2018b;
    3.输入多个特征,输出单个变量,考虑历史特征的影响,多变量时间序列预测;
    4.data为数据集,GWO_BPNTS.m为主程序,运行即可,所有文件放在一个文件夹;
    5.命令窗口输出R2、MSE、MAE、MAPE和MBE多指标评价;

    程序设计

    • 完整程序和数据下载:私信博主回复MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络)
    %%  优化算法初始化
    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

    参考资料

    [1] https://blog.csdn.net/kjm13182345320/article/details/128163536?spm=1001.2014.3001.5502
    [2] https://blog.csdn.net/kjm13182345320/article/details/128151206?spm=1001.2014.3001.5502

  • 相关阅读:
    首个中文Stable Diffusion模型开源;TPU演进十年;18个PyTorch性能优化技巧 | AI系统前沿动态...
    第三章作业【数据库原理】
    vue文件、js文件外部导入js
    SpringMVC的架构有什么优势?——表单和数据校验(四)
    Java并发编程—java中守护线程和用户线程
    HarmonyOS网络管理开发—HTTP与WebSocket
    关于mysql自增列起始值与数据实际id不一致的问题
    【opencv】教程代码 —TrackingMotion 角点检测
    Maven项目管理工具基础以及下载安装
    java 业务幂等解决方案
  • 原文地址:https://blog.csdn.net/kjm13182345320/article/details/133323910