一种基于两阶段处理的点到点最短路求解方法

文档序号:35847720发布日期:2023-10-25 18:06阅读:39来源:国知局
一种基于两阶段处理的点到点最短路求解方法

本发明涉及图计算,更具体地,涉及一种基于两阶段处理的点到点最短路求解方法。


背景技术:

1、通过将研究对象抽象成图的顶点,将对象与对象之间的关系抽象成顶点之间的边,现实中的许多问题的研究对象都可以转化为图数据结构,因此很多问题都可以转化为图计算的相关问题来解决。

2、点到点最短路径问题主要研究的是选取图中的两个顶点分别作为源点与目标点,求解从源点到目标点的最短路径,这一问题在实际场景中有许多的应用,如交通导航、航路规划等等,而这些场景通常需要对同一幅图进行大规模多次的查询。

3、进入21世纪,电子商务的浪潮席卷而至,大大小小的电子商务网站如雨后春笋般出现在了互联网。要想在竞争惨烈的电商大战中生存下来必须要建立企业的核心竞争力,而物流配送必定是其中之一。长期以来,物流配送人员在道路上穿梭时往往靠经验选择路线,这样的选择不具有实时性,且人为的判断不太精准。所以物流的效率一直无法有效提高。

4、所以随着信息化的发生,现在越来越多的物流配送也采用gps(全球定位系统)定位导航的方式来选择目的地的路线,但是由于现有地图信息得到数据量越发庞大,很多时候求解出来的路线并不一定是最短路径。

5、在大数据的应用场景下,对最短路径求解算法的运行时间效率的要求越来越高,两阶段处理算法成为了研究热点。此类算法的主要思想在于将求解过程分为两个阶段--预处理阶段与在线查询阶段。在预处理阶段,主要是对图离线计算并且存储相应的计算结果以及附加数据,而在线查询阶段就可以利用在预处理阶段保存的数据进行少量的计算从而快速地得到结果。

6、现有技术中公开一种在建筑中计算平面内任意点到点最短路径的方法及系统,将平面空间抽象为计算机可操作的点point、边edge、多边形polygon和图graph;对初始的图graph使用可见点算法进行可见性图visibility graph的计算;对要计算的点,将额外的可见边additional visibility edges添加到可见性图visibility graph中;使用dijkstra算法寻找最短路径。该方案直接使用dijkstra算法,其计算效率不高,在面对大图数据时计算实时性不强。


技术实现思路

1、本发明提供一种基于两阶段处理的点到点最短路求解方法,改进dijkstra算法,提升了点到点最短路径的求解效率。

2、为解决上述技术问题,本发明的技术方案如下:

3、一种基于两阶段处理的点到点最短路求解方法,包括以下步骤:

4、s1:获取地图信息,根据地图信息构建图g;

5、s2:对dijkstra算法进行改进,在dijkstra算法的预处理阶段,引入reach值并改进reach值的计算方式,采用上界值限制reach值;在dijkstra算法的在线查询阶段,引入heap与map数组求取精确解;通过reach值对在线查找的过程进行剪枝;

6、s3:利用步骤s2改进的dijkstra算法对步骤s1中得到的图g进行处理,得到源点与汇点的最短路径。

7、在上述技术手段中,对dijkstra算法进行改进,引入reach值并改进reach值的计算方式,采用上界值限制reach值;在dijkstra算法的在线查询阶段,引入heap与map数组求取精确解;通过reach值对在线查找的过程进行剪枝,提升了dijkstra算法的计算效率。

8、优选地,步骤s1中,根据地图信息构建图g,具体为:

9、将地图中不同地点作为顶点,地点之间的道路作为边,构建图g。

10、优选地,步骤s2中,改进的dijkstra算法的预处理阶段,具体包括以下步骤:

11、s2.01:计算当前已经求得的最大上界值c;

12、s2.02:对v'中的每个顶点v,设置bounds(v)为0,r(v)为0,r(v)表示顶点v的精确reach值;

13、s2.03:定义图h={vh,eh},其中eh={(x,y)|x∈v',y∈v},

14、s2.04:对v'中的每个顶点s′,以s′为根节点,在图h和最大上界值c的约束下生成部分最短路径树;

15、s2.05:根据部分最短路径树,计算bounds(v),并更新r(v)和bounds(v);

16、s2.06:对于r(v)大于预设阈值的顶点,将其reach上界值重设为∞,返回步骤s2.01,若求解出reach上界值的顶点的比例满足规定比例,迭代结束。

17、优选地,步骤s2.01中,计算当前已经求得的最大上界值c,具体为:

18、c=max{bounds(x)|x∈v-v'}

19、式中,bounds(x)为顶点x的reach上界值,初始状态下,bounds(x)=∞;v为图g中的顶点集合,v'为图g'的顶点集合,图g'是图g的子图,g'={v',e'},v'中存储仍未求reach上界值,即bounds(v)为∞的顶点,e'存放连接v'中两个顶点的边,初始状态下,g'=g。

20、优选地,步骤s2.04对v'中的每个顶点s′,以s′为根节点,在图h和最大上界值c的约束下生成部分最短路径树,具体为:

21、如果存在边(x,y)∈e-e',则有:

22、g=,ax{nounds(x)+w(x,s′)|(x,s′)∈e-e'}

23、d=max{w(x,s′)|(x,s′)∈e-e'}

24、如果不存在边(x,y)∈e-e',则g=d=0;

25、式中,e为图g的边集合,g、d为两个不同的限制参数,w(x,s′)为边(x,s′)的权值;

26、以s′根节点在图h上运行dijkstra算法生成最短路径树t,并根据最大上界值c和限制参数d设置提前终止条件,当生成的最短路径满足提前终止条件时,停止生成树。

27、优选地,所述提前终止条件,具体为:

28、当最短路径p′的长度达到2b[i]+c+d+w(f)+w(l)时,停止生成树,式中,i为当前迭代次数,b[i]为自定义阈值数组b中的第i个数,所述自定义阈值数组b中的数为一列从小到大排列的常数,w(f)位最短路径上的第一条边的权值,w(l)为最短路径上的最后一条边的权值。

29、优选地,步骤s2.05中,根据部分最短路径树,计算bounds(v),并更新r(v)和bounds(v),具体为:

30、对部分最短路径树t进行遍历,计算r(v,t),r(v,t)表示顶点v在部分最短路径树t上的相对reach值;

31、若r(v,t)>r(v),则更新r(v)=r(v,t);

32、对于部分最短路径树t中所有从s′根节点到叶子节t′的最短路径p′:如果t′∈v-v',则令rt=bounds(t′),否则rt=0;rb=min{g+l(s′,v,p′),rt+l(v,t′,p′)},如果rb>bounds(v),则更新bounds(v)=rb。

33、优选地,步骤s2.06中,对于r(v)大于b[i]的顶点,则将bounds(v)重设为∞,返回步骤s2.01。

34、优选地,步骤s2中改进的dijkstra算法的在线查询阶段,具体包括以下步骤:

35、从源点s与汇点t交替运行dijkstra算法,即假设当前为正向搜索过程,并且即将扫描点v,则df(v)就是源点s到顶点v的最短路径长度,同时令γ为后向搜索中已标记顶点的最短距离标签,假设顶点v还未在后向搜索中被扫描,则γ是顶点v到汇点t的最短距离下界dist(v,t),则当顶点v满足预设条件时,对顶点v进行剪枝。

36、优选地,所述预设条件具体为:

37、(1)顶点v在后向搜索中未被扫描;

38、(2)bounds(v)<df(v);

39、(3)bounds(v)<γ。

40、与现有技术相比,本发明技术方案的有益效果是:

41、本发明基于两阶段处理的思想对dijkstra算法进行改进,提升了在大规模多次查询情况下,算法总体的运行时间。在预处理阶段,引入reach值并改进reach值的计算方式,采用上界值提高计算效率;在在线查询阶段,对于传统算法引入前向-后向查找的过程,缩小搜索域,提升搜索效率;针对经典前向-后向查找无法得到精确解的问题,通过引入heap与map数组求取精确解;通过reach值对在线查找的过程进行剪枝,提高搜索效率。对比同样为最短路径问题求解算法的:a*算法,本发明提出的两阶段搜索策略,可以拓展到没有二维坐标的网络,效果比a*算法更加稳定。

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