【GRU回归预测】基于麻雀算法优化门控循环单元SSA-GRU神经网络实现多输入单输出回归预测附matlab代码

news2024/11/14 10:34:35

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

软测量建模能够有效地解决生产过程中在线分析仪表测量滞后大、价格昂贵、维护保养复杂等问题。目前,神经网络是软测量建模的主要工具之一。而由于一般的循环神经网络在解决软测量问题时存在长范围依赖和梯度消失的问题,故本文采用门限循环单元神经网络(GRU)建立模型,其门限结构更少,训练效率更高。为进一步提高神经网络的预测精度,本文使用麻雀优化算法(SSA)来优化GRU的初始参数,并以此建立了SSA-GRU软测量模型。最后,将该方法应用于丙烯精馏塔中塔顶丙烷浓度的预测,实验结果表明,在动态建模方面SSA-GRU具有更高的预测精度。

⛄ 部分代码

function [fMin , bestX, Convergence_curve] = SSA(X, N, M, c, d, dim, fobj)

P_percent = 0.2;    % 发现者的种群规模占总种群规模的百分比

pNum = round(N*P_percent);    % 发现者数量20%

SD = pNum/2;      % 警戒者数量10%

ST = 0.8;           % 安全阈值

lb = c.*ones(1, dim);     % 下限

ub = d.*ones(1,dim);    % 上限

% 初始化

for i = 1:N

%     X(i, :) = lb + (ub - lb) .* rand(1, dim);

    fitness(i) = fobj(X(i, :));

end

pFit = fitness;

pX = X;                            % 与pFit相对应的个体最佳位置

[fMin, bestI] = min(fitness);      % fMin表示全局最优解

bestX = X(bestI, :);             % bestX表示全局最优位置

%% 迭代寻优

for t = 1 : M       

    [~, sortIndex] = sort(pFit);            % 排序

    

    [fmax, B] = max(pFit);

    worst = X(B, :);

    

    %% 发现者位置更新

    r2 = rand(1);

    if r2 < ST

        for i = 1:pNum      % Equation (3)

            r1 = rand(1);

            X(sortIndex(i), :) = pX(sortIndex(i), :)*exp(-(i)/(r1*M));

            X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

            fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

        end

    else

        for i = 1:pNum

            X(sortIndex(i), :) = pX(sortIndex(i), :)+randn(1)*ones(1, dim);

            X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

            fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

        end

    end

    

    [~, bestII] = min(fitness);

    bestXX = X(bestII, :);

    

    %% 跟随者位置更新

    for i = (pNum+1):N                     % Equation (4)

        A = floor(rand(1, dim)*2)*2-1;

        if i > N/2

            X(sortIndex(i), :) = randn(1)*exp((worst-pX(sortIndex(i), :))/(i)^2);

        else

            X(sortIndex(i), :) = bestXX+(abs((pX(sortIndex(i), :)-bestXX)))*(A'*(A*A')^(-1))*ones(1, dim);

        end

        X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

        fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

    end

    

    %% 警戒者位置更新

    c = randperm(numel(sortIndex));

    b = sortIndex(c(1:SD));

    for j = 1:length(b)      % Equation (5)

        if pFit(sortIndex(b(j))) > fMin

            X(sortIndex(b(j)), :) = bestX+(randn(1, dim)).*(abs((pX(sortIndex(b(j)), :) -bestX)));

        else

            X(sortIndex(b(j)), :) = pX(sortIndex(b(j)), :)+(2*rand(1)-1)*(abs(pX(sortIndex(b(j)), :)-worst))/(pFit(sortIndex(b(j)))-fmax+1e-50);

        end

        X(sortIndex(b(j)), :) = Bounds(X(sortIndex(b(j)), :), lb, ub);

        fitness(sortIndex(b(j))) = fobj(X(sortIndex(b(j)), :));

    end

    

    for i = 1:N

        % 更新个体最优

        if fitness(i) < pFit(i) 

            pFit(i) = fitness(i);

            pX(i, :) = X(i, :);

        end

        % 更新全局最优

        if pFit(i) < fMin

            fMin = pFit(i);

            bestX = pX(i, :);

        end

    end

    Convergence_curve(t) = fMin;

    

    disp(['SSA: At iteration ', num2str(t), ' ,the best fitness is ', num2str(fMin)]);

end

%% 边界处理

function s = Bounds(s, Lb, Ub)

% 下界

temp = s;

I = temp < Lb;

temp(I) = Lb(I);

% 上界

J = temp > Ub;

temp(J) = Ub(J);

% 更新

s = temp;

⛄ 运行结果

⛄ 参考文献

[1]殷礼胜, 刘攀, 孙双晨,等. 基于互补集合经验模态分解和改进麻雀搜索算法优化双向门控循环单元的交通流组合预测模型[J]. 电子与信息学报, 2022, 45:1-10.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java秋招被问到的八股文

投递的岗位是Java后端开发&#xff0c;八股文背了很多&#xff0c;现在面过三十场&#xff0c;做一个总结&#xff0c;整理出一些我确实被问到的问题。 该准备什么 首先是简历里的项目&#xff0c;一定要好好整理&#xff0c;项目的架构是怎样的&#xff0c;开发过程中遇到的…

国产实时操作系统+intel x86/龙芯平台超边缘计算机方案

引言 近年来&#xff0c;物联网、云计算、机器学习和网络安全等技术不断推动工业 4.0 的发展&#xff0c;“云边端” 的架构正逐步替代 “云管端”&#xff0c;边缘计算成为新时代许多领域转型的关键要素。以智能制造为例&#xff0c;不同于为互联网服务的 CDN 边缘计算技术&a…

Spring(二):Spring的创建和使用

目录一、创建Spring项目1.1 创建一个Maven项目1.2 添加Spring框架支持1.3 创建启动类二、使用Spring存储对象2.1 创建Bean2.2 将Bean注册到容器三、获取并使用Bean对象3.1 创建Spring的上下文3.2 从Spring上下文对象中取出Bean对象3.3 使用Bean一、创建Spring项目 1.1 创建一个…

传统数据治理的常见陷阱有哪些?

一、传统的数据治理 传统的数据治理是一种数据优先的治理方法。这种传统方法缺乏响应数据用户需求的流动性——或者在新法规出现时适应新法规的灵活性。传统方法概述角色、创建数据标准、分配责任并创建公司范围的数据策略。因为它强调对数据的控制&#xff0c;这种方法威胁工…

Java程序接入ChatGPT

Java程序接入ChatGPT0 前言1 还想体验的小伙伴可以试试2 Java接入前准备3 官方支持接入语言4 调用费用5 接口调用说明6 代码实现6.1 postman调用6.2 Java调用7 小结0 前言 之前文章中我们聊过怎么注册使用最近很火的ChatGPT&#xff1f;这期我们来看看怎么在Java中调用ChatGPT…

openssl aes加密例子

openssl OpenSSL 是一个安全套接字层密码库&#xff0c;囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议&#xff0c;并提供丰富的应用程序供测试或其它目的使用。 首先&#xff0c;要安装 openssl: centos命令: sudo yum install openssl-devel ubuntu命令&#x…

重学webpack系列(一) -- 前端模块化的演变历史

前言 任何事物的产生都有他的必然性&#xff0c;就像是冥冥之中注定了一样&#xff0c;在JavaScript刀耕火种的时代&#xff0c;前端是被定义为切图的一项工作&#xff0c;页面逻辑与交互全部由服务端工程师完成&#xff0c;前端开发几乎不受服务端开发重视&#xff0c;那时候…

免费教你如何设计商品主图,手把手教学!

好看的电商主图都是怎么设计出来的&#xff1f;有什么办法能快速设计出爆款的同款商品主图吗&#xff1f;跟着小编的教学步骤&#xff0c;教你轻松在线设计&#xff0c;不需要任何门槛也能掌握的电商设计工具&#xff0c;轻松搞定各种类型的商品主图&#xff0c;下面跟着小编的…

Spring BOOT 手写一个starter并使用这个starter

1、stater工程的命名 starter 是一个开箱即用的组件&#xff0c;减少不必要的重复代码&#xff0c;重复配置。例如&#xff0c;在mavne项目进行配置的时候&#xff0c;我们需要引用 spring-boot-starter-parent。 Spring 官方定义的 starter 通常命名遵循的格式为 spring-bo…

Linux——日志管理

基本介绍 日志文件是重要的系统信息文件&#xff0c;其中记录了许多重要的系统事件&#xff0c;包括信息的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等&#xff1b;日志对于安全来说也很重要&#xff0c;它记录了系统每天发生的各种事情&…

ASP.NET Core —选项系统

ASP.NET Core — 选项系统1. 选项2. 选项配置方式2.1 手动绑定2.2 依赖注入配置2.2.1 配置文件节点转换选项2.2.1 硬编码配置选项2.2.3 使用DI服务配置选项2.2.4 命名选项2.2.4 后期配置3. 使用3.1 IOptions<TOptions>3.2 IOptionsMonitor<TOptions>3.3 IOptionsSn…

零基础小白:为什么要学习编程?如何入门编程?!

这篇文章回答以下几个问题&#xff1a; ★我们为什么要学习编程&#xff1f; ★非计算机学生&#xff0c;如何对编程产生兴趣&#xff1f; ★零基础&#xff0c;如何入门编程&#xff1f; 第一个问题&#xff1a;我们为什么要学习编程&#xff1f; 如果说和编程有关的最经常收…

QT mysql 数据库的使用

1.首先我是用的是 网上的免费的mysql 数据库 &#xff0c; 1.申请步骤 2.链接 &#xff1a;SQLPub - 免费的MySQL数据库 2..测试数据库是否可以使用 头文件&#xff1a; #include <QSqlDatabase>//数据库 #include <QDebug>//输出 #include <QStringList&g…

【原创】Unity结合OpenAI官方api实现类似chatGPT的AI聊天机器人

一、什么是ChatGPT 最近chatGPT爆火&#xff0c;网络铺天盖地的各种文章视频&#xff0c;各种牛逼之声。倒算不上第一时间使用&#xff0c;发布隔了一周多&#xff0c;才从同事那里听说了这么个神奇的技术。这周阳了&#xff0c;持续发烧在家&#xff0c;忙着养病也没时间去了解…

[oeasy]python0030_设置路径_export_PATH_zsh_系统路径设置_export

放入路径 回忆上次内容 我们要在任意路径下直接执行 sleep.py 把 sleep.py 放在 /usr/bin/ 下面最终可以在任意位置执行程序sleep.py 但是 /usr/bin 里面放的一般都是二进制命令文件命令实在是太多太乱最终还是删除了sleep.py 我想 把宿主目录添加到系统变量 $PATH 中这样有可…

winform中使用SqlSugar和SQLite

winform虽然是老古董了&#xff0c;但是在开发桌面方面&#xff0c;还是得心应手的&#xff0c;比如开发一个小工具&#xff0c;小demo之类的。接下来&#xff0c;我们使用SqlSugar和SQLite数据库&#xff0c;在winform中运用。 1.首先建立一个程序 2.安装 System.Data.SQLite…

宿舍管理系统的设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 1登录&#xff1a;学生进行用户登陆密码核对&#xff0c;并可对自己的信息进行修改。 2.宿舍水电费管理&#xff1a;学生…

CloudCompare配置介绍

和前面系列博客一样&#xff0c;咱们还是从官网介绍先去了解新东西。官网网址如下&#xff1a; CloudCompare - Open Source project 顶部菜单中提供了下载&#xff0c;手册查找入口&#xff0c;github路径如下&#xff1a; GitHub - CloudCompare/CloudCompare: CloudCompar…

想辞职转行做程序员,需要学习哪些内容?

第一步&#xff0c;还是要明确具体的职业方向。 程序员是个统称&#xff0c;写代码的都叫程序员&#xff0c;但Java程序员&#xff0c;或是Python程序员&#xff0c;这才是职业。就好像很多大学生&#xff0c;专业是软件工程&#xff0c;这玩意儿并不是职业&#xff0c;学的内…

工作3年才8K,新招的测试一来就是14K,凭什么?

最近朋友给我分享了一个他公司发生的事&#xff0c;大概的内容呢&#xff1a;公司一位工作3年的测试工资还没有新人高&#xff0c;对此怨气不小&#xff0c;她来公司辛辛苦苦三年&#xff0c;三年内迟到次数都不超过5次&#xff0c;每天都是按时上下班&#xff0c;工作也按量完…