一种基于时间与费用约束的动态拼车匹配方法
【专利摘要】本发明提出了一种较为通用的动态拼车匹配方法,解决了在乘客的拼车时间和拼车费用两个约束条件下,为乘客实时匹配满足条件的最优司机的问题。本发明中的动态拼车匹配方法共分为三个步骤,包括:步骤1,建立动态拼车匹配模型,包括时间、费用以及skyline关系模型;步骤2,建立动态拼车数据结构,包括DriverTable,MatchingTable,Grid索引等;步骤3,动态拼车匹配,其核心思想是通过尽量减少或延后最短路径的计算来保证匹配的高效性;同时,通过设置司机的skyline约束,进一步减少匹配的计算量,而且保证了匹配到的司机与其他备选司机相比,时间或者费用方面是较优的。
【专利说明】一种基于时间与费用约束的动态拼车匹配方法
【技术领域】
[0001] 本发明属于基于位置服务(LBS, Location Based Service)与地理信息系统 (Geographic Information System)交叉领域,主要针对现有拼车系统无法满足乘客以及 司机对拼车实时性需求的问题,提出一种高效的、基于时间与费用约束的动态拼车匹配技 术,进而实时提供给乘客满足其拼车要求的候选司机。
【背景技术】
[0002] 随着城市车辆数量激增,与道路交通相关的问题日趋严重,如停车占地需求增大、 石油消耗增多导致空气质量下降、城市交通拥塞等,这些问题在世界范围内被公认为是影 响人们生活质量的主要原因。尽管政策采取了一系列的方式来解决上述问题,如通过摇号 方式限购车辆、高峰时段限制部分车牌号上路、修建新的高架道路或扩展现有道路等,但这 些方式不仅投入成本巨大,也给人们的日常生活带来了新的不便。与上述方式相比,拼车系 统做为一种更加灵活且实施成本小的缓解交通问题的方法,在近年来被提上议程,并且引 起了产业界和学术界的广泛关注。首先,拼车可有效降低汽车的空驶率,不仅缓解了交通拥 塞,也减少了车辆对环境的污染。其次,拼车时乘客会付给司机一定的拼车费用,相对于乘 客自己驾车出行的费用,司机和乘客的出行成本均得到了降低。
[0003] 拼车系统一般通过将那些在出行时间和出行路径上相似的乘客安排在相同的车 辆中,进而提高车辆的空座利用率。在实现方式上,拼车系统可分为两类:静态拼车与动态 拼车。静态拼车是指司机、乘客提前一段较长的时间(多个小时或多天)在系统中发布相关 拼车信息,系统负责乘客和司机匹配工作。相对于静态拼车,动态拼车是针对个别的出行, 而不是基于有规律的出行,其实现则更加灵活、实时,难度更大。一般来说,乘客通过智能手 机向系统发布拼车需求,动态拼车系统在接受请求的同时,利用GPS对乘客和正在驾驶的 司机分别定位,然后实时对乘客和司机进行匹配,并将结果实时返回给相应的司机和乘客。
[0004] 由于在具体的匹配过程当中涉及到道路交通网上最短路径的计算,而实际中需要 对大量的司机与乘客对应的拼车中路线进行匹配,因此大规模的最短路径计算使得动态拼 车难以实现。现有的动态拼车系统采用的匹配技术均在匹配模型上做了不同的限制,进而 产生了不同的缺陷:(1)仅返回乘客起始位置的k个近邻司机,不考虑司机原始目的地,这 种情况下乘客可能会找到一个离其距离近的司机来乘车,但是司机路线的终点与乘客的终 点距离很远,导致拼车费用高;(2)乘客的路线必须是司机路线的一部分,这样的约束在实 际应用中不够灵活而且可能错失一些能够通过适当的绕道提供给乘客合理拼车价格的司 机;(3)与公交车类似,司机需事先指定上客与下客点,乘客需要步行到相应的上客点上车 然后从下客点步行回目的地,这样的拼车方式使得乘客受限于特定的上下车点,在实际应 用中并不灵活;(4)乘客与司机路线的起点与终点必须在一定的范围内,不能偏离太远,然 而,实际中一些司机的起点即使远离乘客起点,他们也可能会提供一个更低更合理的拼车 费用。
【发明内容】
[0005] 为了克服现有技术的上述确定啊,本发明提出了一种高效动态拼车匹配方法,该 技术从乘客角度出发,旨在高效地匹配出满足乘客拼车需求的候选司机集合。
[0006] 该集合中的候选司机具有如下两个特点:(1)集合中的司机均能在乘客的最大等 待时间(Ma X_Wait_Time)内从其起点赶到乘客的起点,其产生的拼车费用也低于乘客所能 接受的最大费用;(Max_Ridesharing_Cost) ;(2)集合中的司机与司机间在乘客等待时间 与拼车费用两个属性上是skyline关系,即任意一个司机无法同时在等待时间和拼车费用 上优于另一个集合中的司机。
[0007] skyline司机的提出是出于如下考虑:实际中若存在两个候选司机,其中一个司 机在等待时间和拼车费用上均比另外一个司机与乘客匹配后的相应值要大,那么选择该司 机则没有实际意义,因此本发明匹配技术在匹配过程当中,也对这一类的司机进行了相应 的过滤处理。下面,从拼车匹配模型和匹配方法两个方面进行叙述。
[0008] 本发明所述的一种基于时间与费用约束的动态拼车匹配方法,包括:
[0009] 步骤1,建立动态拼车匹配模型
[0010] 作为动态拼车仅有的两个参与角色,司机与乘客在匹配时均有各自的起始位置与 终点位置,默认起点与终点间的路线为最短路径。为方便描述,使用d表示司机,r表示乘 客,RiderTrip和DriverTrip分别对应司机与乘客在匹配前各自的路线,路线长度又可转 换成相应的费用成本。在匹配过程中,乘客和司机拼车费用的计算方式决定了匹配方法的 设计。考虑到司机可能需要偏离原计划路线,通过绕道去接乘客或送乘客到目的地,最终乘 客应付给司机的费用中不仅包含拼车后走的路程,还要包含司机绕道所产生的成本,下面 给出拼车费用的表示方式:
[0011] Price (d,r) = RiderTrip+Detour
[0012] 其中,Price (d, r)表示拼车费用;RiderTrip表示拼车后共同走的路程,即乘客的 路线;Detour表示司机相对其原始路线多走的路程,即绕道路程,其计算方式如下:
[0013] Detour (d, r) = Pickup+RiderTrip+Return - DriverTrip
[0014] 其中,Pickup是司机起点与乘客起点间的路程,即司机去接乘客时的费用; Return表示司机目的地与乘客目的地间的路程距离,即司机在送完乘客时返回的费用。
[0015] 基于上述关系,可进一步得到计算拼车费用的如下公式:
[0016] Price (d, r) = Pickup+2*RiderTrip+Return - DriverTrip (1)
[0017] 公式1中右边的计算单元均是拼车匹配模型中的基本费用单元,在随后的匹配方 法设计当中将被使用。下面,从乘客角度出发,给出拼车匹配模型的定义。
[0018] 定义1.给定一个司机集合D和一个乘客r,动态拼车匹配旨在D中找到一个子集 合D',并且对于D '中的任意一个司机,需要满足如下约束:
[0019] ?时间约束:Pickup (d, r) <rmax_Time
[0020] ?费用约束:Price (d, r) <rmax_Price
[0021] · Skyline 约束:D' 需要经过对 Pickup (d, r)与 Price (d, r)的 skyline 处理
[0022] 上述定义中,r_ Tinie表示乘客的最大等待时间,r_ 表示乘客的最大拼车费用。 基于定义1中的匹配模型,下面介绍本发明所需要用到的相关数据结构。
[0023] 步骤2,建立动态拼车数据结构
[0024] 在执行动态拼车匹配时需要涉及到相关数据的存储、排序等工作,因此需要根据 定义1所述拼车问题模型设计合适的数据结构以支撑匹配过程的运算。
[0025] Driver Table (司机表).拼车匹配过程中需要维护每个司机的4个字段:(1) ID : 司机d的唯一标识;(2)CurrentL〇Cati〇n :d的当前位置,由于匹配时司机可能处在移动状 态,因此该值将会随着时间的不同而可能发生变化,且该变化可由特定的终端设备来捕获 并更新,如 GPS ; (3) DestinationLocation :d 的目的地位置;(4) DriverTrip :d 的起点(即 CurrentLocation)与目的地间的最短路径。
[0026] Matching Table (匹配表).该表为动态拼车匹配过程中用来匹配一个乘客与多 个司机的主要依据。它包含了一对乘客r与司机d的6个字段内容:(1) ID :司机d的唯 一标识;(2)Pickup :d起点与r起点间的最短路径,该值也可经换算表示成乘客r的实际 等待时间;(3)EuclideanPickup :d起点与r起点间的欧式距离;(4)Return :d目的地与 i目的地间的的最短路径;(5)EUClideanRetUrn :d目的地与r目的地间的欧式距离;(6) DriverTrip :Driver Table中的第4个字段,即d的起点与目的地间的最短路径。
[0027] 步骤3,动态拼车匹配
[0028] 相对最短路径距离,两点间欧式距离的计算复杂度要低的多。因此,作为本发明中 的核心部分-动态拼车匹配方法就是基于Driver Table与Matching Table,利用欧式距 离作为出发点,设计一系列的边界条件,通过提前过筛选掉一些不需要计算所有最短路径 的司机,进而提高匹配效率,得到满足乘客需求的候选司机列表。匹配方法从整体上可分为 两个阶段:欧氏距离匹配与半欧式距离匹配。
[0029] 3. 1 欧氏距离(Euclidean Distance)匹配过程
[0030] 欧氏距离匹配的思路是使用欧氏距离代替实际距离进行预估算和筛选。因为司机 与乘客间的欧氏距离小于实际距离,因此可以利用不等式的传递性,初步排除一些不满足 要求的司机。具体步骤如下:
[0031] 3. 1. 1时间筛选。
[0032] 以乘客的起点r为圆心,将乘客最大等待时转化的欧氏距离作为半径画 一个圆QR,即执行一个范围查询(range query)。所有不包含在QK内的司机将会被排除。 原因是他们在最短距离(欧氏距离)的条件下也无法及时赶到乘客出发点。
[0033] 3. 1. 2拼车成本筛选。
[0034] 将拼车费用的公式1中的Pickup和Return分别用欧氏距离EuclideanPickup和 EuclideanReturn进行替换,得到新的费用公式
[0035] Price (d, r) = EuclideanPickup+2氺RiderTrip+EuclideanReturn - DriverTrip (公式2)
[0036] 因为欧氏距离在地图上两点间最短,根据不等式的传递性,若司机d使用公式2计 算出的理想拼车费用大于rmax ,那么d用公式1得出的实际也必然大于rmax 。所以将 这部分不符合条件的司机排除。
[0037] 3. 2 半欧氏距离(Semi-Euclidean Distance)匹配过程
[0038] 为了找出正确的候选司机列表,在欧氏距离匹配结果的基础上,需要进一步筛选, 同时还要减少最短路径计算和skyline比较的次数。思路是在公式2的基础上,分步将欧 氏距离用实际的最短路径距离代替来计算拼车费用Price (d,r),并进行筛选,以达到筛选 司机的同时尽可能减少计算的目的。半欧氏距离匹配法步骤如下:
[0039] 3. 2. 1 公式 2 中 Pickup 替换
[0040] 将 EuclideanPickup 用实际 Pickup 代替,得到:
[0041] Price (d, r) = Pickup+2*RiderTrip+EuclideanReturn - DriverTrip (公式 3)
[0042] 3· 2· 2匹配表排序
[0043] 将匹配表中的每位司机根据EuclideanReturn-DriverTrip的值按递增进行排 序。接着设置一个阀值MAX,初始化其值为乘客提出拼车请求时的费用约束r maxMre,作为最 终成为匹配成功司机的拼车成本的上边界。基于skyline计算过程(即拼车费用与等待时 间),MAX值将逐渐缩小,这样使得更多的满足乘客时间和费用约束的司机被过滤掉,即这 些司机不能作为skyline结果返回。
[0044] 3. 2. 3候选司机筛选
[0045] 该筛选过程是迭代式的。在每一次迭代过程当中,需要首先从匹配表中挑选离乘 客最近的一个司机d,可在路网上执行增量K近邻算法(Incremental K nearest neighbor) 获取。然后计算他的实际Pickup值。司机d的Pickup值只可能是以下四种情况之一:
[0046] A1.司机d的PickUp>rmax Time,即司机d无法按时接到乘客。此情况下会立即终止 接下来的筛选流程,将匹配表中包括d在内的所有司机删除。因为其他司机相比于司机d, 离乘客的起点更远,无法满足乘客的时间约束。
[0047] A2.司机d的Pickup〈rmax_Time;,但d根据公式3所计算出的拼车费用大于MAX。因 为不满足费用约束,司机d将会被从匹配表中删除。一同被排除的还有匹配表中位于司机 d之后的所有司机。因为根据公式3计算,虽然其他司机的RiderTrip值与司机d相同,但 是他们的Pickup和EuclideanReturn-DriverTrip的值都大于d,所以总拼车费用也必然大 于d和MAX。
[0048] A3.司机d的Pickup〈rmax_Time,且d根据公式3所计算出的拼车费用也小于MAX,但 是d使用公式1 (需要计算实际Return)计算出的拼车费用大于MAX。因此,d不能满足拼 车费用约束,不能成为候选司机。
[0049] A4.以上三种情况之外。d将成为既能满足时间约束又能满足费用约束的候选司 机。接着我们将MAX的值改为司机d的实际的拼车费用(根据公式1计算得到)。然后将 该司机从匹配表中删除,最后进入下一个迭代筛选过程。更改MAX的值是因为最终返回的 匹配结果要求是skyline关系,即新的候选司机相对前一个候选司机来说,由于其等待时 间要比前一个司机长,所以其造成的拼车费用要比上一个候选司机小才能作为最终结果返 回。
[0050] 为了解决上述拼车匹配过程中所面临的难点和克服现有拼车技术的不足,本发明 在充分总结实际拼车需求的基础上,开创性地提出了一种高效的动态拼车匹配技术。该匹 配技术需要乘客提供其起点(可由智能终端GPS设备自动提供)、目的地、最大等待上车时 间(Max_Wait_Time)以及愿意付给司机的最大拼车费用(Max_Ridesharing_Cost);对于司 机,仅需要其提供当前所在位置信息以及目的地地址。虽然实际情况中,司机也会有额外的 拼车服务需求,如最远绕道距离,最大接乘客时间等,这些需求约束均可基于本发明进行简 单扩展而实现。为保证本发明所提技术的一般性,更多额外的拼车约束及其实现不在本专 利的讨论范围内。
[0051] 本发明的优点是:设计了通用的、基于乘客等待时间和拼车费用的动态拼车匹配 方法,通过欧式、半欧式距离的过滤方法,有效地解决了当前动态拼车匹配方法中因大量 最短路径计算所带来的效率低问题,保证了匹配的实时性;此外,在满足乘客时间和费用 约束的条件下,为进一步找到在时间和费用两方面是skyline关系的司机集合,本发明将 sky 1 ine操作嵌入到了匹配过程当中,不仅没有对整个匹配过程造成额外的计算开销,反而 使得整个匹配过程更加高效,最终达到了又快又好的匹配效果。
【专利附图】
【附图说明】
[0052] 图1为本发明步骤3. 1的过程图
[0053] 图2为本发明步骤3. 2的过程图
[0054] 图3表示基于乘客等待时间欧式距离的范围查询示例
[0055] 图4表示基于图3范围查询结果的匹配表
[0056] 图5表示基于欧氏距离的拼车成本筛选示例图
[0057] 图6为匹配表排序示意图
[0058] 图7为替换EuclideanPickup为真实路径Pickup后的筛选示意图
[0059] 图8为半欧氏距离匹配司机skyline筛选示意图 图9为skyline司机筛选示意图
【具体实施方式】
[0060] 参照附图:
[0061] 本发明所述的一种基于时间与费用约束的动态拼车匹配方法,包括:
[0062] 步骤1,建立动态拼车匹配模型
[0063] 作为动态拼车仅有的两个参与角色,司机与乘客在匹配时均有各自的起始位置与 终点位置,默认起点与终点间的路线为最短路径。为方便描述,使用d表示司机,r表示乘 客,RiderTrip和DriverTrip分别对应司机与乘客在匹配前各自的路线,路线长度又可转 换成相应的费用成本。在匹配过程中,乘客和司机拼车费用的计算方式决定了匹配方法的 设计。考虑到司机可能需要偏离原计划路线,通过绕道去接乘客或送乘客到目的地,最终乘 客应付给司机的费用中不仅包含拼车后走的路程,还要包含司机绕道所产生的成本,下面 给出拼车费用的表示方式:
[0064] Price (d,r) = RiderTrip+Detour
[0065] 其中,Price (d, r)表示拼车费用;RiderTrip表示拼车后共同走的路程,即乘客的 路线;Detour表示司机相对其原始路线多走的路程,即绕道路程,其计算方式如下:
[0066] Detour (d, r) = Pickup+RiderTrip+Return - DriverTrip
[0067] 其中,Pickup是司机起点与乘客起点间的路程,即司机去接乘客时的费用; Return表示司机目的地与乘客目的地间的路程距离,即司机在送完乘客时返回的费用。 [0068] 基于上述关系,可进一步得到计算拼车费用的如下公式:
[0069] Price (d, r) = Pickup+2*RiderTrip+Return - DriverTrip (1)
[0070] 公式1中右边的计算单元均是拼车匹配模型中的基本费用单元,在随后的匹配方 法设计当中将被使用。下面,从乘客角度出发,给出拼车匹配模型的定义。
[0071] 定义1.给定一个司机集合D和一个乘客r,动态拼车匹配旨在D中找到一个子集 合D',并且对于D '中的任意一个司机,需要满足如下约束:
[0072] ?时间约束:Pickup (d, r) <rmax_Time
[0073] ?费用约束:Price (d, r) <rmax_Price
[0074] · Skyline 约束:D' 需要经过对 Pickup (d, r)与 Price (d, r)的 skyline 处理
[0075] 上述定义中,rmax Time表示乘客的最大等待时间,rmax 表示乘客的最大拼车费用。 基于定义1中的匹配模型,下面介绍本发明所需要用到的相关数据结构。
[0076] 步骤2,建立动态拼车数据结构
[0077] 在执行动态拼车匹配时需要涉及到相关数据的存储、排序等工作,因此需要根据 定义1所述拼车问题模型设计合适的数据结构以支撑匹配过程的运算。
[0078] Driver Table (司机表).拼车匹配过程中需要维护每个司机的4个字段:(1) ID : 司机d的唯一标识;(2)CurrentL〇Cati〇n :d的当前位置,由于匹配时司机可能处在移动状 态,因此该值将会随着时间的不同而可能发生变化,且该变化可由特定的终端设备来捕获 并更新,如 GPS ; (3) DestinationLocation :d 的目的地位置;(4) DriverTrip :d 的起点(即 CurrentLocation)与目的地间的最短路径。
[0079] Matching Table (匹配表)·该表为动态拼车匹配过程中用来匹配一个乘客与多 个司机的主要依据。它包含了一对乘客r与司机d的6个字段内容:(1) ID :司机d的唯 一标识;(2)Pickup :d起点与r起点间的最短路径,该值也可经换算表示成乘客r的实际 等待时间;(3)EuclideanPickup :d起点与r起点间的欧式距离;(4)Return :d目的地与 i目的地间的的最短路径;(5)EUClideanRetUrn :d目的地与r目的地间的欧式距离;(6) DriverTrip :Driver Table中的第4个字段,即d的起点与目的地间的最短路径。
[0080] 步骤3,动态拼车匹配
[0081] 相对最短路径距离,两点间欧式距离的计算复杂度要低的多。因此,作为本发明中 的核心部分-动态拼车匹配方法就是基于Driver Table与Matching Table,利用欧式距 离作为出发点,设计一系列的边界条件,通过提前过筛选掉一些不需要计算所有最短路径 的司机,进而提高匹配效率,得到满足乘客需求的候选司机列表。匹配方法从整体上可分为 两个阶段:欧氏距离匹配与半欧式距离匹配。
[0082] 3. 1 欧氏距离(Euclidean Distance)匹配过程
[0083] 欧氏距离匹配的思路是使用欧氏距离代替实际距离进行预估算和筛选。因为司机 与乘客间的欧氏距离小于实际距离,因此可以利用不等式的传递性,初步排除一些不满足 要求的司机。具体步骤如下:
[0084] 3. 1. 1时间筛选。
[0085] 以乘客的起点r为圆心,将乘客最大等待时转化的欧氏距离作为半径画 一个圆QR,即执行一个范围查询(range query)。所有不包含在QK内的司机将会被排除。 原因是他们在最短距离(欧氏距离)的条件下也无法及时赶到乘客出发点。
[0086] 3. 1. 2拼车成本筛选。
[0087] 将拼车费用的公式1中的Pickup和Return分别用欧氏距离EuclideanPickup和 EuclideanReturn进行替换,得到新的费用公式
[0088] Price (d, r) = EuclideanPickup+2氺RiderTrip+EuclideanReturn - DriverTrip (公式2)
[0089] 因为欧氏距离在地图上两点间最短,根据不等式的传递性,若司机d使用公式2计 算出的理想拼车费用大于rmax ,那么d用公式1得出的实际也必然大于rmax 。所以将 这部分不符合条件的司机排除。
[0090] 3. 2 半欧氏距离(Semi-Euclidean Distance)匹配过程
[0091] 为了找出正确的候选司机列表,在欧氏距离匹配结果的基础上,需要进一步筛选, 同时还要减少最短路径计算和skyline比较的次数。思路是在公式2的基础上,分步将欧 氏距离用实际的最短路径距离代替来计算拼车费用Price (d,r),并进行筛选,以达到筛选 司机的同时尽可能减少计算的目的。半欧氏距离匹配法步骤如下:
[0092] 3. 2. 1 公式 2 中 Pickup 替换
[0093] 将 EuclideanPickup 用实际 Pickup 代替,得到:
[0094] Price (d, r) = Pickup+2*RiderTrip+EuclideanReturn - DriverTrip (公式 3)
[0095] 3· 2· 2匹配表排序
[0096] 将匹配表中的每位司机根据EuclideanReturn-DriverTrip的值按递增进行排 序。接着设置一个阀值MAX,初始化其值为乘客提出拼车请求时的费用约束r maxMre,作为最 终成为匹配成功司机的拼车成本的上边界。基于skyline计算过程(即拼车费用与等待时 间),MAX值将逐渐缩小,这样使得更多的满足乘客时间和费用约束的司机被过滤掉,即这 些司机不能作为skyline结果返回。
[0097] 3. 2. 3候选司机筛选
[0098] 该筛选过程是迭代式的。在每一次迭代过程当中,需要首先从匹配表中挑选离乘 客最近的一个司机d,可在路网上执行增量K近邻算法(Incremental K nearest neighbor) 获取。然后计算他的实际Pickup值。司机d的Pickup值只可能是以下四种情况之一:
[0099] A1司机d的PickUp>rmax Time,即司机d无法按时接到乘客。此情况下会立即终止 接下来的筛选流程,将匹配表中包括d在内的所有司机删除。因为其他司机相比于司机d, 离乘客的起点更远,无法满足乘客的时间约束。
[0100] 42司机(1的?^1〇1口〈1'_^,但(1根据公式3所计算出的拼车费用大于]\^乂。因为 不满足费用约束,司机d将会被从匹配表中删除。一同被排除的还有匹配表中位于司机d 之后的所有司机。因为根据公式3计算,虽然其他司机的RiderTrip值与司机d相同,但是 他们的Pickup和EuclideanReturn-DriverTrip的值都大于d,所以总拼车费用也必然大于 d 和 MAX。
[0101] A3司机d的Pickup〈rmax_Time,且d根据公式3所计算出的拼车费用也小于MAX,但 是d使用公式1(需要计算实际Return)计算出的拼车费用大于MAX。因此,d不能满足拼 车费用约束,不能成为候选司机。
[0102] A4以上三种情况之外。d将成为既能满足时间约束又能满足费用约束的候选司 机。接着我们将MAX的值改为司机d的实际的拼车费用(根据公式1计算得到)。然后将 该司机从匹配表中删除,最后进入下一个迭代筛选过程。更改MAX的值是因为最终返回的 匹配结果要求是skyline关系,即新的候选司机相对前一个候选司机来说,由于其等待时 间要比前一个司机长,所以其造成的拼车费用要比上一个候选司机小才能作为最终结果返 回。
[0103] 图1表示动态拼车匹配方法第一阶段过程图。首先以乘客r的起点为圆心,按最 大等待时间转化的欧氏距离作为半径,将该圆Q K内所有司机的选出,并将这些司机的信息 加入到匹配表中。然后,对于匹配表中的每一位司机,根据公式2计算他们的拼车费用。费 用大于r max_P_的司机,将会被从匹配表中删除。
[0104] 图2表示动态拼车匹配方法第二阶段过程图。首先计算出匹配表中每一位司机的 EuclideanReturn-DriverTrip值,然后依据此值的递增顺序对所有司机进行排序,并设置 MAX的值为乘客的rMx p_。然后,使用K近邻算法计算出表中离乘客最近的司机d,并算出 d的Pickup值,若此Pickup不能满足乘客的时间约束rmax_pHee,筛选过程将立即停止,并将 当前的候选司机(或者无候选司机)的信息返回乘客。这是因为剩下的司机必然比司机d 的位置更远,无法满足乘客的时间约束。通过上一步筛选后,d将会被按照公式3计算拼车 费用,如果费用不满足MAX约束,则将匹配表中d和位于d以下的所有司都机排除。对于通 过了 Pickup阶段筛选的司机d,需要计算他们的实际Return值,并根据公式1重新计算拼 车费用,如果不满足MAX约束,d也将被删除。通过Pickup和Return阶段筛选的司机d将 会成为第一位候选司机(或替换原候选司机),然后被从匹配表中删除。接着将MAX的值更 新为d的实际拼车费用。至此,司机d的半欧式距离筛选结束。系统将使用K近邻算法选 择下一个司机进行Pickup,Return和skyline筛选。以此过程筛选匹配表中的所有司机, 直到匹配表为空。最后并将候选司机(一个或没有)的信息返回给乘客。
[0105] 下面,通过图3-图9对一个具体的例子进行整个匹配过程的具体实施描述。
[0106] 图3表示基于乘客等待时间欧式距离的范围查询示例。假设乘客r (白点表示) 的最大等待时间为15分钟,那么按照司机(黑点表示)和乘客之间的欧氏距离计算,圆QK 中能够15分钟内到达的司机为.. d6。
[0107] 图4表示基于图3范围查询结果的匹配表。在图3中所选出的dlCl2d 3. ..d6将会被 填入到匹配表中。匹配表中司机的RiderTrip字段可以由司机表中的对应字段直接复制而 来。
[0108] 图5表示基于欧氏距离的拼车成本筛选示例图。乘客的rmax_time = 15, rmax_pHee = 30, RiderTrip = 12 ;司机的 EuclideanPickup,EuclideanReturn 和 DriverTrip 分别如表 中所示。司机屯将会因拼车费用大于30被从匹配表中删除。
[0109] 图6为匹配表排序示意图。由于乘客的rmax_time = 15,rmax_pHee = 30,RiderTrip = 12。因此设置MAX = rmaxJttiee = 30。将所有匹配表中的司机按EuclideanReturn-DriverTrip 值进行递增排序后,d6排在了匹配表的第一个。
[0110] 图7为替换EuclideanPickup为真实路径Pickup后的筛选示意图。图中以逆时 针的顺序分别展示了初始条件,公式2,公式3,公式1和原匹配表和筛选之后的匹配表。首 先用K近邻算法找到离乘客距离最小的司机d 3,并计算d3的Pickup = 8. 7〈15,因此d3可 以准时接到乘客。下一步,按照公式3计算d3的拼车费用(8. 7+2*12+7. 5-10) >30 (MAX)。d3 因为不能满足乘客的拼车费用约束被排除。而匹配表中位于d3之下的司机也被排除。此 时匹配表中仅剩下司机d 6和d2。
[0111] 图8为替换EuclideanReturn为真实路径Return后的筛选示意图。用K近邻算 法选出匹配表中离乘客最近的司机d5,(15能够通过Pickup阶段筛选。于是接着计算(1 5的 Return,并按照公式1计算d5的新拼车费用9. 1+2*12+7. 6-10 = 30. 7>30 (MAX),因此将d5 也从匹配表中排除。
[0112] 图9为skyline司机筛选示意图。司机d6能够通过之前所有步骤的筛选,成为 了第一个出现的备选司机。d 6的拼车费用为27. 2, Pickup为9. 3,因此将MAX的值设置为 27. 2。如图,假设下一个产生的候选司机为d2,显然d2的Pickup大于d6。接着计算d 2拼车 费用9. 4+2*12+5-9. 2>MAX(27. 2)。根据skyline比较法,因为d2的Pickup值已经大于d6, 若(1 2的拼车费用比d6还大的话,d2自然就不会被考虑。因此将(12从匹配表中删除。将此 时匹配表为空,半欧式距离筛选结束。返回候选司机d 6。
【权利要求】
1. 一种基于时间与费用约束的动态拼车匹配方法,包括: 步骤1,建立动态拼车匹配模型 作为动态拼车仅有的两个参与角色,司机与乘客在匹配时均有各自的起始位置与终点 位置,默认起点与终点间的路线为最短路径;为方便描述,使用d表示司机,r表示乘客, RiderTrip和DriverTrip分别对应司机与乘客在匹配前各自的路线,路线长度又可转换成 相应的费用成本;在匹配过程中,乘客和司机拼车费用的计算方式决定了匹配方法的设计; 考虑到司机可能需要偏离原计划路线,通过绕道去接乘客或送乘客到目的地,最终乘客应 付给司机的费用中不仅包含拼车后走的路程,还要包含司机绕道所产生的成本,下面给出 拼车费用的表示方式 : Price (d, r) = RiderTrip+Detour 其中,Price(d,r)表示拼车费用;RiderTrip表示拼车后共同走的路程,即乘客的路 线;Detour表示司机相对其原始路线多走的路程,即绕道路程,其计算方式如下: Detour (d, r) = Pickup+RiderTrip+Return - DriverTrip 其中,Pickup是司机起点与乘客起点间的路程,即司机去接乘客时的费用;Return表 示司机目的地与乘客目的地间的路程距离,即司机在送完乘客时返回的费用; 基于上述关系,可进一步得到计算拼车费用的如下公式: Price (d, r) = Pickup+2*RiderTrip+Return - DriverTrip (1) 公式1中右边的计算单元均是拼车匹配模型中的基本费用单元,在随后的匹配方法设 计当中将被使用;下面,从乘客角度出发,给出拼车匹配模型的定义; 定义1.给定一个司机集合D和一个乘客r,动态拼车匹配旨在D中找到一个子集合D', 并且对于D '中的任意一个司机,需要满足如下约束: ?时间约束:Pickup (d, r) <rmax_Time ?费用约束:Price (d,r)〈rm ax_Price ? Skyline 约束:D' 需要经过对 Pickup (d, r)与 Price (d, r)的 skyline 处理 定义1中,rmax_Time表不乘客的最大等待时间,rmax_ Mee表不乘客的最大拼车费用; 步骤2,建立动态拼车数据结构 在执行动态拼车匹配时需要涉及到相关数据的存储、排序等工作,因此需要根据定义1 所述拼车问题模型设计合适的数据结构以支撑匹配过程的运算; Driver Table司机表.拼车匹配过程中需要维护每个司机的4个字段:(1) ID:司机 d的唯一标识;(2)CurrentL〇Cati〇n :d的当前位置,由于匹配时司机可能处在移动状态, 因此该值将会随着时间的不同而可能发生变化,且该变化可由特定的终端设备来捕获并 更新,如 GPS ; (3)DestinationLocation :d 的目的地位置;(4)DriverTrip :d 的起点(即 CurrentLocation)与目的地间的最短路径; Matching Table匹配表,该表为动态拼车匹配过程中用来匹配一个乘客与多个司机的 主要依据;它包含了一对乘客r与司机d的6个字段内容:(1) ID :司机d的唯一标识;(2) Pickup :d起点与r起点间的最短路径,该值也可经换算表示成乘客r的实际等待时间;(3) EuclideanPickup :d起点与r起点间的欧式距离;(4)Return :d目的地与i目的地间的的最 短路径;(5)EuclideanReturn :d目的地与r目的地间的欧式距离;(6)DriverTrip :Driver Table中的第4个字段,S卩d的起点与目的地间的最短路径; 步骤3,动态拼车匹配 相对最短路径距离,两点间欧式距离的计算复杂度要低的多;因此,动态拼车匹配方法 就是基于Driver Table与Matching Table,利用欧式距离作为出发点,设计一系列的边界 条件,通过提前过筛选掉一些不需要计算所有最短路径的司机,进而提高匹配效率,得到满 足乘客需求的候选司机列表;匹配方法从整体上可分为两个阶段:欧氏距离匹配与半欧式 距离匹配; 3. 1欧氏距离(Euclidean Distance)匹配过程 欧氏距离匹配的思路是使用欧氏距离代替实际距离进行预估算和筛选;因为司机与乘 客间的欧氏距离小于实际距离,因此可以利用不等式的传递性,初步排除一些不满足要求 的司机;具体步骤如下: 3. 1. 1时间筛选。 以乘客的起点r为圆心,将乘客最大等待时间rmax Tinre转化的欧氏距离作为半径画一个 圆%,即执行一个范围查询(range query);所有不包含在%内的司机将会被排除; 3. 1. 2拼车成本筛选。 将拼车费用的公式1中的Pickup和Return分别用欧氏距离EuclideanPickup和 EuclideanReturn进行替换,得到新的费用公式 Price(d, r) = EuclideanPickup+2*RiderTrip+EuclideanReturn - DriverTrip (公式2) 因为欧氏距离在地图上两点间最短,根据不等式的传递性,若司机d使用公式2计算出 的理想拼车费用大于rmax ,那么d用公式1得出的实际也必然大于1*_ ;所以将这部 分不符合条件的司机排除; 3. 2半欧氏距离(Semi-Euclidean Distance)匹配过程 为了找出正确的候选司机列表,在欧氏距离匹配结果的基础上,需要进一步筛选,同时 还要减少最短路径计算和skyline比较的次数;在公式2的基础上,分步将欧氏距离用实际 的最短路径距离代替来计算拼车费用Price (d,r),并进行筛选,以达到筛选司机的同时尽 可能减少计算的目的;半欧氏距离匹配法步骤如下: 3. 2. 1公式2中Pickup替换 将EuclideanPickup用实际Pickup代替,得到: Price (d, r) = Pickup+2氺RiderTrip+EuclideanReturn - DriverTrip (公式 3) 3. 2. 2匹配表排序 将匹配表中的每位司机根据EuclideanReturn-DriverTrip的值按递增进行排序;接 着设置一个阀值MAX,初始化其值为乘客提出拼车请求时的费用约束rmax PHM,作为最终成 为匹配成功司机的拼车成本的上边界;基于skyline计算过程,即拼车费用与等待时间, MAX值将逐渐缩小,这样使得更多的满足乘客时间和费用约束的司机被过滤掉,即这些司机 不能作为skyline结果返回; 3. 2. 3候选司机筛选 该筛选过程是迭代式的。在每一次迭代过程当中,需要首先从匹配表中挑选离乘客最 近的一个司机d,可在路网上执行增量K近邻算法(Incremental K nearest neighbor)获 取;然后计算他的实际Pickup值;司机d的Pickup值只可能是以下四种情况之一: A1司机d的PickUp>rmax Time,即司机d无法按时接到乘客;此情况下会立即终止接下来 的筛选流程,将匹配表中包括d在内的所有司机删除;因为其他司机相比于司机d,离乘客 的起点更远,无法满足乘客的时间约束; A2司机d的Pickup〈rmax_Time,但d根据公式3所计算出的拼车费用大于MAX ;因为不满 足费用约束,司机d将会被从匹配表中删除;一同被排除的还有匹配表中位于司机d之后 的所有司机;因为根据公式3计算,虽然其他司机的RiderTrip值与司机d相同,但是他们 的Pickup和EuclideanReturn-DriverTrip的值都大于d,所以总拼车费用也必然大于d和 MAX ; A3司机d的Pickup〈rmax_Time,且d根据公式3所计算出的拼车费用也小于MAX,但是d 使用公式1计算出的拼车费用大于MAX;因此,d不能满足拼车费用约束,不能成为候选司 机; A4以上三种情况之外;d将成为既能满足时间约束又能满足费用约束的候选司机;接 着我们将MAX的值改为根据公式1计算得到的司机d的实际的拼车费用;然后将该司机从 匹配表中删除,最后进入下一个迭代筛选过程;更改MAX的值是因为最终返回的匹配结果 要求是skyline关系,即新的候选司机相对前一个候选司机来说,由于其等待时间要比前 一个司机长,所以其造成的拼车费用要比上一个候选司机小才能作为最终结果返回。
【文档编号】G08G1/00GK104217249SQ201410311685
【公开日】2014年12月17日 申请日期:2014年7月2日 优先权日:2014年7月2日
【发明者】曹斌, 赵立为, 范菁 申请人:浙江工业大学