【BP预测】基于麻雀算法优化BP预测matlab源码

一、简介

  1. 麻雀搜索算法简介
    (以下描述,均不是学术用语,仅供大家快乐的阅读)
      麻雀搜索算法(sparrow search algorithm)是根据麻雀觅食并逃避捕食者的行为而提出的群智能优化算法。提出时间是2020年,也就是今年,这是一个新鲜热乎的新算法,相关的论文和研究还比较少,有可能还有一些正在发表中,受疫情影响需要论文的同学抓紧时间水论文了。
      麻雀搜索算法主要模拟了麻雀群觅食的过程。麻雀群觅食过程也是发现者-跟随者模型的一种,同时还叠加了侦查预警机制。麻雀中找到食物较好的个体作为发现者,其他个体作为跟随者,同时种群中选取一定比例的个体进行侦查预警,如果发现危险则放弃食物,安全第一。
      麻雀搜索算法的具体实现其实和人工蜂群算法非常相似,基本结构几乎一致,但是搜索算子有一定的差异,可以说是一种人工蜂群算法的改进算法。
      麻雀搜索算法的相关论文比较少,只看了原始论文,算法的描述比较详细,不过可以看出论文编排的比较匆忙,有部分公式显得过于复杂,影响理解。下面我会根据自己的理解对其中的部分公式进行简化,如果有不对的地方,欢迎大家留言。

  2. 算法流程
    这次我们的主角是一群麻雀。
    在这里插入图片描述
     麻雀虽小五脏俱全,每只麻雀只有一个属性:位置,代表它找到的食物的位置。每只麻雀有三种可能的行为:1.作为发现者,继续搜索食物,2,作为跟随者,跟随一个发现者觅食,3.警戒侦查,有危险则放弃食物。
      在D维解空间内每只麻雀的位置为 ,适应度值 。
      这群麻雀中有N只麻雀,每代选取种群中位置最好的PN只麻雀作为发现者,剩余的N-PN只麻雀作为跟随者。
    2.1更新发现者位置
    每代发现者的位置更新公式如下:
    在这里插入图片描述
    上图为文中的公式描述,有些不准确,更加精确的描述如下:
    在这里插入图片描述
     其中表示种群中第t代中第i个个体的第d维位置, 为(0,1]中的均匀随机数,Q为一个标准正态分布随机数。为[0,1]中的均匀随机数,ST为警戒阈值,取值范围为[0.5,1.0]。
      可以看出,当大于ST时,该发现者将按正态分布随机移动到当前位置附近。(其值收敛于最优位置)。
      当小于ST时是什么情况呢,我们先看看函数 的图像,其中取值为1000。
    在这里插入图片描述
    可以看出在其分布随着x的变大,取值范围逐渐由(0,1)慢慢缩小为约(0,0.4)。
    X值较小时,取值靠近1的概率较高,随着X的增大,取值的分布变得较为均匀。
    所以当 小于ST,麻雀的每一维都在变小,当然,这不是一个好策略。(其值收敛于0)。

2.2更新跟随者位置
文中跟随者的位置更新公式及描述如下图:
在这里插入图片描述
首先我们先看看是一个大小为1*D的矩阵(1行D列),其每一维都随机从{-1,1}中选取 。
  举个简单的例子,假设 ,X=(x1,x2,x3)=(1,2,3),则
在这里插入图片描述
 由于是行向量与矩阵运算,所以文中公式两边不应该出现公式j,出现公式j则表示该变量是一个数值而非一个向量。
  简化可得其位置更新公式如下:
在这里插入图片描述
 其中xw为当前种群中麻雀的最差位置,xb则为种群中麻雀的最有位置。
  从公式(2)中可以看出,若i>n/2时,其值为一个标准正态分布随机数与一个以自然对数为底数的指数函数的积,当种群收敛时其取值符合标准正态分布随机数。(其值会收敛于0)。
  若i<=n/2时,其取值为当前最优的麻雀的位置加上该麻雀与最优位置每一维距离随机加减后,将总和均分到每一维上。解释有点绕口,请结合公式自行理解。该过程可以描述为在当前最优位置附近随机找一个位置,且每一维距最优位置的方差将会变得更小,即不会出现在某一维上与最优位置相差较大,而其他位置相差较小。(其值收敛于最优位置)。

2.3侦查预警行为
在麻雀觅食的同时他们中的部分会负责警戒,当危险靠近时,他们会放弃当前的食物,即无论该麻雀是发现者还是跟随者,都将放弃当前的食物而移动到一个新的位置。
  每代将从种群中随机选择SD个个体进行预警行为。
其位置更新公式如下:
在这里插入图片描述

其中为符合标准正态分布的随机数,K为[-1,1]的均匀随机数,为一个较小的数防止分母唯一。与原文中的公式相比,我去除了原绝对值符号,因为两个随机数均是关于原点中心对称,增加的分母绝对值,防止分母取值为0。其中为最差位置的麻雀的适应度值。
  从公式(3)中可以看出,如果该预警的麻雀处于当前的最优位置时,它会逃离到自身附近的一个位置,具体有多近取决于自身距离最差位置与自身位置食物与最差食物的差别的比值;如果该麻雀不是处于最优位置的那一只,它讲逃到当前最优位置附近。(其值收敛于最优位置)。
麻雀搜索算法的流程图如下:
在这里插入图片描述
流程图
  可以看出麻雀搜索算法的流程非常的简单。但是根据上面对这三个更新公式的分析可以看出,麻雀搜索算法的更新方式可大致分为两种:1.向当前最优位置靠近;2.向原点靠近。
  使用这两种方式来更新麻雀的位置将会使算法容易陷入局部最优。直觉告诉我拥有这样的更新规则的算法不是一个优秀的算法。具体的问题下面实验中进行详述。

二、源代码

% 清空环境
clc
clear

%读取数据
load data input output

%节点个数
inputnum=2;
hiddennum=5;
outputnum=1;

%训练数据和预测数据
input_train=input(1:1900,:)';
input_test=input(1901:2000,:)';
output_train=output(1:1900)';
output_test=output(1901:2000)';

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

%构建网络
net=newff(inputn,outputn,hiddennum);

% 参数初始化
dim=21;
maxgen=30;   % 进化次数  
sizepop=20;   %种群规模

popmax=5;
popmin=-5;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 迭代寻优
x=bestX
%% 结果分析
plot(yy)
title(['适应度曲线  ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
%% 把最优初始阀值权值赋予网络预测
% %用麻雀搜索算法优化的BP网络进行值预测
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+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=100;
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(2)
plot(error)
title('仿真预测误差','fontsize',12);
xlabel('仿真次数','fontsize',12);ylabel('误差百分值','fontsize',12);

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【SVM预测】灰狼算法优化svm支持向量机预测matlab源码

【SVM预测】基于蝙蝠算法改进的SVM预测

【ELM预测】粒子群优化ELM网络预测

【lssvm预测】基于鲸鱼优化算法的lssvm数据预测matlab源码

【lssvm预测模型】基于蝙蝠算法改进的最小二乘支持向量机lssvm预测

【lssvm预测】基于飞蛾扑火算法改进的最小二乘支持向量机lssvm预测

【lstm预测】基于鲸鱼优化算法改进的lstm预测matlab源码

【BP预测模型】BP神经网络的预测

【BP预测】基于麻雀优化的BP神经网络

【ANN预测模型】基于差分算法改进ANN网络预测matlab源码

【SVM预测】基于SVM进行股票预测matlab源码

猜你喜欢

转载自blog.csdn.net/qq_34763204/article/details/113666525
今日推荐