一种基于上下游路口车流量的启发式缺失道路车流量推算方法与流程

文档序号:14775204发布日期:2018-06-23 02:59阅读:698来源:国知局
一种基于上下游路口车流量的启发式缺失道路车流量推算方法与流程

本发明属于交通车流量数据处理领域,尤其涉及一种基于上下游路口车流量的启发式缺失道路车流量推算方法。



背景技术:

随着大数据技术和物联网技术的发展,交通领域中的车流量数据也逐步受到了重视,具有更多的应用领域。基于车流量数据,可以计算车流平均速度,为市民进行拥堵分析和预测;可以估算道路的通行时间,为市民出行推荐行程时间较短的线路;可以生成OD(出发和目的地)矩阵进行微观交通仿真,探究交通流运行规律。但是由于道路众多,有些道路上没有安装检测设备,或者有些道路安装了检测设备但是设备无法正常工作,这些因素都会导致我们无法获得完整的路网车流量数据,影响了上层应用的服务质量和正常工作。为了解决车流量数据不足的问题,一些可用的手段包括:添加新的设备,覆盖目标;进行实际交通流量调查,弥补缺失数据。但是这些手段会增加经济负担和人力开销。当然也可以通过其他设备来补充道路流量数据,如可以通过高清摄像头的图片对车流量进行统计,这需要利用图像处理相关的技术,但是如果某条道路没有安装设备,还是无法获取到车流量数据。

此外,与车流量反推相关的研究有:湖南省公路学会的程正国和周也,基于高速公路封闭的特点,利用收费站出口车流量来发推主线交通量,但是由于城市道路没有收费站,也不封闭,所以该方法就无法适用;此外,在微观交通仿真领域,有OD反推相关的研究,但是该问题与本发明研究的问题并不一样,相同的是:两个问题都是基于不完整的道路车流量进行推算;不同的是:本发明推算的是整个道路的车流量,OD反推求的是所有出发点(Origin)到目的地(Destination)之间出行量的表格,也就是某条路线对车辆的吸引量,并不需要求出整个路网的车流量。



技术实现要素:

本发明为了节省经济、人力成本,提高方法的适用性,通过利用已有道路的车流量数据,提供了一种基于上下游路口车流量的启发式缺失道路车流量推算方法。

本发明的目的是通过以下技术方案来实现的:一种基于上下游路口车流量的启发式缺失道路车流量推算方法,包括以下步骤:

(1)建立路口和道路的联系:为所有路口和道路建立内存对象,使得每条道路有唯一上游路口和唯一下游路口,并为对象提供唯一ID;将路口对象放入集合Junctions中,将所有道路对象放入集合Edges中;对于每条道路:设置道路对象的上游路口的ID和下游路口的ID;在上游路口的离开道路集合中添加该道路的ID;在下游路口的进入道路集合中添加该道路的ID;

(2)标记流量,区分未知流量道路:读取已知的带有道路ID和流量的输入数据,将流量值非0的道路ID和流量值存入流量映射集合Demands中;根据Edges集合,将Demands集合中未出现过的道路的流量标记为0,存入Demands中,并将道路ID放入未知流量集合U中;

(3)计算初始流量差指标,记为min_d,流量差指标d的计算方法如下所示:

其中,V表示所有的路口节点,v表示某个路口节点,ed(v)表示所有以v为终点的道路集合,i表示某一条进入该路口的道路,bg(v)表示所有以v为起点的道路集合,o表示某一条离开该路口的道路,f(i)表示进入道路的车流量,f(o)表示离开道路的车流量;

(4)进行启发式搜索:根据每条未知车流量道路的上游路口和下游路口的车流量情况计算未知道路的车流量,每条未知流量道路的流量值更新作为一种方案,计算该方案的流量差指标,每次迭代选取流量差最小的一种方案,直到达到迭代次数或者流量差指标不能下降为止;

(5)输出推算结果,即输出一个映射集合Map,包含路网上所有道路ID和车流量数据的映射。

进一步地,所述步骤(4)中,迭代前先判断是否达到迭代次数,达到则结束,否则初始化本轮方案:设置需要更新的道路ID为空,对应的流量更新值为0,然后开始迭代,每轮迭代包括下子步骤:

(4.1)保存道路流量旧值:从未知流量的道路集合U中按集合元素访问顺序获取一个道路ID,保留该道路在流量映射集合Demands中的流量值v_old,然后在集合Demands中设置该道路流量为0;

(4.2)根据上游路口车流量情况计算道路缺失车流量f0,如下所示:

其中,p表示道路的上游路口;ed(p)表示所有以p为终点的道路集合;bg(p)表示所有以p为起点的道路集合;k函数表示过滤出车流量数据非0的道路;uk函数表示过滤出车流量为0的道路;s表示求集合的大小;i表示某一条进入该路口的道路;o表示某一条离开该路口的道路;f(i)表示进入道路i的车流量;f(o)表示离开道路o的车流量;

(4.3)根据下游路口车流量情况计算道路缺失车流量f1,如下所示:

其中,q表示道路的下游路口;ed(q)表示所有以q为终点的道路集合;bg(q)表示所有以q为起点的道路集合;k函数表示过滤出车流量数据非0的道路;uk函数表示过滤出车流量为0的道路;s表示求集合的大小;i表示某一条进入该路口的道路;o表示某一条离开该路口的道路;f(i)表示进入道路i的车流量;f(o)表示离开道路o的车流量;

(4.4)根据步骤(4.2)得到的f0和步骤(4.3)得到的f1计算缺失道路的车流量f;

(4.5)方案评价与更新:将该道路流量标记为f,利用步骤(3)中的流量差指标计算方法计算此方案的流量差指标d,然后将流量映射集合Demands中该道路的流量值设置成v_old,如果d<min_d,则更新本次迭代的方案:将需要更新的道路ID设置为该道路的ID,将方案需要设置的道路流量值设置为f,并设置min_d的值为d,如果d>=min_d,不需要任何操作;

(4.6)继续按上述步骤遍历集合中的其它道路,集合U中道路遍历结束后,判断更新方案中需要更新的道路ID是否为空,为空则算法结束,否则按方案更新道路的流量值,并开始下轮迭代。

进一步地,所述步骤(4.2)中,根据道路ID获取道路对象,然后通过道路对象的上游路口ID在Junctions集合中找到上游路口对象p;k函数实现步骤包括:初始化计数器值为0,遍历集合中道路,根据道路ID去流量映射集合Demands中找到该道路的车流量值,如果车流量值不是0则计数器加1,返回总的计数值;uk函数实现步骤包括:初始化计数器值为0,遍历集合中道路,根据道路ID去流量映射集合Demands中找到该道路的车流量值,如果车流量值是0则计数器加1,返回总的计数值。

进一步地,所述步骤(4.3)中,根据道路ID获取道路对象,然后通过道路对象的下游路口ID在Junctions集合中找到下游路口对象q;k函数实现步骤包括:初始化计数器值为0,遍历集合中道路,根据道路ID去流量映射集合Demands中找到该道路的车流量值,如果车流量值不是0则计数器加1,返回总的计数值;uk函数实现步骤包括:初始化计数器值为0,遍历集合中道路,根据道路ID去流量映射集合Demands中找到该道路的车流量值,如果车流量值是0则计数器加1,返回总的计数值。

进一步地,所述步骤(4.4)中,缺失道路的车流量f计算公式如下:

其中,abs函数表示自定义的取正函数,如下所示:

本发明利用上游路口车流量状况计算出一个值f0,利用下游路口车流量状况计算出一个值f1,大部分道路都是取二者的平均值作为缺失道路的流量值f,并没有以单独的一个值作为缺失值,其余的一些道路也排除了流量为负数的异常情况,可以减少数据本身质量的影响,减少误差范围。

本发明中的缺失道路的值是可以动态调整反复更新的,因为会存在这样的情况:缺失车流量道路的上下游路口也存在其它进出道路缺失车流量值,当某次迭代中,这些道路中某条道路的流量值被设置后,当前道路也可以在下次迭代中获得更好的更新方案。整个算法过程中,缺失道路的流量的值都是在不断调整,目标是使流量差值最小化。这样的机制可以使得一些比较确定的值先更新,然后通过迭代,把道路流量按照路网结构传递出去,使得更多的未知道路的流量值得到设置,提高了缺失车流量值的填补率。

本发明通过预先设置迭代次数的大小,可以控制迭代进行的次数,可以在根据应用需求在较短时间内获得一个推算结果,可以使应用适用于一些实时处理的场景。此外,由于本发明是基于部分道路的车流量数据推算整个路网的车流量数据,所以已有部分的车流量数据取决了整个推算效果。总而言之,该推算方法能够给出一个更加完善的车流量分布情况,缓解车流量数据不足的问题,提高上层应用的服务质量。

附图说明

图1为本发明方法的流程图;

图2为标记好ID和车流量的路网拓扑图,车流量单位是辆每小时,问号表示该道路的车流量未知,图中ID为e4和e14的道路的车流量未知。

具体实施方式

下面参照附图并结合实施例对本发明做出进一步详细描述,但本发明不限于所给出的例子。

如图1所示,本发明提供的一种基于上下游路口车流量的启发式缺失道路车流量推算方法,包括以下步骤:

(1)建立路口和道路的联系:为所有路口(包括十字路口和其他所有分叉路口)和道路建立内存对象,使得每条道路有唯一上游路口和唯一下游路口,并为对象提供唯一ID;将路口对象放入集合Junctions中,将所有道路对象放入集合Edges中;对于每条道路:设置道路对象的上游路口的ID和下游路口的ID;在上游路口的离开道路集合中添加该道路的ID;在下游路口的进入道路集合中添加该道路的ID;

(2)标记流量,区分未知流量道路:从文件中全部读取带有道路ID和流量的输入数据(文件中存放了已知车流量的道路数据,每一行都存有道路ID和对应的车流量两个数据,以逗号隔开,有多少条道路的车流量已知就有多少行数据),将流量值非0的道路ID和流量值存入流量映射集合Demands中;然后根据Edges集合,将Demands中未出现过的道路的流量标记为0,存入Demands中,并将道路ID放入未知流量集合U中;

(3)计算初始流量差指标,记为min_d,流量差指标d的计算方法如下所示:

其中,V表示所有的路口节点,v表示某个路口节点(代表路口),ed(v)表示所有以v为终点的道路集合(也就是进入该路口的道路),i表示某一条进入该路口的道路,bg(v)表示所有以v为起点的道路集合(也就是离开该路口的道路),o表示某一条离开该路口的道路。f(i)表示进入道路的车流量,f(o)表示离开道路的车流量;

(4)进行启发式搜索:根据每条未知车流量道路的上游路口(进入该道路的交叉口)和下游路口(离开该道路会进入的交叉口)这两个路口的车流量情况计算未知道路的车流量,每条未知流量道路的流量值更新作为一种方案,按(3)中方法计算该方案的流量差指标,每次迭代选取流量差最小的一种方案,直到达到迭代次数(迭代次数在函数调用中作为参数传入)或者流量差指标不能下降为止;

(5)输出推算结果,即输出一个映射集合(Map),包含路网上所有道路ID和车流量数据的映射。

进一步地,迭代前先判断是否达到迭代次数,达到则结束,否则初始化本轮方案:设置需要更新的道路ID为空(null),对应的流量更新值为0;然后开始迭代,每轮迭代包括下子步骤:

(4.1)保存道路流量旧值:从未知流量的道路集合U中按集合元素访问顺序获取一个道路ID,保留该道路在流量映射集合Demands中的流量值v_old,然后在集合Demands中设置该道路流量为0(0值表明该道路流量未知);

(4.2)根据上游路口车流量情况计算道路缺失车流量f0,如下所示:

其中,p表示道路的上游路口,可以根据道路ID获取道路对象,然后通过道路对象的上游路口ID在Junctions集合中找到上游路口对象;ed(p)表示所有以p为终点的道路集合,也就是路口对象的进入道路集合;bg(p)表示所有以p为起点的道路集合,也就是路口对象的离开道路集合;k函数表示过滤出车流量数据非0的道路(k函数步骤包括:初始化计数器值为0,遍历集合中道路,根据道路ID去流量映射集合Demands中找到该道路的车流量值,如果车流量值不是0则计数器加1,返回总的计数值);uk函数表示过滤出车流量为0的道路(uk函数步骤包括:初始化计数器值为0,遍历集合中道路,根据道路ID去流量映射集合Demands中找到该道路的车流量值,如果车流量值是0则计数器加1,返回总的计数值);s表示求集合的大小;i表示某一条进入该路口的道路;o表示某一条离开该路口的道路;f(i)表示进入道路i的车流量;f(o)表示离开道路o的车流量;

(4.3)根据下游路口车流量情况计算道路缺失车流量f1,如下所示:

其中,q表示道路的下游路口,可以根据道路ID获取道路对象,然后通过道路对象的下游路口ID在Junctions集合中找到下游路口对象;ed(q)表示所有以q为终点的道路集合,也就是路口对象的进入道路集合;bg(q)表示所有以q为起点的道路集合,也就是路口对象的离开道路集合;k函数表示过滤出车流量数据非0的道路(k函数步骤包括:初始化计数器值为0,遍历集合中道路,根据道路ID去流量映射集合Demands中找到该道路的车流量值,如果车流量值不是0则计数器加1,返回总的计数值);uk函数表示过滤出车流量为0的道路(uk函数步骤包括:初始化计数器值为0,遍历集合中道路,根据道路ID去流量映射集合Demands中找到该道路的车流量值,如果车流量值是0则计数器加1,返回总的计数值);s表示求集合的大小;i表示某一条进入该路口的道路;o表示某一条离开该路口的道路;f(i)表示进入道路i的车流量;f(o)表示离开道路o的车流量。

(4.4)根据步骤(4.2)得到的f0和步骤(4.3)得到的f1计算缺失道路的车流量f,计算过程如下所示:

其中,abs函数表示自定义的取正函数,如下所示:

之所以这里要考虑abs(f0)或者abs(f1)等于0的情况,是因为一方面由于数据质量的问题,可能导致流量f0或者f1计算出来为负数,此时经过abs函数计算后值为0;另一方面对于进入流量和离开流量没有设备统计的路口,会导致f0或者f1的某一个值计算出来为0。当这两种情况出现时,为了避免0值的影响,不能取二者的平均,而是要取abs(f0)和abs(f1)两个值中的较大的那一个。

(4.5)方案评价与更新:将该道路流量标记为f,利用步骤(3)中的流量差指标计算方法计算此方案的流量差指标d,然后将流量映射集合Demands中该道路的流量值设置成v_old,如果d<min_d,则更新本次迭代的方案:将需要更新的道路ID设置为该道路的ID,将方案需要设置的道路流量值设置为f,并设置min_d的值为d,如果d>=min_d,不需要任何操作;

(4.6)继续按上述步骤遍历集合中的其它道路,集合U中道路遍历结束后,判断更新方案中需要更新的道路ID是否为空(null),为空则算法结束,否则按方案更新道路的流量值,并开始下轮迭代。

实施例

步骤一:为所有道路和路口标注ID(如图2所示),为每条道路创建一个Edge对象并设置对象的ID(需要定义Edge类,该类具有3个属性:道路ID、上游路口ID、下游路口ID),为每个路口创建一个Junction对象并设置对象的ID(需要定义Junction类,该类具有三个属性,路口ID、路口进入道路ID集合、路口离开道路ID集合)。创建完毕后,将所有道路对象放入集合Edges中,将路口对象放入集合Junctions中。遍历道路集合Edges,对于每条道路:设置道路对象的上游路口的ID和下游路口的ID;在上游路口的离开道路集合中添加该道路的ID;在下游路口的进入道路集合中添加该道路的ID。

步骤二,标记流量,区分未知流量道路:获取路网上车流量的情况(如图2所示),将已知的车流量数据存放到文件中,每一行都存有道路ID和对应的车流量两个数据,以逗号隔开,车流量未知部分不存入。从上述文件中读取道路ID和车流量数据,将流量值非0的道路的ID和对应的车流量存入流量映射集合Demands中;然后对Demands中的ID和Edges中的ID进行比对,对那些在Edges中出现过、在Demands中未出现过的道路,进行这样的操作:在Demands中存入道路ID和0值(车流量),并将道路ID放入未知流量集合U中。

步骤三,计算初始流量差指标,记为min_d:流量差指标的计算需要遍历Junctions集合,方法如下所示:

1)首先是j1路口对象,遍历路口对象的进入道路集合(集合中有ID为e2、e4、e6、e14的道路),对于每一条道路根据ID从Demands中获取流量进行累加(ID为e2、e4、e6、e14的道路对应的车流量为700、0、800、0),求得进入车流量的和为1500;遍历路口对象的出口道路集合(集合中有ID为e1、e3、e5、e7的道路),对于每一条道路根据ID从Demands中获取流量进行累加(ID为e1、e3、e5、e7的道路对应的车流量为500、600、700、700),求得离开车流量的和为2500;然后进入车流量的和减去离开车流量的和,差值为-1000,求绝对值后得出流量差为1000。

2)按上述方法,得出j0的流量差为600,j2的流量差为500,j3的流量差为100,j4的流量差为200,j5的流量差为200,j6的流量差为100,j7的流量差为300。

3)将各个路口的流量差累加,得出初始流量差指标min_d的值为3000。

步骤四,进行启发式搜索:迭代前先判断当前迭代次数(当前为0)是否达到输入的迭代次数(本实施例传入为1000),未到达迭代次数,则开始初始化本轮方案:设置需要更新的道路ID为null,对应的流量更新值为0。然后开始迭代,每轮迭代包括下子步骤:

(4.1)保存道路流量旧值:从未知流量的道路集合U中按集合元素访问顺序获取一个道路ID(这里第一个ID为e14,下文以e14为例),从流量映射集合Demands中获得e14当前的的流量值为0,赋值给变量v_old,然后在集合Demands中设置该道路流量为0。

(4.2)根据上游路口车流量情况计算道路缺失车流量,如下所示:

从Edges集合中获得ID为e14的对象,根据e14对象的引用获得上游路口p,其ID为j2,遍历p进入路口集合ed(p),结合Demands集合计算进入的总流量之和为2450,然后获得集合ed(p)的大小s(ed(p))为4,统计集合ed(p)中车流量非0道路数s(k(ed(p)))为4;结合Demands集合计算离开道路集合bg(p)的流量之和为1950,计算流出道路集合车流量道路为0的数目s(uk(bg(p)))为1。代入下面公式得到f0的值为500。

(4.3)根据下游路口车流量情况计算道路缺失车流量,如下所示:

从Edges集合中获得ID为e14的对象,根据e14对象的引用获得下游路口q,其ID为j1,遍历q离开路口集合bg(q),结合Demands集合计算离开的总流量之和为2500,然后获得集合bg(q)的大小s(bg(q))为4,统计集bg(q)中车流量非0道路数s(k(bg(q)))为4;结合Demands集合计算进入道路集合ed(q)的流量之和为1500,计算进入道路集合车流量道路为0的数目s(uk(ed(q)))为2。代入下面公式得到f1的值为500。

(4.4)根据(4.2)中算出的f0和(4.3)中算出的f1计算缺失道路的车流量f。计算过程如下所示:

其中,abs函数表示自定义的取正函数,如下所示:

abs(f0)为500,abs(f1)为500,两者都不为0,则f为二者的平均值为500。

(4.5)方案评价与更新:在集合Demands将该道路e14的流量标记为500,利用步骤三中的流量差指标计算方法计算此方案的流量差指标d为2000,然后将流量映射集合Demands中该道路的流量设置成v_old,这里d<min_d(2000<3000),则更新本次迭代的方案:将需要更新的道路ID设置为该道路的ID(e14),将方案需要设置的道路流量值设置为f(500),并设置min_d的值为d(2000)。

(4.6)继续按上述步骤遍历集合中的其它道路(总共e14、e4两条道路的车流量未知,已经遍历了e14,还剩一条e4),按上述e14中的计算方法,得到e4的设置方案为550,该方案的流量差指标为1900,小于min_d(2000),则将需要更新的道路ID设置为e4,将方案需要设置的道路流量值设置为550,并设置min_d的值为1900。至此,本轮迭代集合U中道路遍历结束,更新方案中需要更新的道路ID为e4,不为空,则在Demands中设置e4的车流量值为550,并开始下轮迭代。

按照上述迭代方法:

第二轮迭代最佳方案是将道路e14的车流量值设为475,min_d的值为1000。

第三轮迭代无法减小min_d的值,结束所有迭代。

步骤五,输出推算结果:返回Demands映射集合,该集合包含了路网上所有道路ID和车流量数据的映射,其中:道路e4的未知车流量值被设置为550,道路e14的未知车流量值被设置为475。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1