基于麻雀算法改进的BP神经网络客流量预测,SSA-BP

news2024/9/25 11:21:36

目录
背影
BP神经网络的原理
BP神经网络的定义
BP神经网络的基本结构
BP神经网络的神经元
BP神经网络的激活函数,
BP神经网络的传递函数
麻雀算法原理
麻雀算法主要参数
麻雀算法流程图
麻雀算法优化测试函数代码
基于麻雀算法改进的BP神经网络坑基监测
数据
matlab编程实现
效果图
结果分析
展望

背影

智能驾驶,智能出行是现代社会发展的趋势之一,其中,客量预测对智能出行至关重要,采用麻雀算法优化BP神经网络,解决了误差逆传播存在的收敛速度慢、全局范围搜索能力弱、容易陷入局部极小值等缺陷,同时建立了基于SSA-BP算法的客流量预测神经网络模型,通过仿真实验与传统BP算法进行对比,验证该算法兼顾神经网络学习速度、误差小、全局搜索能力客流量预测的要求。

BP神经网络的原理

BP神经网络的定义

人工神经网络无需事先确定输入输出之间映射关系的数学方程,仅通过自身的训练,学习某种规则,在给定输入值时得到最接近期望输出值的结果。作为一种智能信息处理系统,人工神经网络实现其功能的核心是算法。BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。

BP神经网络的基本结构

基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。

bp神经网络的神经元

神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
神经网络由多个神经元构成,下图就是单个神经元的图1所示:
在这里插入图片描述
。。。。。。。。。。。。。。。。。。。。。。。。图1 ,神经元模型

bp神经网络激活函数及公式

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/29edde342c3945939ad5945145ca8509.png在这里插入图片描述

BP神经网络传递函数及公式

图2是Sigmoid函数和双极S函数的图像,其中Sigmoid函数的图像区域是0到1,双极S函数的区间是正负1,归一化的时候要和传递函数的区域相对应,不然,可能效果不好
神经网络就是将许多个单一的神经元联结在一起,这样,一个神经元的输出就可以是另一个神经元的输入。
例如,下图就是一个简单的神经网络:在这里插入图片描述
在这里插入图片描述

麻雀算法SSA的原理

主要公式

在SSA中,具有较好适应度值的发现者在搜索过程中会优先获取食物。此外,因为发现者负责为整个麻雀种群寻找食物并为所有加入者提供觅食的方向。因此,发现者可以获得比加入者更大的觅食搜索范围。在每次迭代的过程中,发现者的位置更新描述如下:
在这里插入图片描述
其中,t代表当前迭代数,itermax是一个常数,表示最大的迭代次数。Xij表示第i个麻雀在第j维中的位置信息。α∈(0,1]是一个随机数。R2(R2∈[0,1])和ST(ST∈[0.5,1])分别表示预警值和安全值。Q是服从正态分布的随机数。L表示一个1×d的矩阵,其中该矩阵内每个元素全部为1。当R2< ST 时,这意味着此时的觅食环境周围没有捕食者,发现者可以执行广泛的搜索操作。当R2 ≥ ST,这表示种群中的一些麻雀已经发现了捕食者,并向种群中其它麻雀发出了警报,此时所有麻雀都需要迅速飞到其它安全的地方进行觅食。
加入者(追随者)的位置更新描述如下:
在这里插入图片描述

其中,Xp是目前发现者所占据的最优位置,Xworst则表示当前全局最差的位置。A表示一个1×d的矩阵,其中每个元素随机赋值为1或-1,并且A+=AT(AAT)-1。当i >n/2时,这表明,适应度值较低的第i个加入者没有获得食物,处于十分饥饿的状态,此时需要飞往其它地方觅食,以获得更多的能量。
当意识到危险时,麻雀种群会做出反捕食行为,其数学表达式如下:
在这里插入图片描述

其中,其中Xbest是当前的全局最优位置。β作为步长控制参数,是服从均值为0,方差为1的正态分布的随机数。K∈[-1,1]是一个随机数,fi则是当前麻雀个体的适应度值。fg和fw分别是当前全局最佳和最差的适应度值。ε是最小的常数,以避免分母出现零。
为简单起见,当fi >fg表示此时的麻雀正处于种群的边缘,极其容易受到捕食者的攻击。fi = fg时,这表明处于种群中间的麻雀意识到了危险,需要靠近其它的麻雀以此尽量减少它们被捕食的风险。K表示麻雀移动的方向同时也是步长控制参数。

麻雀算法SSA的主要参数:

一、种群个数popsize,既算法中麻雀的个数;
二、最大迭代次数maxgen,既算法迭代gen次后停止迭代;
三、种群维度dim,既需要优化的自变量个数;
四、种群位置pop,既每个麻雀的对应的自变量的值,一个麻雀对应一组自变量,相当于一个解;
五、发现者比例P_percent,既麻雀算法发现者占所有麻雀的比例;
六、安全值ST,既这意味着此时的觅食环境周围没有捕食者;

麻雀算法流程图

在这里插入图片描述

基于麻雀算法改进 的B神经网络客流量预测

神经网络参数

三层神经网络,传递函数logsig , tansig,训练函数自适应动量因子梯度下降函数,学习率0.1,学习目标0.001,最大迭代次数1000

麻雀算法的主要参数

maxgen=30; % 进化次数
sizepop=20; %种群规模
popmax=5;
popmin=-5;
P_percent = 0.2;

MATLAB编程代码

% 清空环境
clc
clear
close all
warning off
%读取数据
[num1 ,ax,ay]= xlsread(‘客流量.xls’);
num1(:,1) = [];
num = [];
for ii = 1:90
num = [num;num1(ii,:) num1(ii+1,2:end) num1(ii+1,1)];
end
m1 = 11;
n = randperm(length(num));
%节点个数
inputnum=m1;
hiddennum=10;
outputnum=1;
m = round(0.8*length(num));
n = randperm(length(num));
%训练数据和预测数据
input_train=num(n(1:m),1:m1)‘;
input_test=num(m+1:end,1:m1)’;
output_train=num(n(1:m),m1+1)‘;
output_test=num(m+1:end,m1+1)’;

%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);

%构建网络
% net=newff(inputn,outputn,hiddennum);
net = newff(minmax(inputn),[10,1],{‘logsig’,‘tansig’},‘traingdx’);
[BPoutput,errorb] = bpp(input_train,input_test,output_train,output_test);
% 参数初始化
dim=inputnumhiddennum+hiddennum+hiddennumoutputnum+outputnum;
maxgen=30; % 进化次数
sizepop=20; %种群规模

popmax=5;
popmin=-5;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
P_percent = 0.2; % The population size of producers accounts for “P_percent” percent of the total population size

pNum = round( sizepop * P_percent ); % The population size of the producers

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:sizepop
pop(i,:)=5*rands(1,dim);
% V(i,:)=rands(1,21);
fitness(i)=fun(pop(i,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pFit = fitness;
[ fMin, bestI ] = min( fitness ); % fMin denotes the global optimum fitness value
bestX = pop( bestI, : ); % bestX denotes the global optimum position corresponding to fMin

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%麻雀搜索算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for t = 1 : maxgen
[ ans, sortIndex ] = sort( pFit );% Sort.

[fmax,B]=max( pFit );
worse= pop(B,:);

r2=rand(1);
if(r2<0.8)

for i = 1 : pNum                                                   % Equation (3)
     r1=rand(1);
    pop( sortIndex( i ), : ) = pop( sortIndex( i ), : )*exp(-(i)/(r1*maxgen));
   
    fitness(sortIndex( i ))=fun(pop(sortIndex( i ),:),inputnum,hiddennum,outputnum,net,inputn,outputn); 
end

else
for i = 1 : pNum

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

fitness(sortIndex( i ))=fun(pop(sortIndex( i )😅,inputnum,hiddennum,outputnum,net,inputn,outputn);

end

end
[ fMMin, bestII ] = min( fitness );
bestXX = pop( bestII, : );
for i = ( pNum + 1 ) : sizepop % Equation (4)

     A=floor(rand(1,dim)*2)*2-1;
     
      if( i>(sizepop/2))
       pop( sortIndex(i ), : )=randn(1)*exp((worse-pop( sortIndex( i ), : ))/(i)^2);
      else
      pop( sortIndex( i ), : )=bestXX+(abs(( pop( sortIndex( i ), : )-bestXX)))*(A'*(A*A')^(-1))*ones(1,dim);  

     end  
    
    fitness(sortIndex( i ))=fun(pop(sortIndex( i ),:),inputnum,hiddennum,outputnum,net,inputn,outputn);

end
c=randperm(numel(sortIndex));
b=sortIndex(c(1:3));
for j = 1 : length(b) % Equation (5)

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

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

    else

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

end
   
   
   fitness(sortIndex( i ))=fun(pop(sortIndex( i ),:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i = 1 : sizepop
if ( fitness( i ) < pFit( i ) )
pFit( i ) = fitness( i );
pop(i,:) = pop(i,:);
end

    if( pFit( i ) < fMin )
       fMin= pFit( i );
        bestX =pop( i, : );
     
        
    end
end



yy(t)=fMin;    

end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 迭代寻优
x=bestX
%% 结果分析
plot(yy)
title(['适应度曲线 ’ ‘终止代数=’ num2str(maxgen)]);
xlabel(‘进化代数’);ylabel(‘适应度’);
%% 把最优初始阀值权值赋予网络预测
% %用麻雀搜索算法优化的BP网络进行值预测
w1=x(1:inputnumhiddennum);
B1=x(inputnum
hiddennum+1:inputnumhiddennum+hiddennum);
w2=x(inputnum
hiddennum+hiddennum+1:inputnumhiddennum+hiddennum+hiddennumoutputnum);
B2=x(inputnumhiddennum+hiddennum+hiddennumoutputnum+1:inputnumhiddennum+hiddennum+hiddennumoutputnum+outputnum);

net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2;

%% 训练
%网络进化参数
net.trainParam.epochs=5000;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00001;

%网络训练
[net,tr]=train(net,inputn,outputn);

%%预测
%数据归一化
inputn_test=mapminmax(‘apply’,input_test,inputps);
an=sim(net,inputn_test);
test_simu=mapminmax(‘reverse’,an,outputps);
error=test_simu-output_test;

figure
plot(test_simu,‘r-o’)
hold on
plot(BPoutput,‘b-s’)
hold on
plot(output_test,‘k-*’)
hold off
xlabel(‘样本’)
ylabel(‘土体倾斜’)

legend(‘ssa-bp’,‘bp’,‘实际值’)

figure
plot(error)
title(‘仿真预测误差’,‘fontsize’,12);
xlabel(‘仿真次数’,‘fontsize’,12);ylabel(‘误差百分值’,‘fontsize’,12);

效果图

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

结果分析

从效果图上看,麻雀算法改进的BP神经网络能够实现对客流量的预测,相对于BP神经网络,改进点BP神经网络预测准确率明显提高,,有疑问或者其他应用方面,欢迎大家扫描下面的二维码

展望

针对神经网络供工具箱,可以自己写函数的代入并原本的工具箱函数,可以有很多种改进方法

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

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

相关文章

Windows 11 安装 Docker Desktop

Windows 环境安装 WSL2 WSL 简介 WSL 全称是 Windows Subsystem for Linux &#xff0c;适用于 Linux 的 Windows 子系统&#xff0c;可让开发人员按原样运行 GNU/Linux 环境&#xff0c;包括大多数命令行工具、实用工具和应用程序&#xff0c;且不会产生传统虚拟机或双启动设…

低线城市外卖市场逐渐下沉,创业者如何有效开展本地外卖平台

近年来&#xff0c;我国网上外卖营业额不断上升&#xff0c;使我国餐饮业的比重越来越高。 随着外卖市场的下沉&#xff0c;低线城市的用户开始使用外卖平台 由于我国在线外卖行业逐渐成熟&#xff0c;一、二线主流市场逐渐饱和&#xff0c;外卖行业逐渐开始向低线城市发展&…

非标自动化设备远程监控解决方案

为了实现企业自动化生产&#xff0c;提高工作效率和稳定性&#xff0c;需对整个工厂进行远程监控和管理。 在工厂建立了一个远程监控系统&#xff0c;可以实现对工业自动化的设备状态进行远程实时监控&#xff0c;同时可以利用无线网络技术来实现对设备的数据采集和远程管理。 …

Guava ——Joiner和Splitter

大家好&#xff0c;这里是一口八宝周&#x1f44f;欢迎来到我的博客❤️一起交流学习 文章中有需要改进的地方请大佬们多多指点 谢谢&#x1f64f;在本篇文章中&#xff0c;我将用实例展示&#xff0c;如何使用Joiner将集合转换为 String &#xff0c;以及使用Splitter将 Strin…

如何使用EvilTree在文件中搜索正则或关键字匹配的内容

关于EvilTree EvilTree是一款功能强大的文件内容搜索工具&#xff0c;该工具基于经典的“tree”命令实现其功能&#xff0c;本质上来说它就是“tree”命令的一个独立Python 3重制版。但EvilTree还增加了在文件中搜索用户提供的关键字或正则表达式的额外功能&#xff0c;而且还…

Android性能优化系列篇:弱网优化

弱网优化1、Serializable原理通常我们使用Java的序列化与反序列化时&#xff0c;只需要将类实现Serializable接口即可&#xff0c;剩下的事情就交给了jdk。今天我们就来探究一下&#xff0c;Java序列化是怎么实现的&#xff0c;然后探讨一下几个常见的集合类&#xff0c;他们是…

sklearn中的数据预处理和特征工程

目录 一.数据挖掘的五大流程 1. 获取数据 2. 数据预处理 3. 特征工程&#xff1a; 4. 建模&#xff0c;测试模型并预测出结果 5. 上线&#xff0c;验证模型效果 二.数据预处理 1.数据无量纲化 2.preprocessing.MinMaxScaler(数据归一化) 3.preprocessing.Standard…

Linux编译器——gcc/g++(预处理、编译、汇编、链接)

目录 0.程序实现的两大环境 1.gcc如何完成 预处理 编译 汇编 链接 2.动态库与静态库 对比二者生成的文件大小 3. gcc常用选项 0.程序实现的两大环境 任何一个C程序的实现都要经过翻译环境与执行环境。 在翻译环境中又分为4个部分&#xff0c;预编译、编译、汇编与链…

Spring Cloud配置application.yml与bootstrap.yml区别及多profile配置 | Spring Cloud 6

一、前言 Spring Cloud 构建于 Spring Boot 之上&#xff0c;在 Spring Boot 中有两种上下文&#xff0c;一种是 bootstrap&#xff0c;另外一种是 application。 二、bootstrap与application (.yml/.properties) 2.1 两者区别 bootstrap.yml/bootstrap.properties 和 appl…

CHAPTER 3 Web HA集群部署 - Keepalived

Web HA集群部署 - Keepalived1. Keepalived概述1.1 工作原理1.2 核心功能1.3 拓扑图2. KeepAlived安装方式2.1 yum源安装2.2 源码包编译3. KeepAlived安装3.1 环境依赖3.2 安装nginx3.3 安装Keepalived4. Keepalived部署4.1 主备模式1. 节点配置2. 主节点配置文件3. 从节点配置…

金三银四了,准备跳槽的可以看看....

前两天跟朋友感慨&#xff0c;去年的铜九铁十、裁员、疫情导致好多人都没拿到offer!现在已经3月了&#xff0c;具体的金三银四也已经到来了。 对于想跳槽的职场人来说&#xff0c;绝对要已经提前做准备了。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场需求也出来了。…

谷粒学苑第七 八 九天

谷粒学苑第七天 上传到服务器 文件上传到接口中 在接口中读取内容 加到数据库 swagger&#xff1a; 报了实体类的错&#xff1a;刚刚这里忘记写数据了 一级二级都查出来了&#xff1a; 课程发布流程确认 报错&#xff1a; 实体类全部改为_STR还是报错 org.springfr…

Java线程池源码分析

Java 线程池的使用&#xff0c;是面试必问的。下面我们来从使用到源码整理一下。 1、构造线程池 通过Executors来构造线程池 1、构造一个固定线程数目的线程池&#xff0c;配置的corePoolSize与maximumPoolSize大小相同&#xff0c; 同时使用了一个无界LinkedBlockingQueue存…

《PyTorch深度学习实践10》——循环神经网络-基础篇(Basic-Recurrent Neural Network)

目录一、RNN简介二、RNN Cell用法三、RNN用法三、实例&#xff1a;hello换序1.RNN Cell2.RNN四、Embedding一、RNN简介 RNN网络最大的特点就是可以处理序列特征&#xff0c;就是我们的一组动态特征。比如&#xff0c;我们可以通过将前三天每天的特征&#xff08;是否下雨&#…

七、SpringBoot_自动装配

自动装配 官方文档 SpringBoot自动配置尝试根据您添加的 jar 依赖项自动配置您的 Spring 应用程序 Spring Boot auto-configuration attempts to automatically configure your Spring application based on the jar dependencies that you have added. SpringBoot定义了一套接…

详谈IIC

前言 在嵌入式底层系统中&#xff0c;常见的通讯方式&#xff0c;串口&#xff0c;IIC&#xff0c;SPI&#xff0c;IIS等&#xff0c;一般IIC,SPI,IIS更多的采取IO模拟&#xff0c;其余CAN,UART均是硬件设计直接支持&#xff0c;而IIC主要用于多数传感器数据的读写&#xff0c…

【c++基础】

C基础入门统一初始化输入输出输入输出符输入字符串const与指针c和c中const的区别const与指针的关系常变量与指针同类型指针赋值的兼容规则引用引用的特点const引用作为形参替换指针其他引用形式引用和指针的区别inline函数缺省参数函数重载判断函数重载的规则名字粉碎C编译时函…

Goby 征文大擂台,超值盲盒等你来!

001 Goby 技术征文正式启动 Goby 致力于做最好的网络安全工具。为了促进师傅们知识共享和技术交流&#xff0c;现发起关于 Goby 的技术文章征集活动&#xff01; 欢迎所有师傅们参加&#xff0c;分享您的使用经验或挖洞窍门等&#xff0c;帮助其他人更好地了解和利用 Goby。 …

Winform界面实现控件中英文语言切换

一、业务需求 在Winform项目的开发过程中,涉及到一个基础的功能就是需要对界面中的显示语言内容可以进行选择切换,方便不同地区的使用者快速上手使用;效果如下: 二、需求分析 需要实现对Winform项目界面显示语言可选择切换步骤如下: ①修改控件的显示内容; ②获取到界面显…

【计算机网络】数据链路层

概述 封装成帧 差错检验 可靠传输 实现机制 可靠传输的实现机制 停止等待协议 回退N帧协议 选择重传协议 【计算机网络】MAC帧和PPP帧&#xff08;定义使用范围区别共同点&#xff09;_GPNU_Log的博客-CSDN博客_ppp帧 PPP帧和以太网帧 | Mixoo 数据链路层的协议有PPP协…