当前位置:文档之家› 神经网络在公路运量中的预测

神经网络在公路运量中的预测

神经网络在公路运量中的预测
1.问题的描述
公路运量主要包括公路客运量和公路货运量两个方面。

据研究,某地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,表1中给出了某地区20年的公路运量相关数据,表中人数和公路客运量的单位为万人,机动车数量的单位为万辆,公路面积的单位为万平方千米,公路货运量单位为万吨。

根据相关部门数据,该地区2010年和2011年的人数分别为73.39和75.55万人,机动车数量分别为3.9635和4.0975万辆,公路面积将分别为0.9880和1.0268万平方千米。

我们将利用BP神经网络预测该地区2010年和2011年的公路客运量和公路货运量。

2.BP神经网络求解过程
表1 某地区20年公路运量数据
具体程序如下:
clc
%yuanshishuju
%renshu
a=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 35.42 38.09 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
%jidongcheshu
b=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];
%gonglumianji
c=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79];
%gonglukeyunliang
d=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462];
%gongluhuoyunliang
e=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];
p=[a;b;c];
t=[d;e];
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
%%上面那个函数的意思:对数据进行预处理,进行归一化处理
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
函数作用:数据归一化到[-1,+1]区间(默认时)。

输入参数:
p:需要归一化的数据。

是QxR矩阵,其中R是维数,Q是样本数。

一般是输入数据。

t:需要归一化的数据。

是QxR矩阵,其中R是维数,Q是样本数。

一般是输出数据。

返回参数:
pn:把矩阵p归一化后的数据。

minp:是列向量,元素是矩阵p每一行的最小值。

maxp:同上,不过实最大值。

tn,mint,maxt同上。

premnmx一般和tramnmx连用,前者用于归一化,后者用于反归一化。

%%
dx=[-1,1;-1,1;-1,1];
net=newff(dx,[3,7,2],{'tansig','tansig','purelin'},'traingdx');
%%
创建一个新的向前神经网络
net=newff(minmax(pn),[hideNums,outputNums],{TF1,TF2});
上面这句为什么不写输入的NUMs
是因为输入参数minmax(pn)可以理解为输入pn的最大最小值和输入数据。

,所以输入数据的nums已经包含了。

这种newff的用法是旧用法,你可以在matlab输入help newff查看新用法
%%
% 设置训练参数
net.trainParam.show=1000;
net.trainParam.Lr=0.05;
net.trainParam.epochs=20000;(次数)
net.trainParam.goal=0.65*10^(-3);精度
net=train(net,pn,tn);
% 对BP 网络进行仿真
an=sim(net,pn);
% 计算仿真误差
a=postmnmx(an,mint,maxt);
x=1990:2009;
newk=a(1,:);
newh=a(2,:);
figure(2);
subplot(2,1,1);
plot(x,newk,'r-o',x,d,'b--+');
legend('网络输出客运量','实际客运量'); xlabel('年份');
ylabel('客运量/万人');
title('运用工具箱客运量学习和测试对比图') ; subplot(2,1,2);
plot(x,newh,'r-o',x,e,'b--+');
legend('网络输出货运量','实际货运量'); xlabel('年份');
ylabel('货运量/万人');
title('运用工具箱货运量学习和测试对比图') ;
pnew=[73.39 75.55
3.9635
4.0975
0.9880 1.0268];
pnewn=tramnmx(pnew,minp,maxp); anewn=sim(net,pnewn);
anew=postmnmx(anewn,mint,maxt)
3. 训练结果分析
运行程序,可以得到如下结果以及图1所示对比图。

19901992
1994
19961998200020022004200620082010
4
年份
客运量/万吨
运用工具箱客运量学习和测试对比图
1990
1992199419961998
200020022004200620082010
4
年份
货运量/万吨
运用工具箱货运量学习和测试对比图
图1 运用MATLAB 自带神经网络工具箱生成的原始数据与仿真数据的对比图
anew = 1.0e+004 * 4.5886 4.6209 2.0307 1.9883
也就是说,2010年和2011年的公路客运量分别为45886万人和46209万人,公路货运量分别为20307万吨和19883万吨。

2000400060008000100001200014000
10
10
10
10
10
10
1
Best Training Performance is 0.00064986 at epoch 14837
M e a n S q u a r e d E r r o r (m s e )
14837 Epochs
图2 网络训练结
Target
O u t p u t ~= 1*T a r g e t + -0.00028
Training: R=0.99927
图3 网络训练结果分析图形
网络的学习曲线如图2所示,可以看出训练所得的误差很小,达到目标值。

图3给出了网络训练结果分析图形,横坐标为目标输出,纵坐标为网络输出,“○”表示数据,理想回归直线由实线表示,最优回归直线由虚线表示。

从图3中可以看出虚线和直线几乎重合,说明网络具有很好的性能。

相关主题