• 多输入多输出 | Matlab实现GWO-BP灰狼算法优化BP神经网络多输入多输出预测


    多输入多输出 | Matlab实现GWO-BP灰狼算法优化BP神经网络多输入多输出预测

    预测效果

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

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

    基本介绍

    多输入多输出 | Matlab实现GWO-BP灰狼算法优化BP神经网络多输入多输出预测
    1.data为数据集,10个输入特征,3个输出变量。
    2.main.m为主程序文件。
    3.命令窗口输出MBE、MAE和R2,可在下载区获取数据和程序内容。

    程序设计

    • 完整程序和数据下载方式:私信博主回复Matlab实现GWO-BP灰狼算法优化BP神经网络多输入多输出预测
    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
    
        % 线性权重递减
        wa = 2 - iter * ((2) / Max_iteration);    
    
        % 更新搜索狼群的位置
        for i = 1 : size(Positions, 1)      % 遍历每个狼
            for j = 1 : size(Positions, 2)  % 遍历每个维度
    
                % 包围猎物,位置更新
                r1 = rand; % r1 is a random number in [0,1]
                r2 = rand; % r2 is a random number in [0,1]
    
                A1 = 2 * wa * r1 - wa;   % 计算系数A,Equation (3.3)
                C1 = 2 * r2;             % 计算系数C,Equation (3.4)
    
                % Alpha 位置更新
                D_alpha = abs(C1 * Alpha_pos(j) - Positions(i, j));   % Equation (3.5)-part 1
                X1 = Alpha_pos(j) - A1 * D_alpha;                     % Equation (3.6)-part 1
    
                r1 = rand; % r1 is a random number in [0,1]
                r2 = rand; % r2 is a random number in [0,1]
    
                A2 = 2 * wa * r1 - wa;   % 计算系数A,Equation (3.3)
                C2 = 2 *r2;              % 计算系数C,Equation (3.4)
    
                % Beta 位置更新
                D_beta = abs(C2 * Beta_pos(j) - Positions(i, j));    % Equation (3.5)-part 2
                X2 = Beta_pos(j) - A2 * D_beta;                      % Equation (3.6)-part 2       
    
                r1 = rand;  % r1 is a random number in [0,1]
                r2 = rand;  % r2 is a random number in [0,1]
    
                A3 = 2 *wa * r1 - wa;     % 计算系数A,Equation (3.3)
                C3 = 2 *r2;               % 计算系数C,Equation (3.4)
    
                % Delta 位置更新
                D_delta = abs(C3 * Delta_pos(j) - Positions(i, j));   % Equation (3.5)-part 3
                X3 = Delta_pos(j) - A3 * D_delta;                     % Equation (3.5)-part 3
    
                % 位置更新
                Positions(i, j) = (X1 + X2 + X3) / 3;                 % Equation (3.7)
    
            end
        end
    
        % 更新迭代器
        iter = iter + 1;    
        Convergence_curve(iter) = Alpha_score;
        disp(['第',num2str(iter),'次迭代'])
        disp(['current iteration is: ',num2str(iter), ', best fitness is: ', num2str(Alpha_score)]);
    end
    
    %%  记录最佳参数
    % best_lr = Alpha_pos(1, 1);
    % best_hd = Alpha_pos(1, 2);
    % best_l2 = Alpha_pos(1, 3);
    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
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112

    往期精彩

    MATLAB实现RBF径向基神经网络多输入多输出预测
    MATLAB实现BP神经网络多输入多输出预测
    MATLAB实现DNN神经网络多输入多输出预测

    参考资料

    [1] https://blog.csdn.net/kjm13182345320/article/details/116377961
    [2] https://blog.csdn.net/kjm13182345320/article/details/127931217
    [3] https://blog.csdn.net/kjm13182345320/article/details/127894261

  • 相关阅读:
    【On Nacos】SpringCloud 方式使用 Nacos
    openharmony容器组件之Swiper
    RPG游戏-小地图系统(二)
    k8s--工作负载资源
    Lightroom“夏日清凉”调色思路
    准备创建独立站?2022年最新制作企业官网必看的网页设计全攻略
    【数据分享】2023年我国省市县三级的独角兽企业数量(Excel/Shp格式)
    操作系统学习笔记4 | CPU管理 && 多进程图像
    SpringCloudGateway--谓词(断言)
    【RF】射频集成电路与系统设计
  • 原文地址:https://blog.csdn.net/kjm13182345320/article/details/132957892