​1 模型

针对于BP神经网络预测模型,收敛速度慢,精度较低,容易陷入局部极小值等缺点,提出了一种改进粒子群优化BP神经网络预测模型的算法.在该算法中,粒子群采用改进自适应惯性权重和改进自适应加速因子优化BP神经网络预测模型的初始权值和阈值,然后训练BP神经网络预测模型并预测.将该算法应用到几个典型的混沌时间序列预测.实验结果表明,该算法明显提高BP神经网络预测模型的收敛速度和预测模型的精度,减少陷入局部极小的可能.

1.1 BP神经网络

【预测模型】基于混沌粒子群算法优化BP神经网络实现预测多输入单输出matlab源码_预测模型

【预测模型】基于混沌粒子群算法优化BP神经网络实现预测多输入单输出matlab源码_预测模型_02

1.2 粒子群算法

【预测模型】基于混沌粒子群算法优化BP神经网络实现预测多输入单输出matlab源码_预测模型_03

【预测模型】基于混沌粒子群算法优化BP神经网络实现预测多输入单输出matlab源码_预测模型_04

1.3 混沌粒子算法

【预测模型】基于混沌粒子群算法优化BP神经网络实现预测多输入单输出matlab源码_预测模型_05

2 部分代码

%% 改进pso-BP神经网络
%% 清空环境
clear all;
close all;
clc;
data=xlsread('yuceshuju.xlsx','预测用(2019.9.5-2020.4.14)','G2:M21410');
[M,NN]=size(data);%M是样本数,N是变量数
inputn=data(1:100,1:NN-1)';%训练样本输入
outputn=data(1:100,NN)';%训练样本输出
%节点个数
inputnum=NN-1;%输入个数
hiddennum=12;%隐藏层
outputnum=1;%输出个数
%构建网络
net=newff(inputn,outputn,hiddennum);
%训练数据和预测数据
%选连样本输入输出数据归一化
[inputn_train,inputps]=mapminmax(inputn);
[outputn_train,outputps]=mapminmax(outputn);
input_test=inputn_train;
output_test=outputn_train;
N=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
%% BP网络训练
%构建网络
net=newff(inputn_train,outputn_train,hiddennum,{'tansig','purelin'});
%网络进化参数
net.trainParam.epochs=10; %迭代次数,学习率,目标
net.trainParam.lr=0.22;
x=rand(1,N);
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=train(net,inputn_train,outputn_train);
%% BP网络预测
%预测数据归一化
% inputn_test=mapminmax('apply',input_test,inputps);
%网络预测输出
an=sim(net,input_test);
% rmse = sqrt(mean((an-output_test).^2));%bp预测均方差
error=(an-output_test);%误差
error_xiangdui=(an-output_test)./output_test;%相对误差
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
rmse = sqrt(mean((BPoutput-outputn).^2));%bp预测均方差
disp(['bp预测均方差=',num2str(rmse)])
tic
%% 粒子群
sizepop=60;
popmax=20;                % 设置位置参数限制(矩阵的形式可以多维)
popmin=-20;
Vmax = 0.01;
Vmin=-0.01;          % 设置速度限制
c1 = 0.8;                        % 惯性权重
c2 = 0.8;                       % 自我学习因子
c3 = 0.6;                       % 群体学习因子
D=1;%粒子维数
u=2;%混沌系数
%% 粒子群工作
iter = 1;
maxgen = 500;                      % 最大迭代次数
%% tent映射混沌粒子群
disp('混沌粒子群')
[yy_logistic_pso,ybest_logistic_pso,an_logistic_pso,error_logistic_pso,error_xiangdui_logistic_pso,rmse_logistic_pso]=logistic_pso(sizepop,N,inputnum,hiddennum,outputnum,net,inputn_train,outputn,maxgen,c1,c2,c3,Vmax,Vmin,popmax,popmin,u,D,outputps);
error_logistic_pso=(an_logistic_pso-outputn);%误差
error_xiangdui_logistic_pso=(an_logistic_pso-outputn)./outputn;%相对误差
%% 粒子群
disp('粒子群')
[yy_pso,ybest_pso,an_pso,error_pso,error_xiangdui_pso,rmse_pso]=pso(sizepop,inputnum,hiddennum,outputnum,net,inputn_train,outputn,maxgen,c1,c2,c3,Vmax,Vmin,popmax,popmin,outputps);
error_pso=(an_pso-outputn);%误差
error_xiangdui_pso=(an_pso-outputn)./outputn;%相对误差
%% 把最优初始阀值权值赋予网络预测
% figure(1)
% plot(error_xiangdui_logistic_pso,'b-','lineWidth',2);hold on
% plot(error_xiangdui_pso,'r-','lineWidth',2)
% plot(error_xiangdui,'g-','lineWidth',2)
% ylabel('相对误差值')
% legend('tent映射混沌粒子群优化bp预测值','粒子群优化bp预测值','bp预测值')
% title('粒子群优化BP神经网络相对误差图')
figure(2)
plot(error_logistic_pso,'b-','lineWidth',2);hold on
plot(error_pso,'r-','lineWidth',2)
plot(error,'g-','lineWidth',2)
ylabel('误差值')
legend('tent映射混沌粒子群优化bp预测值','粒子群优化bp预测值','bp预测值')
title('混沌粒子群优化BP神经网络误差图')
figure(3)
plot(outputn,'k -','lineWidth',2);
hold on;
plot(an_logistic_pso,'b -','lineWidth',2)
plot(an_pso,'r -','lineWidth',2)
plot(BPoutput,'g -','lineWidth',2)
hold off
legend('真实值','tent映射混沌粒子群优化bp预测值','粒子群优化bp预测值','bp预测值');
title('混沌粒子群优化BP神经网络')
figure(4)
% 画进化曲线
plot(1:maxgen,yy_logistic_pso,'b-','lineWidth',2);hold on
plot(1:maxgen,yy_pso,'r-','lineWidth',2)
title('进化过程');
xlabel('进化代数');
legend('tent映射混沌粒子群','粒子群')
ylabel('均方差值')


3 仿真结果

【预测模型】基于混沌粒子群算法优化BP神经网络实现预测多输入单输出matlab源码_预测模型_06

4 参考文献

[1]卢辉斌, 李丹丹, 孙海艳. PSO优化BP神经网络的混沌时间序列预测[J]. 计算机工程与应用, 2015, 51(2):224-229.

【预测模型】基于混沌粒子群算法优化BP神经网络实现预测多输入单输出matlab源码_预测模型_07