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.