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

2023-09-17 23:11:38

多输入多输出 | 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

往期精彩

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

更多推荐

新款 锐科达 SV-2102VP SIP广播音频模块 RTP流音频广播

新款锐科达SV-2102VPSIP广播音频模块RTP流音频广播SV-2102VP和SV-2103VP网络音频模块是一款通用的独立SIP音频功能模块,可以轻松地嵌入到OEM产品中。该模块对来自网络的SIP协议及RTP音频流进行编解码。本系列模块可以应用于以下领域:•各种商业网络音频流应用•网络报警器,网络播放器•用于寻呼

计算机视觉与深度学习-图像分割-视觉识别任务03-实例分割-【北邮鲁鹏】

目录参考定义MarkR-CNN结构思路MaskR-CNN训练阶段使用的Mask样例MaskR-CNN实例分割结果MaskR-CNN检测姿态参考论文题目:MaskR-CNN论文链接:论文下载论文代码:Facebook代码链接;Tensorflow版本代码链接;KerasandTensorFlow版本代码链接;MxNet版

docker day01

docker:是一个容器管理工具。podman,pouch,lxc,rkt,...2013开源--->iT福音--->2015~coreOs--->Redhat--->IBM什么是容器:生活中装东西的,比如水杯,碗,水缸,鱼缸,...在计算机中,容器装的就是文件,只不过这些文件是一类程序,包括该程序依赖的库文件。LIN

基于未知环境碰撞冲突预测的群机器人多目标搜索研究

源自:指挥与控制学报作者:边晓荟周少武张红强吴亮红王汐王茂刘朝华陈磊“人工智能技术与咨询”发布摘要群机器人在未知动态环境下进行多目标搜索时,存在碰撞预测和搜索效率不高等问题。提出了一种碰撞几何锥和改进惯性权重的粒子群优化算法相结合的多目标搜索策略。首先,根据静、动态威胁物的不同分别引入碰撞锥(CC)和速度障碍法(VO)

MySQL 自动根据年份动态创建范围分区

前言要在MySQL中按年对日期进行分区,可以使用自动递增存储过程的方式实现动态分区,它并没有像Oracle里面的**INTERVAL(numtoyminterval(1,‘year’))**方法。创建动态分区1.创建一个包含所有分区的表,并使用InnoDB存储引擎。例如,创建一个名为mytable的表。CREATETA

51单片机 LCD1602

LCD1602.H#ifndef__LCD1602_H__#define__LCD1602_H__//用户调用函数:voidLCD_Init();voidLCD_ShowChar(unsignedcharLine,unsignedcharColumn,charChar);voidLCD_ShowString(unsig

Python常用做题笔记

1列表/队列/堆栈构建列表:[]声明列表比list()方法效率高声明队列和堆栈:法1:使用[]/list()方法模拟法2:使用collections.deque双端队列:模拟队列append\popleft模拟堆栈append\popcollections.deque():声明双端队列,初始化传入可迭代对象就行,例如列

AI-Toolbox

集合你需要的所有AI工具。(GatheralltheAItoolsyouneed.)1.AI绘画工具(AIdrawingtool)Midjourney:目前最强的AI绘画工具。StableDiffusion:最强开源AI绘画工具。Civital:AI艺术共享平台。HuggingFace:开源SD模型下载。VEGA:国内

统计报告期节能率

声明本文是学习GB-T29314-2023电动机系统节能改造规范.而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们7综合评估7.1一般规定7.1.1电动机系统节能改造后,应对设备运行效果进行评估,改造后系统的生产效率和系统分界点指标应达到改造设计要求。7.1.2电动机系统改造后,应对与改造设备相关的

苏宁易购商品详情数据接口

苏宁易购商品详情数据接口采集方法如下:下载安装载图助手软件并打开苏宁易购平台,找到需要采集的商品类目。点击一个商品进入详情页,启用软件的批量下载功能并打开“自动粘贴网址”。复制商品上方的链接,链接会自动传送到首页的地址栏里。全部复制完成后,在选项中把“下载主图”、“同时下载视频”、“下载详情图”三项打勾。单击“立即下载

中移链交易模块介绍

中移链交易模块是中移链区块链系统的核心模块之一。它的主要作用是处理用户发起的交易请求,并将其打包成区块添加到区块链上。交易模块接收来自不同合约执行的指令,比如创建账号、转账、部署和执行智能合约等指令,并确保所有交易都是有效且合法的。与其他模块相比,交易模块的工作量较大,每秒需要高效地处理上千个交易请求。01交易的组件构

热文推荐