%% 基于粒子群算法优化BP神经网络的汇率预测
clear all
clc
warning off
%% 导入数据
load exchange_rate.mat
x = [];
y = [];
tr_len = 800;
num_input = 10;
for i = 1:length(X)-num_input
x = [x; X(i:i+num_input-1)];
y = [y; X(i+num_input)];
end
%训练集——800个样本
input_train = x(1:tr_len, :)';
output_train = y(1:tr_len)';
%测试集——52个样本
input_test = x(tr_len+1:end, :)';
output_test = y(tr_len+1:end)';
%% BP网络设置
%节点个数
[inputnum,N]=size(input_train);%输入节点数量
outputnum=size(output_train,1);%输出节点数量
hiddennum=6;
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
%构建网络
net=newff(inputn,output_train,hiddennum);
%% GA算法参数初始化
nvar=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
[outputn outputps]=mapminmax(output_train);% 归一化到【0 1】之间
%% PSO 参数
c1 = 2;
c2 = 2;
w=0.2;
%
Vmin = -1;
Vmax = 1;
maxiter = 10; % 迭代次数
sizepop = 10; % 种群数量
popmin=-ones(1,nvar); % 下界
popmax=ones(1,nvar); % 上界
% 初始化种群
for i=1:sizepop
pop(i,:) =init_individual(popmin,popmax,nvar,1); % 随机初始化个体
fitness(i)= objfun_BP(pop(i,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
V(i,:)=Vmin+(Vmax-Vmin)*rand(1,nvar);
end
% 记录一组最优值
[bestfitness,bestindex]=min(fitness);
zbest=pop(bestindex,:); % 全局最佳
gbest=pop; % 个体最佳
fitnessgbest=fitness; % 个体最佳适应度值
fitnesszbest=bestfitness; % 全局最佳适应度值
% 迭代寻优
trace=[];
for i=1:maxiter
i
for j=1:sizepop
%
%
% 速度更新
V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) +c2*rand*(zbest - pop(j,:));
for iV = 1:nvar
V(j,iV) = min( Vmax,V(j,iV));
V(j,iV) = max( Vmin,V(j,iV));
end
% 个体更新
pop(j,:) = pop(j,:) + V(j,:);
for iV = 1:nvar
pop(j,iV) = min( popmax(iV), pop(j,iV));
pop(j,iV) = max( popmin(iV), pop(j,iV));
end
% 适应度更新
fitness(j) = objfun_BP(pop(j,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
% end
% 比较 个体间比较
if fitness(j)<fitnessgbest(j)
fitnessgbest(j) = fitness(j);
gbest(j,:) = pop(j,:);
end
if fitness(j)<fitnesszbest
fitnesszbest = fitness(j);
zbest = pop(j,:);
end
end
fitness_iter(i) = fitnesszbest;
avgfit(i)=sum(fitness)/sizepop;
end
disp(zbest)
figure
plot(fitness_iter,'b-*','linewidth',2)
xlabel('迭代次数')
ylabel('适应度')
grid on
x=zbest;
%% 把最优初始阀值权值赋予网络预测
%% 把最优初始阀值权值赋予网络预测
% %用PSO算法优化的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;
%% BP网络训练
%网络进化参数
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.mc = 0.8;%动量系数,[0 1]之间
net.trainParam.goal=0.001;
%网络训练
net=train(net,inputn,outputn);
%% BP训练集预测
BP_sim=sim(net,inputn);
%网络输出反归一化
T_sim=mapminmax('reverse',BP_sim,outputps);
%
figure
plot(1:length(output_train),output_train,'b-','linewidth',1)
hold on
plot(1:length(T_sim),T_sim,'r-.','linewidth',1)
axis tight
xlabel('训练样本','FontSize',12);
ylabel('汇率','FontSize',12);
legend('实际值','预测值');
string={'PSO-BP预测'}
title(string);
% %% 测试数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
% %预测输出
an=sim(net,inputn_test);
BPsim=mapminmax('reverse',an,outputps);
figure
plot(1:length(output_test), output_test,'b-','linewidth',1)
hold on
plot(1:length(BPsim),BPsim,'r-.','linewidth',1)
xlabel('测试样本','FontSize',12);
ylabel('汇率','FontSize',12);
axis tight
legend('实际值','预测值');
string={'PSO-BP预测'}
title(string);
% % 评价
ae= abs(BPsim - output_test);
rmse = (mean(ae.^2)).^0.5;
mae = mean(ae);
mape = mean(100*ae./BPsim);
disp('预测结果评价指标:')
disp(['RMSE = ', num2str(rmse)])
disp(['MAE = ', num2str(mae)])
disp(['MAPE = ', num2str(mape)])
PSOBP汇率预测.zip_BP_BP优化_PSO_神经网络_预测算法
版权申诉
111 浏览量
2022-07-14
20:09:19
上传
评论 1
收藏 16KB ZIP 举报
JaniceLu
- 粉丝: 78
- 资源: 1万+
最新资源
- LM324_datasheet.pdf
- 全新Storm+Core+API管理系统源码
- 基于RP2040的电子沙漏,使用RP2040游戏机开发板,灯板是74HC595驱动的8*8LED矩阵
- 基于SSM和VUE的商店POS积分管理系统(免费提供全套java开源项目源码+论文)
- 基于SpringBoot的“在线动漫信息平台”的设计与实现.rar
- NPP xml tools
- 基于python开发的树莓派RP2040的游戏机
- 基于SNMP网络设备MIB信息采集系统(免费提供全套java开源项目源码+论文)
- 基于SSM和VUE的五子棋游戏的设计(免费提供全套java开源项目源码+论文)
- qiun-data-charts
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈