一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于计算大规模图上单源最短路径的并行Radius-Stepping方法和系统

2022-07-13 23:38:40 来源:中国专利 TAG:

用于计算大规模图上单源最短路径的并行radius-stepping方法和系统
技术领域
1.本发明涉及图计算领域,更具体地,涉及一种用于计算大规模图上单源最短路径的并行radius-stepping方法和系统。


背景技术:

2.radius-stepping算法是一种串行算法,通过算法通过一个预先定义好的函数,该函数的输入为某个顶点,输出为一个正实数,使内循环步长为一个不断修正的值。此外,radius-stepping算法在(k,ρ)图上的处理速度更快,如果提前把图转换为(k,ρ)图可以提升该算法的效率。
3.但是radius-stepping算法在处理大规模图上单源最短路径时,无法实时的计算得到单源最短路径,计算效率较慢。
4.现有技术公开一种大规模图数据处理方法,用于解决现有大规模图数据处理方法效率低的技术问题。技术方案是将每个并行作业转换为一系列全局迭代作业,每次迭代分为计算、全局通信和栅栏同步三个有序阶段。计算分为全局计算和本地计算,其中本地计算由一系列连续的内部迭代组成;全局通信阶段每个工作节点把当前全局迭代的消息发送给进行下一次全局迭代的工作节点;栅栏同步阶段主节点等待所有工作节点消息传递完成,然后开始下一次全局迭代。该方案同样存在效率低下的问题。


技术实现要素:

5.本发明的首要目的是提供一种用于计算大规模图上单源最短路径的并行radius-stepping方法,提升radius-stepping算法的效率。
6.本发明的进一步目的是提供一种用于计算大规模图上单源最短路径的并行radius-stepping系统。
7.为解决上述技术问题,本发明的技术方案如下:
8.一种用于计算大规模图上单源最短路径的并行radius-stepping方法,包括以下步骤:
9.s1:对于待计算的大规模图,为所述大规模图中所有的顶点维护一个临时最短路径和一个集合s,集合s为所述大规模图中的点的子集合;
10.s2:将所述大规模图中所有的顶点划分为若干部分分别分配给不同的子进程;
11.s3:根据各顶点的临时最短路径、集合s和radius函数计算一个上界,根据所述上界,筛选需要进行处理的顶点;
12.s4:由各个子进程分别处理对应的顶点,得到更新后的临时最短路径;
13.s5:由根进程汇总所有子进程处理后得到的更新后的临时最短路径,再传递给所有的子进程;
14.s6:根据步骤s3计算得到的上界,更新集合s,判断是否继续循环,若继续,返回步
骤s3;若不继续,输出所述大规模图中所有顶点的最短路径。
15.优选地,所述步骤s1中为所述大规模图中所有的顶点维护一个临时最短路径,具体为:
16.令源点的临时最短路径为0,其余顶点的初始临时最短路径设置为无穷大。
17.优选地,所述步骤s1中的集合s,具体为:
18.所述集合s在初始阶段只包含所述大规模图中的源点。
19.优选地,所述步骤s2中将所述大规模图中所有的顶点划分为若干部分分别分配给不同的子进程,具体为:
20.设置子进程的数量k,根据所述大规模图中的顶点数量和所述设置的子进程数量k,将所述大规模图中的所有顶点平均划分为k个部分,分别分配给不同的子进程。
21.优选地,所述步骤s3中根据各顶点的临时最短路径、集合s和radius函数计算临时最短路径上界,具体计算公式为:
[0022][0023]
式中,v表示顶点,δ(v)表示顶点v的临时最短路径,r(v)表示顶点v为输入的radii函数,di表示临时最短路径上界,i表示迭代轮数。
[0024]
优选地,所述步骤s3中筛选需要进行处理的顶点,若顶点的临时最短路劲小于所述临时最短路径上界,则该点筛选为需要进行处理的顶点。
[0025]
优选地,所述步骤s6中更新集合s,具体为:
[0026]
集合s更新为临时最短路径小于所述最短路径上界的顶点v的集合。
[0027]
优选地,所述步骤s6中判断是否继续循环,具体为:
[0028]
判断所述大规模图中的所有顶点是否都在集合s中,如果是,判断为不继续循环,如果不是,判断为继续循环。
[0029]
一种用于计算大规模图上单源最短路径的并行radius-stepping系统,包括:
[0030]
维护模块,对于待计算的大规模图,所述维护模块为所述大规模图中所有的顶点维护一个临时最短路径和一个集合s,集合s为所述大规模图中的点的子集合;
[0031]
划分分配模块,所述划分分配模块将所述大规模图中所有的顶点划分为若干部分分别分配给不同的子进程;
[0032]
上界计算模块,所述上界计算模块根据各顶点的临时最短路径、集合s和radius函数计算一个上界,根据所述上界,筛选需要进行处理的顶点;
[0033]
子进程处理模块,所述子进程处理模块利用各个子进程分别处理对应的顶点,得到更新后的临时最短路径;
[0034]
汇总模块,所述汇总模块由根进程汇总所有子进程处理后得到的更新后的临时最短路径,再传递给所有的子进程;
[0035]
判断循环模块,所述判断循环模块根据上界计算模块计算得到的上界,更新集合s,判断是否继续循环,若继续,由上界计算模块重新计算上界;若不继续,输出所述大规模图中所有顶点的最短路径。
[0036]
优选地,所述维护模块中为所述大规模图中所有的顶点维护一个临时最短路径,具体为:
[0037]
令源点的临时最短路径为0,其余顶点的初始临时最短路径设置为无穷大。
[0038]
与现有技术相比,本发明技术方案的有益效果是:
[0039]
本发明利用多个进程并行处理对临时最短路径的更新,相较于串行的radius-stepping算法,计算速度更快,进而提高在实际应用中的效率,提高了radius-stepping算法在图数据规模过大的情况下的运行速度。
附图说明
[0040]
图1为本发明的方法流程示意图。
[0041]
图2为实施例提供的ba无标度网络示意图。
[0042]
图3为实施例提供的er随机网络示意图。
[0043]
图4为实施例提供的规则网络示意图。
[0044]
图5为实施例提供的ws小世界网络示意图。
[0045]
图6为本发明的系统模块示意图。
具体实施方式
[0046]
附图仅用于示例性说明,不能理解为对本专利的限制;
[0047]
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
[0048]
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
[0049]
下面结合附图和实施例对本发明的技术方案做进一步的说明。
[0050]
实施例1
[0051]
本实施例提供一种用于计算大规模图上单源最短路径的并行radius-stepping方法,如图1所示,包括以下步骤:
[0052]
s1:对于待计算的大规模图,为所述大规模图中所有的顶点维护一个临时最短路径和一个集合s,集合s为所述大规模图中的点的子集合;
[0053]
s2:将所述大规模图中所有的顶点划分为若干部分分别分配给不同的子进程;
[0054]
s3:根据各顶点的临时最短路径、集合s和radius函数计算一个上界,根据所述上界,筛选需要进行处理的顶点;
[0055]
s4:由各个子进程分别处理对应的顶点,得到更新后的临时最短路径;
[0056]
s5:由根进程汇总所有子进程处理后得到的更新后的临时最短路径,再传递给所有的子进程;
[0057]
s6:根据步骤s3计算得到的上界,更新集合s,判断是否继续循环,若继续,返回步骤s3;若不继续,输出所述大规模图中所有顶点的最短路径。
[0058]
所述步骤s1中为所述大规模图中所有的顶点维护一个临时最短路径,具体为:
[0059]
令源点的临时最短路径为0,其余顶点的初始临时最短路径设置为无穷大。
[0060]
所述步骤s1中的集合s,具体为:
[0061]
所述集合s在初始阶段只包含所述大规模图中的源点。
[0062]
所述步骤s2中将所述大规模图中所有的顶点划分为若干部分分别分配给不同的子进程,具体为:
[0063]
设置子进程的数量k,根据所述大规模图中的顶点数量和所述设置的子进程数量k,将所述大规模图中的所有顶点平均划分为k个部分,分别分配给不同的子进程。
[0064]
所述步骤s3中根据各顶点的临时最短路径、集合s和radius函数计算临时最短路径上界,具体计算公式为:
[0065][0066]
式中,v表示顶点,δ(v)表示顶点v的临时最短路径,r(v)表示顶点v为输入的radii函数,di表示临时最短路径上界,i表示迭代轮数。
[0067]
所述步骤s3中筛选需要进行处理的顶点,若顶点的临时最短路劲小于所述临时最短路径上界,则该点筛选为需要进行处理的顶点。
[0068]
所述步骤s6中更新集合s,具体为:
[0069]
集合s更新为临时最短路径小于所述最短路径上界的顶点v的集合。
[0070]
所述步骤s6中判断是否继续循环,具体为:
[0071]
判断所述大规模图中的所有顶点是否都在集合s中,如果是,判断为不继续循环,如果不是,判断为继续循环。
[0072]
实施例2
[0073]
本实施例在实施例1的基础上,公开具体的实施内容:
[0074]
实施例使用的平台为amd r5-3500u cpu(8gb)计算机,使用的操作系统为windows10中的linux子系统,cpu的数量为4。实现算法的编程语言为python,版本为3.6.9实现并行算法使用的是构建在mpi之上的python库mpi4py。
[0075]
本实施例的算法的伪代码如表1所示:
[0076]
图2、3、4、5为4种常见的网络图:ba无标度网络,er随机网络,规则网络和ws小世界网络,根据顶点数量和边的数量一共生成了6种规格的图,图的边上的权值的取值范围为1到100的整数,根据顶点数量和边的数量的比值可以把这6种规格的图分为稀疏图和稠密图。这6种规格的图每种都包含了前面提到的4种常见的网络图,也就是说本实施例用到了24种图数据。考虑到规则网络图的特性,其中3000个顶点的稠密规则网络图的边数要比其他3种要小。这24种图数据的参数如表2所示。
[0077]
表1
[0078][0079]
依次输入这24个图数据,首先为所有的顶点维护一个临时最短路径,源点的临时最短路径为0,其余顶点的初始临时最短路径设置为无穷大;同时维护一个集合s,在算法的开始阶段集合s只包含源点s。再根据图数据中顶点的数量和预先确定好的进程数量k将所有的顶点平均划分成k个部分。然后根据临时最短路径、集合s、radius函数计算出一个上界,根据此上界筛选出需要进行处理的顶点。再由各个进程分别处理上一个步骤所筛选出的顶点中相应的顶点。然后由根进程汇总经过所有进程更新处理过的临时最短路径,并将汇总后的信息再传递给各个进程。根据上面所确定的上界来对集合s进行更新,判断图数据的所有顶点是否都在s中,如果是则结束算法,否则再次根据临时最短路径、集合s、radius函数计算出一个上界,重复后续步骤。
[0080]
实施例的结果如表3和表4所示,可以看到在图数据极其稠密情况下(顶点数量为3000,边的数量超过400万),使用3个进程时,运行速度最快,此时本实施例中的并行radius-stepping算法在效率上相比原始算法得到了一定提升。
[0081]
表2
[0082][0083]
表3
[0084][0085]
表4
[0086][0087]
实施例3
[0088]
本实施例在实施例1的基础上,提供一种用于计算大规模图上单源最短路径的并行radius-stepping系统,如图6所示,包括:
[0089]
维护模块,对于待计算的大规模图,所述维护模块为所述大规模图中所有的顶点维护一个临时最短路径和一个集合s,集合s为所述大规模图中的点的子集合;
[0090]
划分分配模块,所述划分分配模块将所述大规模图中所有的顶点划分为若干部分分别分配给不同的子进程;
[0091]
上界计算模块,所述上界计算模块根据各顶点的临时最短路径、集合s和radius函数计算一个上界,根据所述上界,筛选需要进行处理的顶点;
[0092]
子进程处理模块,所述子进程处理模块利用各个子进程分别处理对应的顶点,得到更新后的临时最短路径;
[0093]
汇总模块,所述汇总模块由根进程汇总所有子进程处理后得到的更新后的临时最短路径,再传递给所有的子进程;
[0094]
判断循环模块,所述判断循环模块根据上界计算模块计算得到的上界,更新集合s,判断是否继续循环,若继续,由上界计算模块重新计算上界;若不继续,输出所述大规模图中所有顶点的最短路径。
[0095]
所述维护模块中为所述大规模图中所有的顶点维护一个临时最短路径,具体为:
[0096]
令源点的临时最短路径为0,其余顶点的初始临时最短路径设置为无穷大。
[0097]
相同或相似的标号对应相同或相似的部件;
[0098]
附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;
[0099]
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可
以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献