【预测模型】基于蚁群算法优化bp神经网络实现数据预测matlab源码

 1 算法介绍

模型介绍见这里。 

2 部分代码

clc
clear
close all
data=xlsread('data1.xls');
data(:,[7,9,20])=[];
[r c]=size(data);

k=rand(1,r);
[m,n]=sort(k);
kkk=round(r*0.7);
% b=ismissing(data);
% sum(b)
input=data(:,1:end-1);
output=data(:,end);
%% 训练数据
P_train=input(n(1:kkk),:)';% 输入3-12列
T_train=output(n(1:kkk),:)';% 输出13列
%% 测试样本
P_test=input(n(kkk+1:end),:)';% 输入3-12列
T_test=output(n(kkk+1:end),:)';% 输出13列

%% 数据归一化
% 训练样本
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试样本
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);

[inputnum,N]=size(Pn_train);%输入节点数量
outputnum=size(Tn_train,1);%输出节点数量

hiddennum=8;
%构建网络
net=newff(Pn_train,Tn_train,hiddennum);

%% HS算法参数初始化
nVar=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;

%% 蚁群算法ACO参数初始化
Ant = 20;    % 蚂蚁数量
Times =10; % 蚂蚁移动次数
Rou = 0.82;   % 信息素挥发系数
P0 = 0.21;    % 转移概率常数
%% 取值范围
popmax = 8;                 % 待寻优阈值最大取值初始化
popmin =-8;                % 待寻优阈值最小取值初始化


%% BP网络训练
%网络进化参数
net.trainParam.epochs=1e5;
net.trainParam.lr=0.1;
net.trainParam.goal=0.001;
%网络训练
net=train(net,Pn_train,Tn_train);
%% 训练集
T_sim=sim(net,Pn_train);
T_simu=mapminmax('reverse',T_sim,outputps);
T_simu
figure
plot(1:length(T_simu),T_simu,'r-o','linewidth',1)
hold on
plot(1:length(T_train),T_train,'b-.','linewidth',1)
xlabel('训练样本')
ylabel('污垢')
% title('蚁群算法优化BP神经网络(ACO-BP)')
legend('预测值','实际值')
%% BP网络预测
% %数据归一化
% Pn_test=mapminmax('apply',P_test,inputps);
an=sim(net,Pn_test);
test_simu=mapminmax('reverse',an,outputps);
%error=test_simu-output_test;
figure
plot(1:length(test_simu(1:100)),test_simu(1:100),'r-o','linewidth',1)
hold on
plot(1:length(test_simu(1:100)),T_test(1:100),'b-.','linewidth',1)
ylabel('污垢')
% title('蚁群算法优化BP神经网络(ACO-BP)')
legend('预测值','实际值')


kk=test_simu-T_test

% % 自程序objfun_BP
% function error = objfun_BP(x,inputnum,hiddennum,outputnum,net,inputn,outputn)
% %该函数用来计算适应度值
% %x          input     个体
% %inputnum   input     输入层节点数
% %outputnum  input     隐含层节点数
% %net        input     网络
% %inputn     input     训练输入数据
% %outputn    input     训练输出数据
% 
% %error      output    个体适应度值
% 
% %提取
% 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}=reshape(B2,outputnum,1);
% 
% 
% %网络进化参数
% net.trainParam.epochs=1e5;
% net.trainParam.lr=0.1;
% net.trainParam.goal=0.00001;
% net.trainParam.show=100;
% net.trainParam.showWindow=0;
% 
% 
% %网络训练
% net=train(net,inputn,outputn);
% 
% an=sim(net,inputn);
% 
% error=sum(abs(an-outputn));
% end

3 仿真结果

4 参考文献

[1]刘瑞晨. 基于蚁群算法与BP神经网络的桥式起重机驱动优化研究[D].太原科技大学,2020.

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值