基于改进dijkstra算法的网约车调度方法
技术领域
1.本发明涉及路径距离规划技术领域,特别是涉及一种基于改进dijkstra算法的网约车调度方法。
背景技术:2.基于移动互联网和移动设备的迅猛发展,网约车作为一种新的行业形态已经风靡全球,它为乘客和司机提供了一个交互平台,能实时获取需求和车辆信息,进行在线调度,完成司机和乘客匹配,并从已完成订单中抽取部分作为平台收入。因此,一个网约车平台能否持续发展,关键在于司机、乘客、平台三者之间的利益平衡。而这又取决于该平台所采用的核心调度算法。目前市场和研究中,系统派单调度模式已占据主流地位,但在派单模式中,当前的调度算法存在考虑司乘之间路网距离和考虑司机空载时间这两种模式,而在实际情况中,距离乘客最近的司机可能因为实时路况等复杂因素,反而比其他司机需要更多时间接到乘客。另一方面,综合双方乃至三方利益的调度方式还很少见,网约车平台作为提供服务的第三方,综合考虑多方利益是有必要的。除此之外,网约车平台还需考虑的一个问题便是供需平衡问题,当司机长期处于人流密度低的区域自然获得的效益低,同时乘客订单密度大的区域也需要更多的司机服务。
技术实现要素:3.有鉴于此,本发明提出一种基于改进dijkstra算法的网约车调度方法,选取了经典的dijkstra算法,并在其基础上调整权重,把路网距离影响因子和基于实时路况的时间影响因子综合考虑,形成新的乘客需求与司机匹配策略,在极大地提高了网约车司机利用率的同时兼顾了网约车平台和乘客的利益,经济效益突出。
4.一方面,本发明提供了一种基于改进dijkstra算法的网约车调度方法,包括以下步骤:s1、获取指定区域内路网数据、poi数据、出租车行程gps数据和实时路况数据;s2、基于dijkstra算法,在权重中添加路网距离影响因子和基于实时路况的时间影响因子,形成改进dijkstra算法;s3、依据poi数据与出租车行程gps的综合数据产生随机乘客与司机分布,为每一个随机产生的乘客设定一个调度范围,通过改进dijkstra算法在调度范围中进行司机和路径搜索,得到兼顾乘客、司机和网约平台三者利益的最优化路径。
5.进一步地,所述路网数据通过open street map下载至路网osm文件中,且路网数据中的点集与边集都是采用墨卡托投影坐标系,将墨卡托投影坐标系转换为gcj
‑
02坐标系统,得到转换后路网交叉点集和转换后路网边集。
6.进一步地,所述转换后路网交叉点集由allid栏、lon栏和lat栏组成,allid栏表示全地图中的节点id,lon栏表示节点经度,lat栏表示节点纬度;所述转换后路网边集由id栏、newstart栏、newend栏、length栏和freespeed栏组成,id栏表示全地图中的边id,
newstart栏表示起点的节点allid,newend栏表示终点的节点allid,length栏表示边权值,即路段的长度,单位为米,freespeed栏表示最高限速,单位为米每秒。
7.进一步地,所述poi数据使用爬虫技术从现有的app地图软件上获取得到,每条poi数据包括经度、纬度、namepoi名称、地址、省份、城市、商业区域、big_type、meddle_type和small_type;所述出租车行程gps数据至少包含车辆id、设备号、方向角、gps经纬度;通过综合poi数据与出租车行程gps数据,获得指定区域内人群分布以及人流量的汇总集合,将地图进行路网分割,分割成1km*1km的网格,其中,网格中数据量越大,则表明该区域的人流量及人口密度越大。
8.进一步地,所述实时数据通过利用现有的app地图软件api提供的交通态势接口,使用python爬虫技术获取得到。
9.进一步地,所述兼顾乘客、司机和网约平台三者利益的最优化路径具体为平台接单成功率高,乘客等候时间短,司机空载时间与距离小的路径。
10.进一步地,所述步骤s3具体表现为:以一个随机产生的乘客为原点在调度范围内进行搜索,计算出调度范围内所有司机中距离最短的司机的距离,计算在当前路况下预计到达时间最短的司机的时间,根据公式(1),计算出每一位司机的综合权重,并根据司机的综合权重大小,选择所有司机中综合权重最大的那一位司机接单派送:
ꢀꢀꢀꢀꢀ
(1)式中,为第i个司机距离原点乘客的距离,为第i个司机在当前路况下到达原点乘客的预计抵达时间,为第i个司机的综合权重,a为路网距离影响因子,b为时间影响因子,其中,的表达式如下:
ꢀꢀꢀꢀꢀ
(2)其中,l
m
为第i个司机接送乘客的路径中第m段道路的长度,s
m
为第i个司机接送乘客的路径中第m段道路的限速,rs
m
为第i个司机接送乘客的路径中当前的拥堵情况,n表示司机接送乘客的路径中的道路总段数。
11.进一步地,每个网格的左下角点经纬度、右上角点经纬度,即可获取该区域内实时路况数据,针对每个网格路况按照其严重拥堵、缓行、畅通优先级确定该区域的实时路况状态,为确定时间影响因子提供依据。
12.本发明提供的基于改进dijkstra算法的网约车调度方法,首先获取指定区域内路网数据、poi数据、出租车行程gps数据和实时路况数据;其次,选取了经典的dijkstra算法,并在其基础上调整权重,把路网距离影响因子和基于实时路况的时间影响因子综合考虑,形成新的乘客需求与司机匹配策略;最后,依据poi数据与出租车行程gps的综合数据产生随机乘客与司机分布,为每一个随机产生的乘客设定一个调度范围,通过改进dijkstra算法在调度范围中进行司机和路径搜索,得到兼顾乘客、司机和网约平台三者利益的最优化
路径。本发明有效地提高了司机的利用率,平台的接单率,以及减少了乘客的等待时间。
附图说明
13.构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1为本发明实施例提供的基于改进dijkstra算法的网约车调度方法的流程图;图2为某城市路网全貌图;图3
‑
1为晚高峰实时路况对司机接到乘客时间的影响折线图;图3
‑
2为晚间20点30分实时路况对司机接到乘客时间的影响折线图;图3
‑
3为午间13点30分实时路况对司机接到乘客时间的影响折线图;图3
‑
4为实时路况对司机接到乘客前空载距离的影响折线图;图3
‑
5为实时路况对接单成功率的影响折线图。
具体实施方式
14.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
15.为更好地阐述本发明,特对dijkstra算法做出进一步说明:dijkstra算法能够计算图论中从一个顶点到其余各顶点的最短路径,以贪心算法的思想,解决了有权图中的最短路径问题。算法以起始点为中心,逐层向外部扩展,一直扩展到所有节点遍历完毕为止。dijkstra算法声明一个数组distance来保存源点到其他各个顶点的最短距离和一个保存已经找到了最短路径的顶点的集合:t。初始时,源点s的路径权重被赋为0即distance[s]=0。若对于源点s存在能直接到达的边(s,m),则把distance[m]设为weight(s, m),同时把所有其他(s不能直接到达的)顶点的路径长度设为∞。初始时,集合t只有源点s然后,从distance数组选择最小值,则该值就是源点s到该值对应的顶点的最短路径,并且把该点加入到集合t中,此时完成一个顶点,然后,查询新加入的顶点是否可以到达其他顶点并且查询通过该顶点到达其他点的路径长度是否比源点直接到达短,如果是,那么就替换这些顶点在distance中的值。然后又从distance中找出最小值,重复步骤,直到集合t中包含了图的所有顶点,算法结束。
[0016]
传统的dijkstra算法使用路径作为权重进行全局的广度优先搜索,运用此种传统的dijkstra算法以乘客为源点,对周边司机进行搜索,选择路径最短的司机进行派单。
[0017]
图1是根据本发明实施例提供的基于改进dijkstra算法(迪克斯特拉算法)的网约车调度方法的流程图。如图1所示,该调度方法包括以下步骤:s1、获取指定区域内路网数据、poi数据、出租车行程gps数据和实时路况数据;具体地:路网数据通过open street map(osm,公开地图)下载至路网osm文件中,且路网数据中的点集与边集都是采用墨卡托投影坐标系,将墨卡托投影坐标系转换为gcj
‑
02坐标系统(由中国国家测绘局制订的地理信息系统的坐标系统),得到转换后路网交叉点集和转换后路网边集。转换后路网交叉点集由allid栏、lon栏和lat栏组成,allid栏表示全地图中的节点id,lon栏表示节点经度,lat栏表示节点纬度;所述转换后路网边集由id栏、newstart
栏、newend栏、length栏和freespeed栏组成,id栏表示全地图中的边id,newstart栏表示起点的节点allid,newend栏表示终点的节点allid,length栏表示边权值,即路段的长度,单位为米,freespeed栏表示最高限速,单位为米每秒。
[0018]
poi(point of interest,兴趣点)数据使用爬虫技术从现有的app地图软件上获取得到,每条poi数据包括经度、纬度、namepoi名称、地址、省份、城市、商业区域、big_type、meddle_type和small_type;所述出租车行程gps数据至少包含车辆id、设备号、方向角、gps经纬度;通过综合poi数据与出租车行程gps数据,获得指定区域内人群分布以及人流量的汇总集合,将地图进行路网分割,分割成1km*1km的网格,其中,网格中数据量越大,则表明该区域的人流量及人口密度越大,反之相反。需要说明的是,其中namepoi名称是poi点的名词信息,具体实例见表1;big_type属性为描述性词语,是一个大的类别,包括科教文化服务、风景名胜、公司企业等等;meddle_type属性会更具体,是一个细化的类别,例如科教文化服务包括学校、科研机构、科教文化场所等等;small_type属性是最具体的,是最细化的类别,例如学校包括幼儿园、小学、中学、高等院校等等,具体参见下表2:校包括幼儿园、小学、中学、高等院校等等,具体参见下表2:实时数据通过利用现有的app地图软件api提供的交通态势接口,使用python爬虫技术获取得到。
[0019]
需要说明的是,现有的app地图软件可为高德地图、百度地图或其他可实现地图功能的app。
[0020]
s2、基于dijkstra算法,在权重中添加路网距离影响因子和基于实时路况的时间影响因子,形成改进dijkstra算法;优选地,每个网格的左下角点经纬度、右上角点经纬度,即可获取该区域内实时路况数据,针对每个网格路况按照其严重拥堵、缓行、畅通优先级确定该区域的实时路况状态,为确定时间影响因子提供依据。
[0021]
s3、依据poi数据与出租车行程gps的综合数据产生随机乘客与司机分布,为每一个随机产生的乘客设定一个调度范围,通过改进dijkstra算法在调度范围中进行司机和路
径搜索,得到兼顾乘客、司机和网约平台三者利益的最优化路径。该步骤具体表现为:以一个随机产生的乘客为原点在调度范围内进行搜索,计算出调度范围内所有司机中距离最短的司机的距离,计算在当前路况下预计到达时间最短的司机的时间,根据公式(1),计算出每一位司机的综合权重,并根据司机的综合权重大小,选择所有司机中综合权重最大的那一位司机接单派送:
ꢀꢀꢀ
(1)式中,为第i个司机距离原点乘客的距离,为第i个司机在当前路况下到达原点乘客的预计抵达时间,为第i个司机的综合权重,a为路网距离影响因子,b为时间影响因子,其中,的表达式如下:
ꢀꢀꢀ
(2)其中,l
m
为第i个司机接送乘客的路径中第m段道路的长度,s
m
为第i个司机接送乘客的路径中第m段道路的限速,rs
m
为第i个司机接送乘客的路径中当前的拥堵情况,n表示司机接送乘客的路径中的道路总段数。
[0022]
为更好地阐述本发明的技术方案,下面通过实例进行论证:图2为open street map提供的某城市路网地图,在该路网原始数据集中,包含了16964个node(节点),即路网交叉点与37640个link(线)即道路。在open street map下载的路网osm文件中,点集与边集都是采用墨卡托投影坐标系,为了便于实验分析,统一实验中数据的坐标系统,将墨卡托投影坐标系转换为gcj
‑
02坐标,转换后路网交叉点集如表3所示,allid栏为全地图中的节点id,lon栏为节点经度,lat栏为节点纬度:转换后路网边集如表4所示,id栏为全地图中的边id,newstart栏为起点的节点allid,newend栏为终点的节点allid,length栏为边权值,即路段的长度,单位为米,freespeed栏为最高限速,单位为米每秒:
实例中poi数据通过数据清洗得到66842条,出租车的数量约为8000辆,选取工作日该城市出租车每30秒记录的gps数据进行实验,对数据进行预处理,删除重复与异常的数据。综合poi数据与出租车行程gps数据,可以获得该城市的人群分布以及人流量的汇总集合,将地图进行路网分割,分割成1km*1km的网格,网格中数据量越大,这个区域的人流量及人口密度越大,反之相反。在模拟仿真实验中,依据poi与出租车gps的综合数据产生随机的乘客与司机分布,符合真实情况。
[0023]
该实例中使用路网分割将上述城市市路网划分为1km*1km的网格,共计55行
×
78列,故在获取路况数据时,同样采取矩形区域交通态势接口获取。通过提供每个网格的左下角点经纬度、右上角点经纬度,即可获取该区域内实时路况数据。每个区域实时路况数据原始内容如下表5所示:该实例中,选用的实时路况数据分午间13:30、下午17:30、晚间20:30三个时间段,每个时间段获取到以上4290个矩形区域的原始实时路况数据存入excel表格,根据该城市实际数据分析,将其分为畅通(1)、缓行(2)、严重拥堵(3)三个等级。针对每个矩形网格路况按照其严重拥堵、缓行、畅通优先级确定该区域的实时路况状态,最后汇总为一个55行
×
78列的实时路况表,为确定时间影响因子提供依据。
[0024]
本发明改进dijkstra算法,在传统dijkstra算法上加入对当前路况对车速的影响的因素,对比传统dijkstra算法,并比较分析平台接单的成功率,乘客的等候时间,司机的空载时间与距离,从而证明改进dijkstra算法对三方利益的兼顾是有效的。
[0025]
本发明选用一个路网地图为东西跨度约为77.8654公里,南北跨度约为54.5567公里的一个矩形区域进行仿真建模。在真实的网约车匹配场景中,网约车的数量通常比较大,而在建模过程中,生成网约车的数量也会增加服务器的计算量,因此从节约运算成本的角度出发,为每一个随机产生的乘客设定一个边长为10公里的调度范围,对于调度的路线将在这一调度范围中进行路径搜索。
[0026]
随机产生乘客数量x与司机数量y,设定其调度范围r,以乘客为原点在调度范围内进行搜索,计算出调度范围内所有司机中距离最短的司机的距离,计算在当前路况下预计到达时间最短的司机的时间,根据公式(1),计算出每一位司机的综合权重,并根据司机的综合权重大小,选择所有司机中综合权重最大的那一位司机接单派送:
ꢀꢀꢀꢀꢀꢀ
(1)式中,为第i个司机距离原点乘客的距离,为第i个司机在当前路况下到达原点乘客的预计抵达时间,为第i个司机的综合权重,a为路网距离影响因子,b为时间影响因子。
[0027]
其中司机在路径上的行驶速度受到最高限速以及实时路况中拥堵程度的影响,而司机接送乘客的路径上会经过多条道路,每一条道路的拥堵情况和限速可能会不一样,故司机接送乘客的时间为的表达式如下:
ꢀꢀꢀ
(2)其中,l
m
为第i个司机接送乘客的路径中第m段道路的长度,s
m
为第i个司机接送乘客的路径中第m段道路的限速,rs
m
为第i个司机接送乘客的路径中当前的拥堵情况,n表示司机接送乘客的路径中的道路总段数。
[0028]
通过实验对比得到司机接到乘客的时间会随着考虑时间的权重增大而减少。如图3
‑
1至图3
‑
3中,横坐标为时间影响因子,纵坐标为司机平均接单时间。当横坐标的时间影响因子为0时,即传统的dijkstra算法,由于没有考虑晚高峰中拥堵程度对车速的影响,所以司机接到乘客的时间会比优化后的dijkstra算法更多。图3
‑
1为晚高峰实时路况对司机接到乘客时间的影响折线图。优化后的算法,如图3
‑
1所示,在晚高峰极为拥堵的情况下,当时间影响因子为1时,减少乘客等待司机的时间近50秒。
[0029]
图3
‑
2为晚间20点30分实时路况对司机接到乘客时间的影响折线图;图3
‑
3为午间13点30分实时路况对司机接到乘客时间的影响折线图。如图3
‑
2、3
‑
3,即使是在非晚高峰的晚间20点30分和午后13点30分,当时间影响因子为1时,考虑实时路况的dijkstra算法也会比传统的dijkstra算法,减少乘客等待司机的时间30多秒。
[0030]
考虑到实时路况在改进dijkstra算法的权重占比过高,对传统dijkstra算法中考虑距离的权重会过低,为了兼顾司机在接到乘客的过程中,尽量减少司机的空载距离与时间,在实验中,对比实时路况对司机接到乘客前空载距离的影响,结果如图3
‑
4。图3
‑
4中,横坐标为时间影响因子,纵坐标为司机平均接单路程,图中三条折线分别表示下午5点30分、晚上8点30分、中午1点30分实时路况对司机接到乘客前空载距离的影响折线。
[0031]
从结果中得出,过多的依赖实时路况对调度算法的影响而忽略了距离的影响,会使司机在接到乘客前的空载距离变多,故为达到兼顾司乘间的共同利益,将改进dijkstra算法中的距离影响因子a设置为0.5,时间影响因子b也设置为0.5。此时,不仅能时司机空载的时间大幅减少,空载的距离也得到很好的控制,使司机的利益得到充分保障。
[0032]
最后,对比观察平台的接单成功率,在距离影响因子a设置为0.5,时间影响因子b也设置为0.5的情况下,如图3
‑
5所示,其横坐标为时间影响因子,纵坐标为司机平均接单成功率,图中三条折线分别表示下午5点30分、晚上8点30分、中午1点30分实时路况对司机接单成功率的影响折线,从中可知:接单的成功率要比传统的dijkstra算法更高。因此改进dijkstra算法可以做到兼顾司机、乘客、平台三方利益。
[0033]
本发明选取了经典的dijkstra算法,并在其基础上基于路网距离影响因子和基于实时路况的时间影响因子调整权重因子,综合考虑乘客等待时间、司机空载时间和距离、网约车平台接单率来设计新的乘客需求与司机匹配策略,在极大地提高了网约车司机利用率的同时兼顾了网约车平台和乘客的利益,经济效益突出。
[0034]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。