神经网络在公路运量中的预测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
神经网络在公路运量中的预测
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];