1. 引言
为了使景点更好地对来往车辆进行统筹调度 [1],同时也为了让游客更好地安排旅行行程,多源异构数据的出现可以随时提供景区实时热度的相关数据 [2]。有了各式各样的数据就需要存储和计算处理,比如:利用HBASE进行分布式存储以及运用MapReduce进行并行化处理 [3]。有了更为简洁的数据之后,便可以建立模型进行预测 [4],之前苏培培对智慧黄山风景区客流量预测系统已进行了详细分析,介绍了支持向量回归(SVR)和BP神经网络这两种预测模型 [5],另外,还有文章针对三种情况下的客流分别进行分析建模 [6],这些为旅游景区短期客流量预测工作 [7] 提供了相关的方法。本篇文章中首先对获取的海量数据进行存储、得出景区内交通流量与密度的关系、并利用历史数据对短时交通流进行预测。我们的研究内容不仅囊括了数据存储、数据处理、数据预测还做出了基于预测结果的预测,设计范围较为广泛。其结果不仅有利于提醒景区内部工作人员及时进行合理调度,而且有利于即将出行的自驾游游客对旅游行程的妥善安排。
2. 自驾游车辆判别
由于旅游交通和日常交通共用城市道路交通系统,采集到的数据中同时包含了自驾游车辆和工作通勤车辆,因此,需要对预处理后的数据进行自驾游车辆的判别 [8]。判别方法如下:
1) 将元旦假期前后的车牌数据进行对比,元旦期间和其他时间都有在景区内出现的车牌视为本地车牌,予以剔除,可初步得到自驾车数据,具体过程为:
① 选取元旦假期内的数据,将这些数据中的车牌去重;
② 选取元旦假期以外的数据,将这些车牌号去重;
③ 选取①和②中的车牌数据的交集,即可得本地车牌数据;
④ 在预处理完成的数据中,剔除③中所得的数据,即得到初步被判断为自驾游车辆的数据;
2) 分别对1)中得到的本地车牌数据和待定的自驾游车辆的车牌数据按照车牌号进行分组统计,遍历分组结果中的时间戳,应用Python语句处理日期和时间的标准库datetime来比较时间戳的大小,最小值为车辆在景区各监测点第一次出现的时间,最大值则为最后一次出现的时间,将其分别作为开始时间和结束时间,计算自驾游车辆的停留天数。如式(1)、式(2)。
(1)
(2)
式(1)中,
为第一次出现在景区各监测点的时间;
为最后一次出现在景区各监测点的时间;id为车牌号。如果
为1,则代表该车停留时间不超过1天。式(2)中,
表示停留n天的自驾游车牌量占总车牌量的比例;
表示停留n天的车牌数量;N为最大停留天数,这里取31天。其中,式(2)是为了验证式(1)所提取本地车牌和我们待定自驾游车牌的准确性,故统计了各个停留天数下的车牌所占比例情况。
3. 自驾游车辆数据实现HDFS存储
当筛选出自驾游车辆数据后需对其进行存储,但由于数据量的庞大和数据类型众多,故我们需要有能够稳定存储GB,TB级别以上的数据文件,而HDFS存储刚好能满足我们这样的需求。因为HDFS无需引用任何特定的存储中心就可以建立一个数据共享网络,能够实现数据的永久存储,并且能够预防数据丢失。其次任何数据都是“上链可溯源”。它的另一个优势就是将一条完整的数据链进行分片处理,再将分片数据保存在一定比例的节点中,具有可无限拓展的数据存储能力。
HDFS的写入操作:
准备前提:① 文件Data,200 M大小。客户端将文件Data写入到HDFS上。② HDFS按默认配置。③ HDFS分布在三个机架上Rack1,Rack2,Rack3。
步骤:
1) 客户端将文件Data按64M分块。分成四块,block1、block2、block3和block4;
2) 客户端向NameNode发送写数据请求。
3) NameNode节点,记录block信息。并返回可用的DataNode。
block1: host2,host1,host3
block2: host7,host8,host4
block3: host5,host9,host6
block4: host11,host10,host12
4) 客户端向DataNode发送block1;发送过程是流式写入。
流式写入过程:
① 将64M的block1按64k的package划分。
② 然后将第一个package发送给host2。
③ host2接收完后,将第一个package发送给host1,同时客户端向host2发送第二个package。
④ host1接收完第一个package后,发送给host3,同时接收host2发来的第二个package。
⑤ 以此类推,直到将block1发送完毕。
⑥ host2,host1,host3向NameNode发送通知,且host2向客户端发送通知,即“消息已发送完毕”。
⑦ 客户端收到host2发来的消息后,向NameNode发送消息,即“我写完了”。
⑧ 发送完block1后,再向host7,host8,host4发送block2。
⑨ 以此类推,直至所有block全部写入,才意味着文件 Data已全部存入HDFS中。
4. 景区内交通流量与密度的关系
交通流量的准确检测,在景区内各交通要道的管理中十分重要。一般来说,将在单位时间内通过某个交通路口的交通实体数来表示交通流量,实体通常指机动车、非机动车和行人,但这里我们只针对机动车车流量的研究。这里的交通密度 [9] 指的是景区内的一条道路上单位面积内某一瞬时存在的车辆数。通常根据某个路口的过往车流量来判定该路口交通的拥堵情况,以此有效管控各个路口交通。图1为我们演示的某个路段的交通流量与密度的关系图。

Figure 1. Relationship of traffic density, flow, workshop time distance and distance headway
图1. 路段的车流密度与流量、车间时距、车头间距的关系图
图1中所用公式模型:
(3)
(4)
表示某一时间间隔内通过i路段的交通流量总和(辆);
表示通过i路段的对应小客车的换算系数。
表示i路段单位面积内的交通流量密度(辆/m2);
表示i路段拥有的车道数量;
表示i路段上的车道面积(m2)。
从图1中我们可以看出,在景区内某一个路段交通车流量没有达到最大值时,车流密度随着车流量的增长而增大;当交通流量接近或等于最大值时,车头间距逐渐缩小,车速受到限制,出现车辆跟驰,此时景区内交通工作人员应当警惕,防止车辆间发生碰撞;当车流密度大于最佳车流密度后,车辆行驶速度应随着道路交通流量同时逐渐降低,此时车流密度逐渐增大,车辆出现缓慢、匀速低速行驶现象,工作人员应及时做出反应,防止交通拥堵;如果不幸达到这种情况:当车流密度逐渐增大一定值后,车头间距持续变小,车间时距逐渐增大,道路交通发生阻塞,甚至发生停车现象,工作人员应先暂停车辆进入该路段,并尽快有序疏散该路段车辆。
5. KNN预测设计
定义:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 [10]。
优势:KNN算法和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感;在多分类问题上比SVM算法好用,因为KNN算法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属的类别,所以KNN算法更为适合类域的交叉或重叠较多的待分类样本集;此算法比较适用于样本容量比较大的类域的自动分类。
计算方法 [11]:(关键是找到合适的历史值向量维数m和近邻个数K)
1) 计算已知类别数据集中的点与当前点之间的距离;
2) 按距离递增次序排序;
3) 选取与当前点距离最小的K个点;
4) 统计前K个点所在的类别出现的频率;
5) 返回前K个点出现频率最高的类别作为当前点的预测分类。
由于疫情影响,这里采用的仍然是模拟数据集。时间:1月1日;地点:三孔景区。考虑到:① 各个时间段进入景区的车辆数应小于等于剩余停车位总数;② 同时,考虑到景区各个路段的旅客交通方便,故景区内任意路段的车流密度应小于等于流量为峰值时对应的车流密度;

Figure 2. Fitting of predicted and real traffic flow in each period of New Year’s Day 2022
图2. 2022元旦各时间段预测车流量与真实车流量拟合图
我们最终选取的维数m = 24,最优K = 6即选取2019至2021年元旦的数据集作为样本训练得到预测车辆的数据集,用matlab拟合,并且与真实的数据集之间进行误差分析。经过统计,我们发现相对误差和只有0.00123,绝对误差和只有0.215,说明取得的预料结果还是相对可靠的。
从图2中可以清晰地观察到:1) 从整体分析,这一天的车流量变化是非线性的,有递增状态也有递减状态;2) 从具体分析,在6点至7点这个时间段内,进入景区的车辆激增,车辆数变化量最大。并且在7点至14点都属于进入景区的高峰期,其中在8点和12点都达到了极大值。这些分析表明,在高峰期来临之前,景区内的工作人员应提前就位为高峰期的交通疏通做好准备,防止路段交通拥堵。此外,在15点之后,进入景区的车辆逐渐减少直至为零,说明大部分人选择白天到该景区游玩。
6. 结束语
本文通过对景区内自驾游车辆的筛选判别、筛选后数据集的HDFS存储、交通流量与密度的关系分析、KNN算法预测短时交通流,进一步提出了在管理调度时应注意的问题,为景区工作人员和游客双方及时采取更完备的解决方案打下了基础。通过构建模型及求解得出重要时间节点,降低了景区内各路段的拥堵风险以及自驾游旅客做出选择的时间成本,保证了景区内交通的畅通无碍和游客的旅游愉悦体验。虽然在这其中也有考虑不全面等问题,但也做出了实质性行动,提高了各大景区道路规划和安排调度的效率,使景区内交通通畅度得到具体优化提升。
基金项目
济宁学院省级大学生创新创业训练计划项目:S202010454008;济宁学院教学改革研究项目(项目驱动式的《数学建模》课程实践教学改革研究)。