本发明涉及图计算,更具体地,涉及一种根据偏离点划分的并行求解前k条最短路径的方法。
背景技术:
1、在图计算领域中,求解前k条最短路径的技术针对的是用户除了最优解外,还需要其它次优解的问题。一般情况下,最短路径算法求解的是两点之间最短的路径,不包括第二短、第三短等路径.然而在实际情况下,只求解一条最短路径是有局限性的。例如,特殊情况下出行者在选择出行路径的问题中,出行者除了希望得到最短路径外,还需要考虑路径上的结点是否因封闭无法通行、该结点人流量是否过于密集等问题,所以出行者还期望得到第二短、第三短等路径作为备选策略。当引入其它的约束条件时,传统的最短路径算法求得的最短路可能无法解决问题,此时问题的解决方案要从k条最短路集合中选取,此时需要应用求解前k条最短路径的技术。
2、yen算法本质上是一种贪心策略,它的原理是将最短路径上除目标点外的所有点都视为偏离结点,且对于每一个偏离结点,yen算法都试图找出经过该结点且与前一条最短路径不同的候选路径.当对所有的偏离结点搜索完毕后,即找到了所有可能的次短路径,此时按照权值和最小原则即可选出新的最短路径。重复该步骤,直到找到所需的k条最短路径。该算法是传统的串行算法,需对每一个偏离点迭代求解,当图规模扩大时,应用该技术求解所需的时间就会极大增长。
3、现有技术公开一种基于boost库的k则最短路径搜索方法,采用偏离边算法搜寻多重路由,但该算法并没有解决求解时间长的问题。
技术实现思路
1、本发明提供一种根据偏离点划分的并行求解前k条最短路径的方法,使计算效率得到一定程度的提升。
2、为解决上述技术问题,本发明的技术方案如下:
3、一种根据偏离点划分的并行求解前k条最短路径的方法,包括以下步骤:
4、s1:读取图g,所述图g中的点表示不同的地点,两点之间的连线的权值表示两点的距离;
5、s2:计算图g的最短路径,并将所述最短路径存入最短路径集合a中;
6、s3:将图g和所述最短路径集合a传播至所有子进程;
7、s4:读取最短路径集合a中的上一轮迭代得到的最短路径,获得上一轮迭代得到的最短路径上的所有的偏离点,将所述偏离点分割为若干份,每一份分配一个子进程;
8、s5:每个子进程根据分配到的偏离点求解对应的候选路径,并保存至各自的子进程最短路径集合b中;
9、s6:各子进程根据各自的子进程最短路径集合b,选出权值和最小且结点数最小的本地最短路径;
10、s7:收集各子进程的本地最短路径信息,从中选出全局最短路径,将所述全局最短路径添加至最短路径集合a中,相应的子进程最短路径集合b中移除所述全局最短路径;
11、s8:重复步骤s4至步骤s7,直到找到需要的k条路径或各进程内子进程最短路径集合b均为空,得到前k条最短路径。
12、优选地,步骤s2中使用包括dijkstra算法,δ-stepping算法的单条最短路径算法计算图g的最短路径。
13、优选地,步骤s4中将所述偏离点分割为若干份,具体为:
14、按照上一轮迭代得到的最短路径,节点从前到后的顺序进行分割,每一份包含的节点数为m/n取整,m为偏离节点数,n为并行进程数。
15、优选地,步骤s5中每个子进程根据分配到的偏离点,使用包括dijkstra算法,δ-stepping算法的单条最短路径算法求解对应的候选路径。
16、优选地,步骤s7中使用comm.barrier()同步各子进程,收集各子进程的本地最短路径信息,从中选出全局最短路径。
17、本发明还提供一种根据偏离点划分的并行求解前k条最短路径的系统,包括:
18、读取模块,所述读取模块读取图g,所述图g中的点表示不同的地点,两点之间的连线的权值表示两点的距离;
19、第一计算模块,所述计算模块计算图g的最短路径,并将所述最短路径存入最短路径集合a中;
20、传播模块,所述传播模块将图g和所述最短路径集合a传播至所有子进程;
21、偏离点分割模块,所述偏离点分割模块读取最短路径集合a中的上一轮迭代得到的最短路径,获得上一轮迭代得到的最短路径上的所有的偏离点,将所述偏离点分割为若干份,每一份分配一个子进程;
22、第二计算模块,所述第二计算模块根据每个子进程分配到的偏离点求解对应的候选路径,并保存至各自的子进程最短路径集合b中;
23、本地最短路径模块,所述本地最短路径模块根据各子进程的子进程最短路径集合b,选出权值和最小且结点数最小的本地最短路径;
24、全局最短路径模块,所述全局最短路径模块收集各子进程的本地最短路径信息,从中选出全局最短路径,将所述全局最短路径添加至最短路径集合a中,相应的子进程最短路径集合b中移除所述全局最短路径;
25、前k条最短路径模块,所述前k条最短路径模块重复偏离点分割模块至全局最短路径模块的步骤,直到找到需要的k条路径或各进程内子进程最短路径集合b均为空,得到前k条最短路径。
26、优选地,第一计算模块中使用包括dijkstra算法,δ-stepping算法的单条最短路径算法计算图g的最短路径。
27、优选地,偏离点分割模块中将所述偏离点分割为若干份,具体为:
28、按照上一轮迭代得到的最短路径,节点从前到后的顺序进行分割,每一份包含的节点数为m/n取整,m为偏离节点数,n为并行进程数。
29、优选地,第二计算模块中每个子进程根据分配到的偏离点,使用包括dijkstra算法,δ-stepping算法的单条最短路径算法求解对应的候选路径。
30、优选地,全局最短路径模块中使用comm.barrier()同步各子进程,收集各子进程的本地最短路径信息,从中选出全局最短路径。
31、与现有技术相比,本发明技术方案的有益效果是:
32、本发明基于yen算法的思想,利用算法内各偏离点计算互不干扰的特点,提出了一种根据偏离点划分的并行求解前k条最短路径的算法,本发明求解每一条最短路径时,都会有多个进程同时计算候选路径,这样就可以缩短算法收敛的时间。理想情况下,并行yen算法的收敛时间是串行的1/进程数。考虑到各进程间通讯的损耗,实际收敛时间要多于理想时间,但相比于原始串行算法,算法的计算效率依旧提升了很多。
1.一种根据偏离点划分的并行求解前k条最短路径的方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的根据偏离点划分的并行求解前k条最短路径的方法,其特征在于,步骤s2中使用包括dijkstra算法,δ-stepping算法的单条最短路径算法计算图g的最短路径。
3.根据权利要求2所述的根据偏离点划分的并行求解前k条最短路径的方法,其特征在于,步骤s4中将所述偏离点分割为若干份,具体为:
4.根据权利要求3所述的根据偏离点划分的并行求解前k条最短路径的方法,其特征在于,步骤s5中每个子进程根据分配到的偏离点,使用包括dijkstra算法,δ-stepping算法的单条最短路径算法求解对应的候选路径。
5.根据权利要求4所述的根据偏离点划分的并行求解前k条最短路径的方法,其特征在于,步骤s7中使用comm.barrier()同步各子进程,收集各子进程的本地最短路径信息,从中选出全局最短路径。
6.一种根据偏离点划分的并行求解前k条最短路径的系统,其特征在于,包括:
7.根据权利要求6所述的根据偏离点划分的并行求解前k条最短路径的系统,其特征在于,第一计算模块中使用包括dijkstra算法,δ-stepping算法的单条最短路径算法计算图g的最短路径。
8.根据权利要求7所述的根据偏离点划分的并行求解前k条最短路径的系统,其特征在于,偏离点分割模块中将所述偏离点分割为若干份,具体为:
9.根据权利要求8所述的根据偏离点划分的并行求解前k条最短路径的系统,其特征在于,第二计算模块中每个子进程根据分配到的偏离点,使用包括dijkstra算法,δ-stepping算法的单条最短路径算法求解对应的候选路径。
10.根据权利要求9所述的根据偏离点划分的并行求解前k条最短路径的系统,其特征在于,全局最短路径模块中使用comm.barrier()同步各子进程,收集各子进程的本地最短路径信息,从中选出全局最短路径。