​【预测模型】基于人工鱼群算法优化BP神经网络实现数据预测matlab源码

1 简介

BP 神经网络在求解最优化问题时易陷入局部最优值,且收敛速度慢。鱼群算法借助鱼的运动规律,设定人工鱼个体,并模拟鱼群的觅食、群聚和追尾行为,通过个体的局部寻优,实现全局最优。人工鱼在不断探索周围环境状况和同伴状态之后,汇集在几个局部最优点处,而值较大的极值区域周围一般能集结较多的人工鱼,这有助于判断并获取全局极值。因此,鱼群算法作为学习方法来改进BP 神经网络是一种很好的尝试。BP 神经网络与鱼群算法结合,就是使用鱼群算法在训练中不断调整神经网络的权值和阈值,来实现输出值和目标值误差最小。以误差最小为寻优对象,以训练连接权值和阈值为优化手段,达到寻找最优神经网络结构的目的。

鱼群算法优化 BP 神经网络的流程鱼群算法是一个循环算法,在寻优过程中不断循环往复,直到找到全局最优值,其优化 BP 神经网络具体流程,如图 2 所示。

1)确定神经网络结构。BP 神经网络是一个从输入到输出高度非线性的映射,3 层的神经网络足以实现任意维度的输入层到输出层的映射,因此本文选择 3 层 BP 神经网络。其中:输入层神经元数根据问题的表达来设定;输出层神经元数根据用户需要来设定;隐含层神经元数用式(1)来确定。式中:n1 为隐含层神经元数;n 为输入层神经元数;m 为输出层神经元数;a 为[1,10]之间的常数。BP 神经网络所选用的学习算法能否收敛,很大程度上由初始值所决定。为了使每个神经元的状态值接近于零,初始权值一般取比较小的随机数。同时,为了将尽量多的样本值归入梯度最大方向,输入样本需要进行归一化。​

2 部分代码

%%%%%%%%%%%%人工鱼算法优化BP神经网络(所有数据未随机抽取)%%%%%%%%%%%%%%%%%%%%%%%%%
tic;%计时开始
clc;%清屏
clear all;%清除所有变量
close all;
load gqpin.txt;data1=gqpin;
load gqpout.txt;data2=gqpout;
data1=data1';
data2=data2';
for i=1:5
   data1(i,:)=(data1(i,:)-min(data1(i,:)))/(max(data1(i,:))-min(data1(i,:)));
end
for i=1:1
   data2(i,:)=(data2(i,:)-min(data2(i,:)))/(max(data2(i,:))-min(data2(i,:)));
end
data11=data1';
data22=data2';
x1=data11(:,1);
y1=data22;
x2=data11(:,2);
y2=data22;
x3=data11(:,3);
y3=data22;
x4=data11(:,4);
y4=data22;
x5=data11(:,5);
y5=data22;
X_sample=[x1,x2,x3,x4,x5];%X(261,5)
Y_sample=[y1,y2,y3,y4,y5];%Yo(261,5)

input=size(X_sample,1);            %输入层神经元个数
middle=100;                        %显示中间层神经元个数
output=size(X_sample,1);           %显示输出层神经元个数261
%%%%
v=rands(input,middle);           %初始化连接权矩阵v(i,j):输入层与中间层的连接权
w=rands(middle,output);           %初始化连接权矩阵w(j,t):中间层与输出层的连接权
th1=rands(middle,1);           %初始化中间层阈值矩阵th1:中间层的阈值
th2=rands(output,1);           %初始化输出层阈值矩阵th2:输出层的阈值

out_middle=zeros(middle,1);       %中间层的实际输出
out_output=zeros(output,1);      %输出层的实际输出
delta_output=zeros(output,1);  %输出层的差值
delta_middle=zeros(middle,1);  %中间层的差值

sample_bumbers=5;              %样本数
max_times=3;              %最大训练次数
times=0;                  %训练次数
eta=0.1;                  %学习系数eta
gamma=0.1;                  %学习系数gamma
alpha=0.3;                  %动量系数
sample_pointer=0;              %样本数指针
error_max=0.01;              %最大误差
error_global=1;              %全局误差
%%%%%%人工鱼算法初始化%%%%%%%%%%%
fishnum=50;                    %生成50条人工鱼
MAXGEN=10;                      %最大迭代次数
try_number=50;                %最大试探次数
visual=1;                      %感知距离
delta=0.618;                   %拥挤度因子
step=0.01;                      %移动步长

for times=1:max_times%begin for External Loop

end

%计算输出层输出:
Y=w'*out_middle-th2;%Y(3,1)=w'(3,8)*out_middle(8,1)*-th2(3,1),计算输出层的输入
output_error(sample_pointer)=0
for k=1:output %k=1:3

end

%计算下一次的中间层和输出层之间的连接权w(i,j),阈值th2(j)
pre_w=0;pre_th2=0;
for k=1:output;
for j=1:middle
w(j,k)=w(j,k)+eta*delta_output(k)*out_middle(j)+alpha*pre_w;%out_middle(j)=y(j)
pre_w=eta*delta_output(k)*out_middle(j);
end
th2(k)=th2(k)+eta*delta_output(k)+alpha*pre_th2;
pre_th2=eta*delta_output(k);
end 



disp('^^^^^^^^^^^^^显示结果:^^^^^^^^^^^^^^');
fprintf('总训练次数为:%d.\n',times);
fprintf('运行时间为:\n');
toc;%计时结束,并输出程序的运行时间
figure(1)
plot(out_output,'r--');
hold on
grid on
plot(Y0,'b-');
legend('模型输出','实际输出');
figure(2)
plot(Y0-out_output,'-');
grid on
xlabel('输入样本'),ylabel('样本输出误差'),title('E误差');

3 仿真结果

img

img

4 参考文献

[1]陈群, 左锋, 卢文科. 基于人工鱼群BP神经网络算法的压力传感器温度补偿研究[J]. 微型机与应用, 2016, 35(009):27-29.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值