CN115344795A - 一种基于多路归并的地铁乘客轨迹相似性搜索方法 - Google Patents
一种基于多路归并的地铁乘客轨迹相似性搜索方法 Download PDFInfo
- Publication number
- CN115344795A CN115344795A CN202211269077.XA CN202211269077A CN115344795A CN 115344795 A CN115344795 A CN 115344795A CN 202211269077 A CN202211269077 A CN 202211269077A CN 115344795 A CN115344795 A CN 115344795A
- Authority
- CN
- China
- Prior art keywords
- card
- time
- ticket
- station
- spcl
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9537—Spatial or temporal dependent retrieval, e.g. spatiotemporal queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2291—User-Defined Types; Storage management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/29—Geographical information databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Remote Sensing (AREA)
- Devices For Checking Fares Or Tickets At Control Points (AREA)
Abstract
本发明涉及一种基于多路归并的地铁乘客轨迹相似性搜索方法,属于轨迹相似性搜索领域技术领域。首先获取乘客进出站时实时产生的所有票卡记录,再以多级索引的方式对全部票卡记录进行存储,所述全部票卡记录包括历史票卡和实时票卡记录,接着初始化查询参数,调用查询接口,对全部票卡记录进行查询,然后使用多轮归并,每轮内以多线程分段并行的方式对票卡集合进行轨迹相似性搜索。将输入的一组时空约束SPCL按一组起止点进行分段,以分段方式去搜索相似或相同的轨迹,每轮搜索的结果是一组候选轨迹,最后一轮得到与SPCL高度相似的轨迹集合。本发明效率高、成本低、并且支持实时的查询。
Description
技术领域
本发明涉及一种基于多路归并的地铁乘客轨迹相似性搜索方法,属于轨迹相似性搜索技术领域。
背景技术
现代城市轨道交通(地铁)系统因其高效、准点和舒适等特点,已经成为城市居民的主要出行方式。随着城市人口的增长和路网规模不断扩张。密闭空间内复杂网络、高速客流给轨道交通的管理和运营带来了前所未有的压力。如何存储和分析千万级别乘客历史轨迹是轨道交通精细化运营的基础。以治安管理为例,警察想了解哪些乘客经常出现在案发现场,用来辅助断案确定嫌疑人。以新冠疫情防疫流动调查为例,需要快速确定某阳性确诊者最近与那些乘客有时空交集。这两种情况都属于时空碰撞的问题,也可以称之为轨迹的相似性搜索。
但是,如何在海量的乘客历史轨迹中进行准确快速的进行轨迹相似性搜索是一个极具挑战的难题。以深圳地铁为例,目前有12条线路,共计400个站点,活跃公交卡数量在1千万以上。平均每天服务500万乘客,每位乘客平均每天产生4条刷卡记录,每条记录包含了卡号、刷卡时间、地铁站名、闸机编号和进出站标记等信息。整个地铁系统每天产生2000万条刷卡记录,每月的刷卡记录累计有6亿条,每半年的刷卡记录为36亿条。对如此海量的数据进行存储和查询,需要寻找一个效率和成本都能接受的解决方案。
轨迹的相似性搜索是一个经典的研究问题,学术界和工业界进行了大量的研究。但是,大部分研究都关注地面车辆或移动设备的GPS轨迹,一系列优化措施也是针对GPS轨迹的时空特征进行设计。但是,这些优化措施无法实施在轨道交通乘客轨迹场景下。当前关于轨迹相似性搜索的研究现状有如下几个特点:
(1)目前没有公开的文献提及如何进行轨道交通乘客轨迹的时空碰撞或相似性方法。所有关于轨迹相似性搜索的方法都以地面GPS轨迹为研究对象;
(2)GPS轨迹相似性搜索方法不能直接运用于地铁乘客轨迹相似性搜索;
(3)GPS轨迹时空特征和地铁乘客轨迹时空特征差异明显,针对GPS轨迹的一系列优化方法在地铁乘客轨迹场景下无效。
具体来讲,地铁乘客轨迹有如下几个独特的特点:
高度稀疏,地面车辆在一次行程中可能会产生数以百计的GPS记录,但是地铁乘客轨迹只有进出站两条记录,例如起点站为A站,终点站为B站,路网中的换乘方式等中间信息缺失。
有拓扑结构,地铁乘客刷卡进站以后,一定会有对应的出站信息。例如从A站进,从B站出,AB可以理解为一组OD(original destination)。
对称性,以通勤的乘客为例,某位乘客早上从居住地附近地铁站A出发,到达工作地附近地铁站B,晚上的行程则相反,会形成类ABBA形式的轨迹。
重复性,以通勤的乘客为例,某位乘客工作日周一到周五每天的轨迹都是ABBA形式。
传统的针对GPS轨迹相似性搜索的方法用在地铁场景下会导致成本高,效率低,时效性差。
针对GPS轨迹相似性搜索的方法使用集群构建分布式索引,需要多台计算机同时协助才能完成搜索。本发明只需要一台计算机即可完成搜索;
针对GPS轨迹相似性搜索的方法需要在分布式环境下多次交互,完成一次搜索需要几秒甚至几十秒,本发明无分布式环境下的网络交互,完成一次轨迹搜索时间少于0.1秒;
针对GPS轨迹相似性搜索的方法针对历史数据的分布式索引一旦构建,新增加的数据需要再次构建索引,并且与之前索引进行合并,不能搜索最新数据。本发明中新增加的数据可以实时追加到已有数据中,可以搜索最新数据。
发明内容
本发明要解决的技术问题是提供一种基于拓扑结构的地铁乘客轨迹时空碰撞方法,解决海量地铁乘客轨迹相似性搜索的问题,用于支撑轨道交通场景下智慧警务和疫情流调等应用。
本发明的技术方案是:一种基于多路归并的地铁乘客轨迹相似性搜索方法,具体步骤为:
Step1:获取乘客进出站时实时产生的所有票卡记录。
所述实时产生的票卡记录是指乘客最新的刷卡记录,本发明实时对乘客的最新刷记录进行采集。所述票卡记录包含的字段包括但不限于卡号、时间戳、地铁站、进出标识,金额信息。
一个(时间戳,地铁站)的组合就代表一个时空“点”,每个卡号代表一个乘客,每条票卡记录对应一个时空点。对属于同一个卡号的票卡记录在时间上进行排序,就构成了乘客在地铁站内的轨迹。
Step2:以多级索引的方式对全部票卡记录进行存储,所述全部票卡记录包括历史票卡和实时票卡记录。
所述多级索引的方式指的是以地铁站、时间戳、卡号三个字段的不同取值范围对全部票卡记录集合进行划分。使用地铁站、时间戳两个字段对票卡集合建立多级索引,该索引可以加速查找满足在一定时间和空间范围内的票卡记录。
Step3:初始化查询参数,调用查询接口,对全部票卡记录进行查询。
所述查询接口具体为:
resList=Search(SPCL,distance,filter,N)(1)
式(1)中,SPCL是多个时空约束,时空约束指的是地铁站名和时间戳的组合,distance是一个阈值,描述票卡轨迹与时空约束的距离,filter是一个布尔型变量,控制在搜索过程中是否开启过滤功能,N控制返回结果的个数。
Step4:使用多轮归并,多线程分段并行的方式对票卡集合进行轨迹相似性搜索。
搜索过程中,使用一组过滤规则对票卡记录集合进行过滤,加速搜索查询过程。
搜索的目的是“在票卡记录集合中,找到几个乘客的历史轨迹,与输入的SPCL高度相似”。通俗一点讲,SPCL代表一个乘客在地铁站的轨迹,Search函数的功能就是找到经常和该乘客一起搭乘地铁的人。
Step5:将SPCL按两个轨迹点为一组进行分段,以分段方式去搜索与该分段相似或相同的轨迹,分段搜索的结果是一组候选轨迹。
分段搜索的过程通过一组多线程并行执行,每一组线程结束后,对候选轨迹进行合并和过滤。
分段搜索的过程经过多轮执行以后,形成最终的一组乘客的轨迹,该组乘客的轨迹与SPCL具有高度相似性。
进一步的,所述Step2具体为:
以地铁站名称,时间区间对票卡记录集合进行不同维度的划分,建立多级索引。
首先将票卡记录按不同地铁站进行分区,再按时间段进一步将票卡分组。分组内部的票卡记录按时间戳由小到大进行排序,若票卡记录时间戳相同,按卡号由小到大排序。
所述多级索引分为一级索引和二级索引。
所述一级索引具体为:保存一组形如<地铁站编号,地铁站名称,票卡记录集合>的三元组,将三元组按地铁站编号由小达到进行排序,具体为:
StationMap={(ID
1
,station
1
,Set
1
), (ID
2
,station
2
,Set
2
),…, (ID
N
,station
N
,
Set
N
)}
式中,ID i 表示地铁站的编号, station i 表示地铁站的名称,Set i 表示该地铁站产生的所有票卡记录集合;StationMap保存了一个映射关系,可以根据ID i 或station i 快速定位该地铁站涉及的所有票卡记录。
一级索引的功能是可以根据地铁站名称快速确定该地铁站涉及的票卡记录集合。
所述二级索引具体为:保存一组形如<时间段编号,时间段,票卡记录数,{<时间戳,卡号,票卡其他字段>,<时间戳,卡号,票卡其他字段>,…,<时间戳,卡号,票卡其他字段>}>的嵌套式四元组,具体为:
timeLMap={(I
1
,tSeg
1
,n
1
,sSet
1
), (I
2
,tSeg
2
,n
2
,sSet
2
),…, (I
M
,tSeg
M
,n
M
,
sSet
M
)}
式中, I i 表示的是时间段编号,tSeg i 表示时间段名称,n表示该时间段范围内产生的票卡记录数量,sSet i 表示该时间段产生的所有票卡记录集合,是Set i 的子集;timeMap保存了一个映射关系,可以根据时间段编号快速确定该时间段产生的票卡记录集合。
二级索引的功能是可以在时间维度上快速确定满足某个时间范围的卡号集合。
所述四元组的外层按时间段编号由小到大存储,四元组的内层分别按时间戳和卡号两个字段进行排序,先按时间戳大小排序,相同时间戳的票卡记录按卡号大小进行排序。
进一步的,Step3中所述SPCL(SpatialTemporalConstrainList)代表一组时间和空间条件约束,时空约束具体为:
SPCL=S 1 (t 1 ) S 2 (t 2 ) S 3 (t 3 )…S n-1 (t n-1 ) S n (t n )(2)
式(2)中,S 1 ~S n 分别代表n个地铁站名称,所述地铁站名称存在重复, t 1 ~t n 代表n个不同的时间戳,所述时间戳按由大到小顺序排列,每一个站点-时间组合代表一个时空约束,例如S 3 (t 3 )就代表t 3 时刻出现在站点S 3 。
Distance是一个整型变量,代表与SPCL的距离,假设SPCL时空约束的个数为M,distance取值为N,那么返回结果集中轨迹的长度在区间[M-N,M+N]内。
Filter是一个布尔变量,取值为0或1,默认为0,所述取值确定了在搜索过程中是否开启过滤功能,1代表开启过滤,0代表不使用过滤功能。
N是一个整型变量,代表在结果中选取与SPCL最相近的N的轨迹,若N为0,则返回全部结果。
ResList是一个票卡轨迹列表,所有满足条件的票卡轨迹,票卡轨迹表示为:
Trajectory={id,(t 1 ,s 1 ), (t 2 ,s 2 ),…, (t n ,s n )}(3)
式(3)中,id为公交卡号,二元组(t i ,s i )代表刷卡记录对应的时间戳和站点。
进一步的,所述Step4具体为:
Step4.1:输入时空约束列表SPCL=S 1 (t 1 ) S 2 (t 2 ) S 3 (t 3 ) …S n-1 (t n-1 ) S n (t n ),n为时空约束的个数。
Step4.2:根据n计算多轮归并的次数,若n满足2 k-1 <n≤2 k ,则归并次数为k。
Step4.3:初始化变量loop=1,初始化时空约束spList=SPCL,初始化任务列表TaskList。
变量loop用于控制循环的结束,spList用于保存归并的中间过程,TaskList用于保存待计算的任务。
Step4.4:判断loop与k的关系,如果loop大于k,跳出循环,转StepE。否则,转Step4.5。
Step4.5:遍历spList,步长为2,将连续两个时空约束形成一个元组(S o (t o ),S d (t d ))作为任务描述符,将任务描述符加入TaskList中。
Step4.6:计算TaskList元素的个数,假设为m,在线程池中选取m个空闲线程。
Step4.7:遍历TaskList,为每个任务描述符指定一个线程,并启动线程执行轨迹集合的交集运算。
计算结果保存在形如式(4)的键值映射结构中,具体为:
SubTRSet=(station,(SubTR 1 , SubTR 2 ,…, SubTR n ))(4)
所述公式(4)描述的是一个键值映射结构,是每轮归并以后的中间结果,是候选卡号轨迹集合。
所述公式(4)中的key为station,即一个地铁站名,具体取值对应每个任务描述元组的第二个元素S d (t d )的地铁站名。
所述公式(4)嵌套多个公式(5)的结构,具体为:
SubTR=(card,len,missCount,PointList)(5)
所述公式(5)描述的是搜索过程中候选卡号的相关属性,card代表一个卡号,len代表PointList中点的个数,missCount是一个指标,量化PointList与时空约束列表的距离,PointList是在搜索过程中候选card形成的时空点集合。
所述公式(5)嵌套多个公式(6)的结构,具体为:
PointList={(t 1 ,s 1 ), (t 2 ,s 2 ),…, (t n ,s n )}(6)
公式(6)描述了点列表,点列表中的每个元素都代表一个(时间戳,站点)的组合,这些点按时间从小到大排列。
Step4.8:通过珊栏(Barrier)的方式等待Step4.7中的线程全部结束。
Step4.9:根据调用接口中变量filter的值,判断是否调用过滤函数,若调用,则使用过滤策略对中间结果进行过滤。
Step4.10:清空spList,遍历TaskList,将每个元组的S d (t d )加入到spList中,清空TaskList。
Step4.11:loop=loop+1,变量loop的值增加1,转Step4。
所述loop变量用来控制是否跳出循环,此处循环次数对应归并次数,归并次数由k决定。每循环(归并)一次,loop的值就增加1。Step4中判断loop与k的关系,如果loop大于k,则认为不必进行下一次循环。此处的每个循环不是简单的重复,每次循环的最后,中间结果都会发生变化。最后一次循环,可以获取最终结果。
StepE:结束。
进一步的,所述Step4.7具体为:
Step4.7.1:输入一个元组(A(t 1 ),B(t 2 ))和带多级索引的票卡存储结构,元组中的每个元素都代表一个(站点,时间戳)的组合。
Step4.7.2:根据时间戳计算时间段相对于第一个时间段的偏移,表示为:
offset 1 =index(t 1 ),offset 2 =index(t 2 )
再根据时间戳计算对应的时间段编号,借助时间段编号可以快速定位在该时间段内产生的刷卡记录。(通过时间段编号定位在该时间段内产生的刷卡记录)
所述时间戳是一个时间点,精确到时分秒。所述时间段是一个时间范围,例如30分钟,以该时间段起点时间标记时间段。时间段序号:时间段相对于第一个时间段的位置偏移。
起点时间段为t 0 ,时间段对应的编号为id 0 ,Δ t 为时间间隔,时间戳t 1 位于t 0 的之后的偏移为offset 1 =id 0 +(t 1 -t 0 )/ Δ t 。
Step4.7.3:根据站点名称A和时间段编号,获取对应的卡号集合SetA:SetA= GetCardList(A,offset 1 )。根据站点名称B和时间段编号,获取对应的卡号集合SetB:SetB= GetCardList(B,offset 2 )。
卡号集合SetA和SetB的表示形式均为:{C 1 ,C 2 ,…,C n },集合中每一个元素均为一个卡号,卡号按由小到达顺序排列。
Step4.7.4:对两个票卡集合进行交集运算,即SetRes=Inter(SetA,SetB),交集中的卡号有个共同的特点,卡号需同时满足时间约束A(t 1 )和B(t 2 ),也意味着卡号对应的轨迹与时空约束高度相似。
Step4.7.5:遍历SetRes中的卡号,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,missCount,(t i ,A),(t i+1 ,B))(7)
式(7)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数,后续的二元组(t i ,A),(t i+1 ,B)代表时间戳和站点信息。
Step4.7.6:InA=Sub(SetRes,SetA), InB=Sub(SetRes,SetB)计算集合差集,得出集合SetRes中只在SetA中出现的卡号,只在SetB中出现的卡号。
遍历集合InA,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,missCount,(t i ,A),(null,B))(8a)
式(8a)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数。
遍历集合InB,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,missCount,(null,A),(t i+1 ,B))(8b)
式(8b)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数,null代表该卡号的轨迹与SPCL在B站没有交集。
Step4.4.7:返回一组为字段组织形式如式(4)的结果。
公式(4)中的station,代表了任务描述符元组第二个元素对应的站点名称,辅助记录归并多路归并的中间过程。
进一步的,所述Step4.9中的过滤策略为:
为了辅助过滤优化策略的实施,设计了一组数据结构来保存多路归并过程中的中间结果。这些数据结构,如公式(9)~(11)所示。
PointList={(t 1 ,s 1 ), (t 2 ,s 2 ),…, (t n ,s n )}(9)
公式(9)描述了点列表,点列表中的每个元素都代表一个(时间戳,站点)的组合,这些点在时间上有序。
SubTR=(card,len,missCount,PointList)(10)
公式(10)描述的是搜索过程中候选卡号的相关属性。card代表一个卡号,len代表PointList中点的个数,missCount是一个指标,量化PointList与时空约束列表的距离,PointList是在搜索过程中card形成的时空点集合。
SubTRSet=(station,(SubTR 1 , SubTR 2 ,…, SubTR n ))(11)
公式(11)描述的是候选卡号轨迹集合,也就是每轮归并以后的中间结果。
具体步骤为:
Step4.9.1:向过滤函数传入SubTRSet,n,k,loop,distance,filter等6个变量的值。
n为SPCL的长度,k为调度算法中要归并的次数,loop代表当前第几轮归并,distance代表SPCL的距离,filter代表过滤策略。
Step4.9.2:计算SubTRSet元素个数,假设为m。
Step4.9.3:初始化变量i为1。
Step4.9.4:判断i与m的关系,如果i小于等于m,转下一步Step4.9.5,否则转StepE。
Step4.9.5:根据下标i,在集合SubTRSet中获取第i个元素,每个元素均为SubTR类型,获取SubTR中的点序列PointList,表示为:pointList=SubTRSet(i).SubTR.PointList。
Step4.9.6:d=CalculateDistance(PointList,SPCL),计算点列表与SPCL的距离。
Step4.9.7:判断d与distance的关系,如果d大于diatnce,在SubTRSet删除第i个元素。
Step4.9.8:i=i+1,转Step4.9.4。
StepE:返回被过滤以后的集合SubTRSet,结束。
本发明的有益效果是:解决了轨道交通场景下时空碰撞和轨迹相似性搜索的问题、能够支撑轨道交通场景下智慧警务和疫情流调等应用。本发明的特点是效率高、成本低、并且支持近实时的查询。
附图说明
图1是本发明的票卡记录多级索引示意图;
图2是本发明的多路归并搜索示意图-以四组OD八个不同站点为例。
具体实施方式
下面结合附图和具体实施方式,对本发明作进一步说明。
一种基于多路归并的地铁乘客轨迹相似性搜索方法,具体步骤为:
Step1:获取乘客进出站时实时产生的所有票卡记录。
所述实时产生的票卡记录是指乘客最新的刷卡记录,本发明实时对乘客的最新刷记录进行采集。所述票卡记录包含的字段包括但不限于卡号、时间戳、地铁站、进出标识,金额信息。
一个(时间戳,地铁站)的组合就代表一个时空“点”,每个卡号代表一个乘客,每条票卡记录对应一个时空点。对属于同一个卡号的票卡记录在时间上进行排序,就构成了乘客在地铁站内的轨迹。
Step2:以多级索引的方式对全部票卡记录进行存储,所述全部票卡记录包括历史票卡和实时票卡记录。
所述多级索引的方式指的是以地铁站、时间戳、卡号三个字段的不同取值范围对全部票卡记录集合进行划分。使用地铁站、时间戳两个字段对票卡集合建立多级索引,该索引可以加速查找满足在一定时间和空间范围内的票卡记录。
Step3:初始化查询参数,调用查询接口,对全部票卡记录进行查询。
所述查询接口具体为:
resList=Search(SPCL,distance,filter,N)(1)
式(1)中,SPCL是多个时空约束,时空约束指的是地铁站名和时间戳的组合,distance是一个阈值,描述票卡轨迹与时空约束的距离,filter是一个布尔型变量,控制在搜索过程中是否开启过滤功能,N控制返回结果的个数。
Step4:使用多轮归并,多线程分段并行的方式对票卡集合进行轨迹相似性搜索。
搜索过程中,使用一组过滤规则对票卡记录集合进行过滤,加速搜索查询过程。
搜索的目的是“在票卡记录集合中,找到几个乘客的历史轨迹,与输入的SPCL高度相似”。通俗一点讲,SPCL代表一个乘客在地铁站的轨迹,Search函数的功能就是找到经常和该乘客一起搭乘地铁的人。
Step5:将SPCL按两个轨迹点为一组进行分段,以分段方式去搜索与该分段相似或相同的轨迹,分段搜索的结果是一组候选轨迹。
分段搜索的过程通过一组多线程并行执行,每一组线程结束后,对候选轨迹进行合并和过滤。
分段搜索的过程经过多轮执行以后,形成最终的一组乘客的轨迹,该组乘客的轨迹与SPCL具有高度相似性。
进一步的,所述Step2具体为:
以地铁站名称,时间区间对票卡记录集合进行不同维度的划分,建立多级索引。
首先将票卡记录按不同地铁站进行分区,再按时间段进一步将票卡分组。分组内部的票卡记录按时间戳由小到大进行排序,若票卡记录时间戳相同,按卡号由小到大排序。
所述多级索引分为一级索引和二级索引。
所述一级索引具体为:保存一组形如<地铁站编号,地铁站名称,票卡记录集合>的三元组,将三元组按地铁站编号由小到大进行排序,具体为:
StationMap={(ID
1
,station
1
,Set
1
),( ID
2
,station
2
,Set
2
),…, ( ID
N
,station
N
,
Set
N
)}
式中,ID i 表示地铁站的编号,station i 表示地铁站的名称,Set i 表示该地铁站产生的所有票卡记录集合;
一级索引的功能是可以根据地铁站名称快速确定该地铁站涉及的票卡记录集合。
所述二级索引具体为:保存一组形如<时间段编号,时间段,票卡记录数,{<时间戳,卡号,票卡其他字段>,<时间戳,卡号,票卡其他字段>,…,<时间戳,卡号,票卡其他字段>}>的嵌套式四元组,具体为:
timeLMap={(I
1
,tSeg
1
,n
1
,sSet
1
), (I
2
,tSeg
2
,n
2
,sSet
2
),…, (I
M
,tSeg
M
,n
M
,
sSet
M
)}
式中,I i 表示的是时间段编号,tSeg i 表示时间段名称,n表示该时间段范围内产生的票卡记录数量,sSet i 表示该时间段产生的所有票卡记录集合,是Set i 的子集;
二级索引的功能是可以在时间维度上快速确定满足某个时间范围的卡号集合。
所述四元组的外层按时间段编号由小到大存储,四元组的内层分别按时间戳和卡号两个字段进行排序,先按时间戳大小排序,相同时间戳的票卡记录按卡号大小进行排序。
进一步的,Step3中所述SPCL(SpatialTemporalConstrainList)代表一组时间和空间条件约束,时空约束具体为:
SPCL=S 1 (t 1 ) S 2 (t 2 ) S 3 (t 3 )…S n-1 (t n-1 ) S n (t n )(2)
式(2)中,S 1 ~S n 分别代表n个地铁站名称,所述地铁站名称存在重复,t 1 ~t n 代表n个不同的时间戳,所述时间戳按由大到小顺序排列,每一个站点-时间组合代表一个时空约束,例如S 3 (t 3 )就代表t 3 时刻出现在站点S 3 。
Distance是一个整型变量,代表与SPCL的距离,假设SPCL时空约束的个数为M,distance取值为N,那么返回结果集中轨迹的长度在区间[M-N,M+N]内。
Filter是一个布尔变量,取值为0或1,默认为0,所述取值确定了在搜索过程中是否开启过滤功能,1代表开启过滤,0代表不使用过滤功能。
N是一个整型变量,代表在结果中选取与SPCL最相近的N的轨迹,若N为0,则返回全部结果。
ResList是一个票卡轨迹列表,所有满足条件的票卡轨迹,票卡轨迹表示为:
Trajectory={id,(t 1 ,s 1 ), (t 2 ,s 2 ),…, (t n ,s n )}(3)
式(3)中,id为公交卡号,二元组 (t i ,s i )代表拍卡记录对应的时间戳和站点。
进一步的,所述Step4具体为:
Step4.1:输入时空约束列表SPCL=S 1 (t 1 ) S 2 (t 2 ) S 3 (t 3 ) …S n-1 (t n-1 ) S n (t n ),n为时空约束的个数。
Step4.2:根据n计算多轮归并的次数,若n满足2 k-1 <n≤2 k ,则归并次数为k。
Step4.3:初始化变量loop=1,初始化时空约束spList=SPCL,初始化任务列表TaskList。
变量loop用于控制循环的结束,spList用于保存归并的中间过程,TaskList用于保存待计算的任务。
Step4.4:判断loop与k的关系,如果loop大于k,跳出循环,转StepE。否则,转Step4.5。
Step4.5:遍历spList,步长为2,将连续两个时空约束形成一个元组(S o (t o ),S d (t d ))作为任务描述符,将任务描述符加入TaskList中。
若spList中元素个数为奇数,以最后一个元素为基础构建形如(null,S n (t n ))的元组,加入到TaskList中。
Step4.6:计算TaskList元素的个数,假设为m,在线程池中选取m个空闲线程。
Step4.7:遍历TaskList,为每个任务描述符指定一个线程,并启动线程执行轨迹集合的交集运算。
计算结果保存在形如式(4)的键值映射结构中,具体为:
SubTRSet=(station,(SubTR 1 , SubTR 2 ,…, SubTR n ))(4)
所述公式(4)描述的是一个键值映射结构,是每轮归并以后的中间结果,是候选卡号轨迹集合。
所述公式(4)中的key为station,即一个地铁站名,具体取值对应每个任务描述元组的第二个元素S d (t d )的地铁站名。
所述公式(4)嵌套多个公式(5)的结构,具体为:
SubTR=(card,len,missCount,PointList)(5)
所述公式(5)描述的是搜索过程中候选卡号的相关属性,card代表一个卡号,len代表PointList中点的个数,missCount是一个指标,量化PointList与时空约束列表的距离,PointList是在搜索过程中候选card形成的时空点集合。
所述公式(5)嵌套多个公式(6)的结构,具体为:
PointList={(t 1 ,s 1 ), (t 2 ,s 2 ),…, (t n ,s n )}(6)
公式(6)描述了点列表,点列表中的每个元素都代表一个(时间戳,站点)的组合,这些点按时间从小到大排列。
Step4.8:通过珊栏(Barrier)的方式等待Step4.7中的线程全部结束。
Step4.9:根据调用接口中变量filter的值,判断是否调用过滤函数,若调用,则使用过滤策略对中间结果进行过滤。
Step4.10:清空spList,遍历TaskList,将每个元组的S d (t d )加入到spList中,清空TaskList。
Step4.11:loop=loop+1,变量loop的值增加1,转Step4。
所述loop变量用来控制是否跳出循环,此处循环次数对应归并次数,归并次数由k决定。每循环(归并)一次,loop的值就增加1。Step4中判断loop与k的关系,如果loop大于k,则认为不必进行下一次循环。此处的每个循环不是简单的重复,每次循环的最后,中间结果都会发生变化。最后一次循环,可以获取最终结果。
StepE:结束。
进一步的,所述Step4.7具体为:
Step4.7.1:输入一个元组(A(t 1 ),B(t 2 ))和带多级索引的票卡存储结构,元组中的每个元素都代表一个(站点,时间戳)的组合。
Step4.7.2:根据时间戳计算时间段相对于第一个时间段的偏移,表示为:
offset 1 =index(t 1 ),offset 2 =index(t 2 )
再根据时间戳计算对应的时间段编号,借助时间段编号可以快速定位在该时间段内产生的刷卡记录。(通过时间段编号定位在该时间段内产生的刷卡记录)
所述时间戳是一个时间点,精确到时分秒。所述时间段是一个时间范围,例如30分钟,以该时间段起点时间标记时间段。时间段序号:时间段相对于第一个时间段的位置偏移。
起点时间段为t 0 ,时间段对应的编号为id 0 ,Δ t 为时间间隔,时间戳t 1 位于t 0 的之后的偏移为offset 1 =id 0 +(t 1 -t 0 )/ Δ t 。
Step4.7.3:根据站点名称A和时间段编号,获取对应的卡号集合SetA:SetA= GetCardList(A,offset 1 )。根据站点名称B和时间段编号,获取对应的卡号集合SetB:SetB= GetCardList(B,offset 2 )。
卡号集合SetA和SetB的表示形式均为:{C 1 ,C 2 ,…,C n },集合中每一个元素均为一个卡号,卡号按由小到达顺序排列。
Step4.7.4:对两个票卡集合进行交集运算,即SetRes=Inter(SetA,SetB),交集中的卡号有个共同的特点,卡号需同时满足时间约束A(t 1 )和B(t 2 ),也意味着卡号对应的轨迹与时空约束高度相似。
Step4.7.5:遍历SetRes中的卡号,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,missCount,(t i ,A),(t i+1 ,B))(7)
式(7)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数,后续的二元组(t i ,A),(t i+1 ,B)代表时间戳和站点信息。
Step4.7.6:InA=Sub(SetRes,SetA), InB=Sub(SetRes,SetB)计算集合差集,得出集合SetRes中只在SetA中出现的卡号,只在SetB中出现的卡号。
遍历集合InA,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,miscount,(t i ,A),(null,B))(8a)
式(8a)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数。
遍历集合InB,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,miscount,(null,A),(t i+1 ,B))(8b)
式(8b)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数,null代表该卡号的轨迹与SPCL在B站没有交集。
Step4.4.7:返回一组为字段组织形式如式(4)的结果。
公式(4)中的station,代表了任务描述符元组第二个元素对应的站点名称,辅助记录归并多路归并的中间过程。
进一步的,所述Step4.9中的过滤策略为:
为了辅助过滤优化策略的实施,设计了一组数据结构来保存多路归并过程中的中间结果。这些数据结构,如公式(9)~(11)所示。
PointList={(t 1 ,s 1 ), (t 2 ,s 2 ),…, (t n ,s n )}(9)
公式(9)描述了点列表,点列表中的每个元素都代表一个(时间戳,站点)的组合,这些点在时间上有序。
SubTR=(card,len,miscount,PointList)(10)
公式(10)描述的是搜索过程中候选卡号的相关属性。card代表一个卡号,len代表PointList中点的个数,missCount是一个指标,量化PointList与时空约束列表的距离,PointLis是在搜索过程中card形成的时空点集合。
SubTRSet=(station,(SubTR 1 , SubTR 2 ,…, SubTR n ))(11)
公式(11)描述的是候选卡号轨迹集合,也就是每轮归并以后的中间结果。
具体步骤为:
Step4.9.1:向过滤函数传入SubTRSet,n,k,loop,distance,filter等6个变量的值。
n为SPCL的长度,k为调度算法中要归并的次数,loop代表当前第几轮归并,distance代表SPCL的距离,filter代表过滤策略。
Step4.9.2:计算SubTRSet元素个数,假设为m。
Step4.9.3:初始化变量i为1。
Step4.9.4:判断i与m的关系,如果i小于等于m,转下一步Step4.9.5,否则转StepE。
Step4.9.5:根据下标i,在集合SubTRSet中获取第i个元素,每个元素均为SubTR类型,获取SubTR中的点序列PointList,表示为:pointList=SubTRSet(i).SubTR.PointList。
Step4.9.6:d=CalculateDistance(PointList,SPCL),计算点列表与SPCL的距离。
Step4.9.7:判断d与distance的关系,如果d大于diatnce,在SubTRSet删除第i个元素。
Step4.9.8:i=i+1,转Step4.9.4。
StepE:返回被过滤以后的集合SubTRSet,结束。
下面通过具体的数据对本实施例的实施过程进行进一步说明:
一、采集深圳地铁三个月的数据(2018年7~9月),8条线路166个站点,共计2.6亿条票卡记录,分别属于697.6万张不同的卡号。
二、初始化票卡记录存储结构,将三个月的票卡记录导入内存,存储在如图1所示的结构中。图1中一级索引表中包含166行,每行都代表一个(站点,票卡集合)的组合;图1中二级索引包含4800(2*24*100)行。每行都代表一个(时间段,票卡集合)的组合。
三、二级索引每一行代表一个时间范围内所有的票卡记录,同一行的票卡记录按卡号由小到大排序。以30分钟作为一个时间间隔,时间段以“YYYYMMDDHH00”或“YYYYMMDDHH30”格式表示,以时间戳“YYYYMMDDHHMSS”里面的分钟数“MM”映进行映射。映射规则如下:若分钟数在(15,45]范围内映射到YYYYMMDDHH30,在(45,15]范围内映射到YYYYMMDDHH00。
四、使用java编程语言自带的线程池对象,创建一个线程池用于执行并行轨迹搜索,线程池包含8个线程,线程已经创建好并且处于空闲状态。
五、随机产生100组不同的SPCL,为distance,filter,N指定初始值。SPCL为8个点的轨迹,且8个点涉及的地铁站名各不相同;distance设置为3;filter设置为0,不执行过滤,N设置为0,返回所有满足条件的候选轨迹。
六、每个SPCL(SpatialTemporalConstrainList)代表一组时空约束,时空约束的形如:
SPCL=A(t
1
) B(t
2
) C(t
3
) D(t
4
) E(t
5
) F(t
6
) G(t
7
) H(t
8
)
上式描述了一个组具体的时空约束,以下以上式为基础描述搜索过程。A~H分别代表8个不同的地铁站名称, t 1 ~t 8 代表8个不同的有序时间戳。每一个站点时间组合代表一个时空约束,例如D(t 4 )代表t 4 时刻出现在站点D。
七、开始计时,将当前时间记为t s 。分别遍历100组SPCL,对每组SPCL执行第八步至第十一步相同的步骤;
八、根据式中的时空约束进行计算多路归并的轮数,进一步计算每轮中任务的个数。如图2所示,该时空约束有8个对应的(时间,站点)组合。通过计算,点的个数满足不等式22<8≤23,得出此次搜索需要进行3轮归并。第一轮中有4个任务并行执行,第二轮中有2个任务并行执行,第三轮中有1个任务执行。
九、每个具体的任务执行集合的交集运算。以元组(A(t 1 ),B(t 2 ))为例,如图2所示,具体过程如下。第一步,根据时间戳分别计算时间段偏移量,offset 1 =index(t 1 ),offset 2 = index(t 2 )。第二步,根据站点名称和时间偏移量分别获取对应时间段的票卡集合。SetA= GetCardList(A,offset 1 ), SetB=GetCardList(B,offset 2 );第三步,对集合执行交集运算SetRes=Inter(SetA,SetB),其中SetA、SetB和SetRes形式均为{C 1 ,C 2 ,…,C n }。第四步,根据站点名称和偏移量分别获取SetRes中每个卡号对应的时间戳,形成形如五元组(card,len, miscount,(t i ,A),(t i+1 ,B))的结构。每一个任务产生一个五元组结构,多个任务产生多个五元组结构,这些五元组称为中间结果。
十、每轮结束以后,合并中间结果,执行过滤功能。对每一轮中的五元组按相同卡号进行合并,合并的方式如下:卡号(card)相同,len,missCount两个变量的值分别进行累加;形如(t i ,A),(t i+1 ,B)的时空点先做交集,然后按时间有小到大进行排序,形成形如 (card,len,missCount,PointList)的结构,该结构为候选卡号及其子轨迹。每一轮最终会形成多个卡号对应的子轨迹。
十一、最后一轮结束,生成并返回最终结果,最终结果为多个(card,len, missCount,PointList)结构
十二、计时结束,将当前时间记为t e ,
十三、计算100次查询消耗时间总量,执行100次查询的耗时为Δ t =(t e -t s ),平均每次查询消耗的时间latency=(Δ t /100)。
对深圳地铁697.6万张卡号3个月共计2.6亿个票卡记录进行轨迹相似性搜索,长度为16个时空点的轨迹平均耗时0.11秒,长度为8个时空点的轨迹耗时0.08秒。
以上结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
Claims (8)
1.一种基于多路归并的地铁乘客轨迹相似性搜索方法,其特征在于:
Step1:获取乘客进出站时实时产生的所有票卡记录;
所述实时产生的票卡记录是指乘客最新的刷卡记录,所述票卡记录包含的字段包括但不限于卡号、时间戳、地铁站、进出标识,金额信息;
Step2:以多级索引的方式对全部票卡记录进行存储,所述全部票卡记录包括历史票卡和实时票卡记录;
Step3:初始化查询参数,调用查询接口,对全部票卡记录进行查询;
Step4:使用多轮归并,多线程分段并行的方式对票卡集合进行轨迹相似性搜索;
搜索过程中,使用一组过滤规则对票卡记录集合进行过滤,加速搜索查询过程;
Step5:将SPCL按两个轨迹点为一组进行分段,以分段方式去搜索与该分段相似或相同的轨迹,分段搜索的结果是一组候选轨迹;
分段搜索的过程通过一组多线程并行执行,每一组线程结束后,对候选轨迹进行合并和过滤;
分段搜索的过程经过多轮执行以后,形成最终的一组乘客的轨迹,该组乘客的轨迹与SPCL具有高度相似性。
2.根据权利要求1所述的基于多路归并的地铁乘客轨迹相似性搜索方法,其特征在于:所述多级索引的方式指的是以地铁站、时间戳、卡号三个字段的不同取值范围对全部票卡记录集合进行划分,使用地铁站、时间戳两个字段对票卡集合建立多级索引,该索引可以加速查找满足在一定时间和空间范围内的票卡记录。
3.根据权利要求2所述的基于多路归并的地铁乘客轨迹相似性搜索方法,其特征在于,所述Step2具体为:
以地铁站名称,时间区间对票卡记录集合进行不同维度的划分,建立多级索引;
首先将票卡记录按不同地铁站进行分区,再按时间段进一步将票卡分组;分组内部的票卡记录按时间戳由小到大进行排序,若票卡记录时间戳相同,按卡号由小到大排序;
所述多级索引分为一级索引和二级索引;
所述一级索引具体为:保存一组形如<地铁站编号,地铁站名称,票卡记录集合>的三元组,将三元组按地铁站编号由小达到进行排序,具体为:
StationMap={(ID
1
,station
1
,Set
1
),( ID
2
,station
2
,Set
2
),…, ( ID
N
,station
N
,
Set
N
)}
式中,ID i 表示地铁站的编号,station i 表示地铁站的名称,Set i 表示该地铁站产生的所有票卡记录集合;
所述二级索引具体为:保存一组形如<时间段编号,时间段,票卡记录数,{<时间戳,卡号,票卡其他字段>,<时间戳,卡号,票卡其他字段>,…,<时间戳,卡号,票卡其他字段>}>的嵌套式四元组,具体为:
timeLMap={(I
1
,tSeg
1
,n
1
,sSet
1
), (I
2
,tSeg
2
,n
2
,sSet
2
),…, (I
M
,tSeg
M
,n
M
,sSet
M
)}
式中,I i 表示的是时间段编号,tSeg i 表示时间段名称,n表示该时间段范围内产生的票卡记录数量,sSet i 表示该时间段产生的所有票卡记录集合,是Set i 的子集;
所述四元组的外层按时间段编号由小到大存储,四元组的内层分别按时间戳和卡号两个字段进行排序,先按时间戳大小排序,相同时间戳的票卡记录按卡号大小进行排序。
4.根据权利要求1所述的基于多路归并的地铁乘客轨迹相似性搜索方法,其特征在于,所述查询接口具体为:
resList=Search(SPCL,distance,filter,N)(1)
式(1)中,SPCL是多个时空约束,时空约束指的是地铁站名和时间戳的组合,distance是一个阈值,描述票卡轨迹与时空约束的距离,filter是一个布尔型变量,控制在搜索过程中是否开启过滤功能,N控制返回结果的个数。
5.根据权利要求4所述的基于多路归并的地铁乘客轨迹相似性搜索方法,其特征在于,Step3中所述SPCL代表一组时间和空间条件约束,时空约束具体为:
SPCL=S 1 (t 1 ) S 2 (t 2 ) S 3 (t 3 )…S n-1 (t n-1 ) S n (t n )(2)
式(2)中,S 1 ~S n 分别代表n个地铁站名称,所述地铁站名称存在重复,t 1 ~t n 代表n个不同的时间戳,所述时间戳按由大到小顺序排列,每一个站点-时间组合代表一个时空约束;
Distance是一个整型变量,代表与SPCL的距离,假设SPCL时空约束的个数为M,distance取值为N,那么返回结果集中轨迹的长度在区间[M-N,M+N]内;
Filter是一个布尔变量,取值为0或1,默认为0,所述取值确定了在搜索过程中是否开启过滤功能,1代表开启过滤,0代表不使用过滤功能;
N是一个整型变量,代表在结果中选取与SPCL最相近的N的轨迹,若N为0,则返回全部结果;
ResList是一个票卡轨迹列表,所有满足条件的票卡轨迹,票卡轨迹表示为:
Trajectory={id,(t 1 ,s 1 ), (t 2 ,s 2 ),…, (t n ,s n )}(3)
式(3)中,id为公交卡号,二元组 (t i ,s i )代表刷卡记录对应的时间戳和站点。
6.根据权利要求1所述的基于多路归并的地铁乘客轨迹相似性搜索方法,其特征在于,所述Step4具体为:
Step4.1:输入时空约束列表SPCL=S 1 (t 1 ) S 2 (t 2 ) S 3 (t 3 ) …S n-1 (t n-1 ) S n (t n ),n为时空约束的个数;
Step4.2:根据n计算多轮归并的次数,若n满足2 k-1 <n≤2 k ,则归并次数为k;
Step4.3:初始化变量loop=1,初始化时空约束spList=SPCL,初始化任务列表TaskList;
变量loop用于控制循环的结束,spList用于保存归并的中间过程,TaskList用于保存待计算的任务;
Step4.4:判断loop与k的关系,如果loop大于k,跳出循环,转StepE;否则,转Step4.5;
Step4.5:遍历spList,步长为2,将连续两个时空约束形成一个元组(S o (t o ),S d (t d ))作为任务描述符,将任务描述符加入TaskList中;
若spList中元素个数为奇数,以最后一个元素为基础构建形如(null,S n (t n ))的元组,加入到TaskList中;
Step4.6:计算TaskList元素的个数,假设为m,在线程池中选取m个空闲线程;
Step4.7:遍历TaskList,为每个任务描述符指定一个线程,并启动线程执行轨迹集合的交集运算;
计算结果保存在形如式(4)的键值映射结构中,具体为:
SubTRSet=(station,(SubTR 1 , SubTR 2 ,…, SubTR n ))(4)
所述公式(4)描述的是一个键值映射结构,是每轮归并以后的中间结果,是候选卡号轨迹集合;
所述公式(4)中的key为station,即一个地铁站名,具体取值对应每个任务描述元组的第二个元素S d (t d )的地铁站名;
Step4.8:通过珊栏的方式等待Step4.7中的线程全部结束;
Step4.9:根据调用接口中变量filter的值,判断是否调用过滤函数,若调用,则使用过滤策略对中间结果进行过滤;
Step4.10:清空spList,遍历TaskList,将每个元组的S d (t d )加入到spList中,清空TaskList;
Step4.11:loop=loop+1,变量loop的值增加1,转Step4;
StepE:结束。
7.根据权利要求6所述的基于多路归并的地铁乘客轨迹相似性搜索方法,其特征在于,所述Step4.7具体为:
Step4.7.1:输入一个元组(A(t 1 ),B(t 2 ))和带多级索引的票卡存储结构,元组中的每个元素都代表一个(站点,时间戳)的组合;
Step4.7.2:根据时间戳计算时间段相对于第一个时间段的偏移,表示为:
offset 1 =index(t 1 ),offset 2 =index(t 2 )
再根据时间戳计算对应的时间段编号;
Step4.7.3:根据站点名称A和时间段编号,获取对应的卡号集合SetA:SetA= GetCardList(A,offset 1 );根据站点名称B和时间段编号,获取对应的卡号集合SetB:SetB= GetCardList(B,offset 2 );
卡号集合SetA和SetB的表示形式均为:{C 1 ,C 2 ,…,C n },集合中每一个元素均为一个卡号,卡号按由小到达顺序排列;
Step4.7.4:对两个票卡集合进行交集运算,即SetRes=Inter(SetA,SetB),卡号需同时满足时间约束A(t 1 )和B(t 2 );
Step4.7.5:遍历SetRes中的卡号,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,missCount,(t i ,A),(t i+1 ,B))(5)
式(5)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数,后续的二元组 (t i ,A),(t i+1 ,B)代表时间戳和站点信息;
Step4.7.6:InA=Sub(SetRes,SetA), InB=Sub(SetRes,SetB)计算集合差集,得出集合SetRes中只在SetA中出现的卡号,只在SetB中出现的卡号;
遍历集合InA,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,missCount,(t i ,A),(null,B))(6a)
式(6a)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数;
遍历集合InB,根据站点名和时间段偏移量获取该卡号对应票卡记录的具体时间戳,表示为:
(card,len,missCount,(null,A),(t i+1 ,B))(6b)
式(6b)中,card代表卡号,len代表轨迹中包含点的个数,missCount代表缺失的时空点个数,null代表该卡号的轨迹与SPCL在B站没有交集;
Step4.4.7:返回一组为字段组织形式如式(4)的结果;
公式(4)中的station,代表了任务描述符元组第二个元素对应的站点名称,辅助记录归并多路归并的中间过程。
8.根据权利要求6所述的基于多路归并的地铁乘客轨迹相似性搜索方法,其特征在于,所述Step4.9中的过滤策略具体为:
Step4.9.1:向过滤函数传入SubTRSet,n,k,loop,distance,filter等6个变量的值;
n为SPCL的长度,k为调度算法中要归并的次数,loop代表当前第几轮归并,distance代表SPCL的距离,filter代表过滤策略;
Step4.9.2:计算SubTRSet元素个数,假设为m;
Step4.9.3:初始化变量i为1;
Step4.9.4:判断i与m的关系,如果i小于等于m,转下一步Step4.9.5,否则转StepE;
Step4.9.5:根据下标i,在集合SubTRSet中获取第i个元素,每个元素均为SubTR类型,获取SubTR中的点序列PointList,表示为:pointList=SubTRSet(i).SubTR.PointList;
Step4.9.6:d=CalculateDistance(PointList,SPCL),计算点列表与SPCL的距离;
Step4.9.7:判断d与distance的关系,如果d大于diatnce,在SubTRSet删除第i个元素;
Step4.9.8:i=i+1,转Step4.9.4;
StepE:返回被过滤以后的集合SubTRSet,结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211269077.XA CN115344795B (zh) | 2022-10-17 | 2022-10-17 | 一种基于多路归并的地铁乘客轨迹相似性搜索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211269077.XA CN115344795B (zh) | 2022-10-17 | 2022-10-17 | 一种基于多路归并的地铁乘客轨迹相似性搜索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115344795A true CN115344795A (zh) | 2022-11-15 |
CN115344795B CN115344795B (zh) | 2022-12-09 |
Family
ID=83957038
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211269077.XA Active CN115344795B (zh) | 2022-10-17 | 2022-10-17 | 一种基于多路归并的地铁乘客轨迹相似性搜索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344795B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115795115A (zh) * | 2023-02-11 | 2023-03-14 | 云南师范大学 | 一种基于图存储的多轨迹集合相似性搜索方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170212894A1 (en) * | 2014-08-01 | 2017-07-27 | Hohai University | Traffic data stream aggregate query method and system |
CN107766406A (zh) * | 2017-08-29 | 2018-03-06 | 厦门理工学院 | 一种采用时间优先搜索的轨迹相似性连接查询方法 |
CN107766407A (zh) * | 2017-08-29 | 2018-03-06 | 厦门理工学院 | 一种采用两阶段搜索的轨迹相似性连接查询方法 |
CN107798346A (zh) * | 2017-10-23 | 2018-03-13 | 中国人民解放军国防科技大学 | 一种基于Fréchet距离阈值的轨迹相似性快速匹配方法 |
CN110796040A (zh) * | 2019-10-15 | 2020-02-14 | 武汉大学 | 一种基于多元空间轨迹关联的行人身份识别方法 |
CN111078634A (zh) * | 2019-12-30 | 2020-04-28 | 中科海拓(无锡)科技有限公司 | 一种基于r树的分布式时空数据索引方法 |
CN112800152A (zh) * | 2019-11-13 | 2021-05-14 | 阿里巴巴集团控股有限公司 | 轨迹数据处理方法、装置和系统 |
CN113886390A (zh) * | 2021-09-30 | 2022-01-04 | 京东城市(北京)数字科技有限公司 | 轨迹数据处理方法、装置、计算机设备及存储介质 |
CN114637929A (zh) * | 2022-03-10 | 2022-06-17 | 浪潮软件科技有限公司 | 一种基于ElasticSearch的轨迹碰撞方法 |
-
2022
- 2022-10-17 CN CN202211269077.XA patent/CN115344795B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170212894A1 (en) * | 2014-08-01 | 2017-07-27 | Hohai University | Traffic data stream aggregate query method and system |
CN107766406A (zh) * | 2017-08-29 | 2018-03-06 | 厦门理工学院 | 一种采用时间优先搜索的轨迹相似性连接查询方法 |
CN107766407A (zh) * | 2017-08-29 | 2018-03-06 | 厦门理工学院 | 一种采用两阶段搜索的轨迹相似性连接查询方法 |
CN107798346A (zh) * | 2017-10-23 | 2018-03-13 | 中国人民解放军国防科技大学 | 一种基于Fréchet距离阈值的轨迹相似性快速匹配方法 |
CN110796040A (zh) * | 2019-10-15 | 2020-02-14 | 武汉大学 | 一种基于多元空间轨迹关联的行人身份识别方法 |
CN112800152A (zh) * | 2019-11-13 | 2021-05-14 | 阿里巴巴集团控股有限公司 | 轨迹数据处理方法、装置和系统 |
CN111078634A (zh) * | 2019-12-30 | 2020-04-28 | 中科海拓(无锡)科技有限公司 | 一种基于r树的分布式时空数据索引方法 |
CN113886390A (zh) * | 2021-09-30 | 2022-01-04 | 京东城市(北京)数字科技有限公司 | 轨迹数据处理方法、装置、计算机设备及存储介质 |
CN114637929A (zh) * | 2022-03-10 | 2022-06-17 | 浪潮软件科技有限公司 | 一种基于ElasticSearch的轨迹碰撞方法 |
Non-Patent Citations (4)
Title |
---|
王祖超等: "轨迹数据可视分析研究", 《计算机辅助设计与图形学学报》 * |
赵卓峰等: "基于海量车牌识别数据的相似轨迹查询方法", 《清华大学学报(自然科学版)》 * |
郭旦怀等: "面向实时交通信息提取的车辆轨迹数据挖掘", 《武汉理工大学学报(交通科学与工程版)》 * |
高强等: "轨迹大数据:数据处理关键技术研究综述", 《软件学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115795115A (zh) * | 2023-02-11 | 2023-03-14 | 云南师范大学 | 一种基于图存储的多轨迹集合相似性搜索方法 |
CN115795115B (zh) * | 2023-02-11 | 2023-05-02 | 云南师范大学 | 一种基于图存储的多轨迹集合相似性搜索方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115344795B (zh) | 2022-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Shao et al. | Traveling officer problem: Managing car parking violations efficiently using sensor data | |
Zhao et al. | Destination-aware task assignment in spatial crowdsourcing: A worker decomposition approach | |
Dai et al. | Personalized route recommendation using big trajectory data | |
Yin et al. | Group-wise itinerary planning in temporary mobile social network | |
WO2020192120A1 (zh) | 一种基于出行结构的城市路网诱导方案发布方法和系统 | |
CN109544929A (zh) | 一种基于大数据的车辆低碳控制与诱导方法、系统、设备和存储介质 | |
CN115344795B (zh) | 一种基于多路归并的地铁乘客轨迹相似性搜索方法 | |
Yang et al. | K-nearest neighbor model based short-term traffic flow prediction method | |
CN110287391A (zh) | 基于Hadoop的多层次轨迹数据存储方法、存储介质和终端 | |
CN110275911B (zh) | 基于频繁序列模式的私家车出行热点路径挖掘方法 | |
CN112579921B (zh) | 基于倒排序索引及前缀树的轨迹索引和查询方法及系统 | |
Zeng et al. | The simpler the better: An indexing approach for shared-route planning queries | |
Li et al. | Top-$ k $ k Vehicle Matching in Social Ridesharing: A Price-Aware Approach | |
Vial et al. | Scheduling autonomous vehicle platoons through an unregulated intersection | |
WO2020057275A1 (zh) | 轨迹的确定方法和装置、时间的推荐方法、装置和系统 | |
Pei et al. | Optimal cooperative driving at signal-free intersections with polynomial-time complexity | |
CN114253975B (zh) | 一种负载感知的路网最短路径距离计算方法及装置 | |
CN113312760A (zh) | 一种基于交通仿真的网联机动车右转轨迹规划方法和装置 | |
Lin et al. | Path travel time estimation using attribute-related hybrid trajectories network | |
CN110059795A (zh) | 一种融合地理位置与时间特征的移动用户节点组网方法 | |
Li et al. | Efficient adaptive matching for real-time city express delivery | |
JP2021190094A (ja) | 配送計画作成方法、装置、システムおよびコンピュータ読み取り可能な記憶媒体 | |
Resmerita et al. | A framework for conflict resolution in air traffic management | |
Gökay et al. | On-demand ride-sharing services with meeting points | |
Wang et al. | Taxi-cruising recommendation via real-time information and historical trajectory data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |