一种求解大规模多段图最短路径的分布式方法与流程

文档序号:21888466发布日期:2020-08-18 17:35阅读:401来源:国知局
一种求解大规模多段图最短路径的分布式方法与流程

本发明属于计算机技术领域,具体涉及一种求解大规模多段图最短路径的分布式方法。



背景技术:

最短路径问题是图论中的一个经典问题,旨在寻找图中一对顶点之间的最短路径。多段图是一类特殊的加权有向图,图中的顶点分为至少两个不相交的集合(称为阶段),其中第一个和最后一个阶段有且仅有1个顶点,分别称为源点和汇点,图中边只能从前一阶段的顶点指向后一阶段的顶点。很多工程应用中的实际问题都可以建模为多段图,所以其应用十分广泛。

随着多段图规模的不断增大,单机算法既无法存储所有的多段图数据,也无法实现最短路径的求解。此时,分布式算法成为必选。

分布式算法是将图数据尽量均衡地分配到计算机集群的计算节点上,然后各个计算节点并行计算本机上结果,再汇总各个部分结果得到最终结果。目前,已经提出了并行dijkstra算法、并行floyd算法、基于ballstring模型的并行算法、δ-stepping并行算法等,这些方法虽然也适用于于多段图,但是没有充分利用多段图的特点,通信量过大,计算效率低。



技术实现要素:

针对现有技术中存在的上述技术问题,本发明提出了一种求解大规模多段图最短路径的分布式方法,设计合理,克服了现有技术的不足,具有良好的效果。

为了实现上述目的,本发明采用如下技术方案:

一种求解大规模多段图最短路径的分布式方法,用|a|表示集合a中元素的个数;用表示不大于a的最大整数,多段图是一个加权有向图g=(v,e,w),其中:

(1)是顶点集合,满足其中vi是第i个阶段的顶点集合,m为阶段个数;

(2)vi={vi,j|j=1,2,…,ni},其中ni=|vi|表示第i个阶段的顶点个数;

(3)e={〈vi,j,vi+1,k>|i=1,2,…,m-1;j=1,2,…,ni;k=1,2,…,ni+1}是边集合;

(4)w={wi,j,i+1,k|i=1,2,…,m-1;j=1,2,…,ni;k=1,2,…,ni+1}是权重集合,wi,j,i+1,k是〈vi,j,vi+1,k〉的权重;

(5)v1={v1,1},vm={vm,1},v1,1和vm,1分别称为源点和汇点;

表示每个计算节点能够存储的边的最大数量;

具体步骤如下:

步骤1:执行如下步骤,对多段图进行划分:

步骤1.1:取当前计算节点编号p=1,当前边的总数量sum=0,循环变量i=1,第p个计算节点cnp存储的第一个阶段编号sp=i;

步骤1.2:取阶段i至阶段(i+1)的边集合ei={<vi,j,vi+1,k>|j=1,2,…,ni;k=1,2,…,ni+1};

步骤1.3:取sum=sum+|ei|,若则将ei中所有边分配到计算节点cnp中,取cnp存储的最后一个阶段ep=i+1,并继续下一步,否则转步骤1.5;

步骤1.4:取i=i+1;若i≤m-1,转步骤1.2,否则转步骤2;

步骤1.5:取sum=0,p=p+1,sp=i,转步骤1.3;

步骤2:第l个计算节点cnl(l=1,2,…,p)执行如下步骤求各部分子图的部分最短路径,即所有计算节点并行执行如下步骤:

步骤2.1:对cnl中存储的每个顶点vi,j(i=sl,sl+1,…,el,j=1,2,…,ni),用表示顶点到顶点vi,j的最短路径距离,用表示顶点到顶点vi,j的最短路径上,vi,j的前驱顶点在第(i-1)个阶段的序号;

步骤2.2:对cnl中存储的第一个阶段的每个顶点

步骤2.3:取循环变量i=sl;

步骤2.4:置i=i+1,若i≤el,即cnl中存储的最后一个阶段的编号,转下一步,否则转步骤2.11;

步骤2.5:取循环变量j=0;

步骤2.6:置j=j+1,若j≤ni,即不大于vi中最后一个顶点的编号,转下一步,否则转步骤2.4;

步骤2.7:取循环变量k=0;

步骤2.8:置k=k+1,若即不大于中最后一个顶点的编号,转下一步,否则转步骤2.6;

步骤2.9:取

步骤2.10:取其中vi-1,q是所对应的顶点,转步骤2.8;

步骤2.11:用表示顶点到顶点的最短路径。取循环变量i=0;

步骤2.12:置i=i+1,若即不大于中最后一个顶点的编号,转下一步,否则转步骤2.18;

步骤2.13:取循环变量j=0;

步骤2.14:置j=j+1,若即不大于中最后一个顶点的编号,转下一步,否则转步骤2.12;

步骤2.15:取循环变量k=i,循环变量h=el,

步骤2.16:若h≠sl,转下一步,否则转步骤2.14;

步骤2.17:取h=h-1,转步骤2.16;

步骤2.18:cnl中存储的第el阶段的每个顶点产生一个最短路径信息列表其中lenj和pathj分别表示的最短路径的长度和路径;

步骤3:执行如下步骤,通过各计算节点通信来求多段图最短路径:

步骤3.1:参与通信的计算节点编号集合r={1,2,…,p};

步骤3.2:若|r|>1,转下一步,否则转步骤3.6;

步骤3.3:每个计算节点发送给计算节点

步骤3.4:每个计算节点执行如下步骤:

步骤3.4.1:取循环变量k=0;

步骤3.4.2:置k=k+1,若即不大于中最后一个顶点的编号;置临时变量即空集,转下一步,否则转步骤3.5;

步骤3.4.3:取循环变量j=0;

步骤3.4.4:置j=j+1,若即不大于中最后一个顶点的编号,转下一步,否则转步骤3.4.10;

步骤3.4.5:取循环变量g=0;

步骤3.4.6:置g=g+1,若转下一步,否则转步骤3.4.4;

步骤3.4.7:取循环变量h=0;

步骤3.4.8:置h=h+1,若转下一步,否则转步骤3.4.6;

步骤3.4.9:若的最后一个顶点与的第一个顶点相同,置转步骤3.4.8;

步骤3.4.10:置取循环变量g=0;

步骤3.4.11:置g=g+1,若即不大于中最后一个顶点的编号,转下一步,否则转步骤3.4.2;

步骤3.4.12:其中且为以为起点、以为终点的所有路径的最短路径,转步骤3.4.11;

步骤3.5:所有计算节点完成步骤3.4后,置转步骤3.2;

步骤3.6:计算节点cnp的顶点vm,1中所存储的splm,1即为结果,其中splm,1.len是最短路径长度,splm,1.path是最短路径。

本发明所带来的有益技术效果:

(1)相较于单机求解算法,此算法能够使用分布式系统处理更大规模的多段图数据。

(2)相较于已有的分布式求解算法,满足负载均衡的要求并最小化通信开销。

附图说明

图1为本发明方法的流程图。

图2为多段图划分阶段子流程图。

图3为求多段图部分最短路子流程图。

图4为各计算节点通信子流程图。

图5为多段图实例图。

图6为多段图划分结果示意图。

具体实施方式

下面结合附图以及具体实施方式对本发明作进一步详细说明:

本方法涉及到多个符号表示,我们按出现顺序概述了符号所代表的含义,如表1所示:

表1

具体实施步骤将结合图5给出的多段图实例进行详细展开。

首先,根据步骤1对多段图进行划分。根据步骤1.1和1.2,初始化p=1,sum=0,i=1,s1=1,取多段图第1阶段所有边。

根据步骤1.3,第1阶段所有边数量之和|e1|=3,则sum=3。设每个计算节点的最大负载为15条边,则sum≤c,将第1阶段的边全部分配到计算节点cn1上,取e1=2。

根据步骤1.4,多段图共9个阶段,则m=9,取i=2,因i≤8,则取第2阶段所有边,即|e2|=7,sum值更新为10,即第1阶段3条边加第二阶段7条边,因10<15,将第2阶段的出边全部分配到计算节点cn1上,更新e1=3。再取i=3,满足i≤8,取第3阶段所有边,即|e3|=7,sum=17,因17>15,则转步骤1.5。

根据步骤1.5,重置sum=0,取p=2,s2=3,转步骤1.3更新sum值为7,因7<15,将第3阶段的所有边分配到计算节点cn2上,取e2=4。转步骤1.4取i=4,满足i≤8,取第4阶段所有边,即|e4|=5,更新sum值为12,因12<15,将第4阶段的所有边分配到计算节点cn2上,更新e2=5。按此一直循环得到第5阶段和第6阶段的12条边全部分配到计算节点cn3上,s3=5,e3=7;第7阶段和第8阶段的8条边全部分配到计算节点cn4上,s4=7,e3=9。最后分配结果如图6所示。

然后,根据步骤2,每个计算节点计算各个子图的部分最短路径。根据步骤2.1到2.8,4个计算节点并行执行,计算节点cn1上置i=2,j=1,k=1,计算节点cn2上置i=4,j=1,k=1,计算节点cn3上置i=6,j=1,k=1,计算节点cn4上置i=8,j=1,k=1。

根据步骤2.9和2.10,各个计算节点上取即计算节点cn1上转步骤2.8后计算节点cn1上取k=2,因n1=1,不满足k≤n1,转步骤2.6循环两次,得到因j=4,n2=3,不满足j≤n2,转步骤2.4循环四次,得到其他三个计算节点与计算节点cn1同理得到四个计算节点结果如下:

cn1计算结果

cn2计算结果

cn3计算结果

cn4计算结果

根据步骤2.11到2.15,4个计算节点并行执行,计算节点cn1上取k=1,h=3,计算节点cn2上取k=1,h=5,计算节点cn3上取k=1,h=7,计算节点cn4上取k=1,h=9,

根据步骤2.16到2.17,因计算节点cn1满足h≠s1,则取h=2,转步骤2.16后仍满足h≠s1,取h=1,再转步骤2.16后不满足h≠s1,则转步骤2.14取j=2,不满足则转步骤2.12后再同上循环3次,得到同理求得其他3个计算节点上各自sp。

根据步骤2.18求得4个计算节点上最大阶段各个点最短路径信息列表,计算节点cn1上得到:

spl3,1={(8,{v1,1,v2,2,v3,1})}

spl3,2={(9,{v1,1,v2,2,v3,2})}

spl3,3={(7,{v1,1,v2,3,v3,3})}

spl3,4={(7,{v1,1,v2,2,v3,4})}

计算节点cn2上得到:

spl5,1={(9,{v3,1,v4,2,v5,1}),(8,{v3,2,v4,2,v5,1}),(8,{v3,3,v4,2,v5,1})}

spl5,2={(8,{v3,1,v4,1,v5,2}),(5,{v3,2,v4,1,v5,2}),(11,{v3,4,v4,3,v5,2})}

spl5,3={(15,{v3,1,v4,2,v5,3}),(11,{v3,2,v4,3,v5,3}),(14,{v3,3,v4,2,v5,3}),(12,{v3,4,v4,3,v5,3})}

计算节点cn3上得到:

spl7,1={(10,{v5,1,v6,1,v7,1}),(11,{v5,2,v6,1,v7,1}),(6,{v5,3,v6,1,v7,1})}

spl7,2={(9,{v5,1,v6,2,v7,2}),(11,{v5,2,v6,2,v7,2}),(9,{v5,3,v6,1,v7,2})}

spl7,3={(8,{v5,1,v6,2,v7,3}),(10,{v5,2,v6,1,v7,3}),(5,{v5,3,v6,2,v7,3})}

spl7,4={(5,{v5,1,v6,2,v7,4}),(8,{v5,2,v6,2,v7,4}),(10,{v5,3,v6,2,v7,4})}

计算节点cn4上得到:

spl9,1={(12,{v7,1,v8,1,v9,1}),(11,{v7,2,v8,2,v9,1}),(12,{v7,3,v8,1,v9,1}),(12,{v7,4,v8,1,v9,1})}

最后,根据步骤3计算最终结果。根据步骤3.1和3.2,置r={1,2,3,4},因|r|=4,满足|r|>1,则转步骤3.3,计算节点cn1将spl3,1,spl3,2,spl3,3,spl3,4发送给计算节点cn2,同时计算节点cn3将spl7,1,spl7,2,spl7,3,spl7,4发送给计算节点cn4。

根据步骤3.4.1至3.4.8,计算节点cn2和cn4分别置取k=j=g=h=1。

根据步骤3.4.9到3.4.12,spl3,1.path1的终点v3,1与spl5,1.path1的起点v3,1相同,所以置spl′5,1={(17,{v1,1,v2,2,v3,1,v4,2,v5,1})},步骤3.4.9再循环3次无匹配,转步骤3.4.6后取g=2,因|spl3,1|=1,不满足g≤|spl3,1|,则转步骤3.4.4取j=2,当循环到h=2时,spl3,2.path1的终点v3,2与spl5,1.path2的起点v3,2相同,所以置spl′5,1={{(17,{v1,1,v2,2,v3,1,v4,2,v5,1}),(17,{v1,1,v2,2,v3,2,v4,2,v5,1})};

步骤3.4.4同理再循环2次得到spl′5,1=

{(17,{v1,1,v2,2,v3,1,v4,2,v5,1}),(17,{v1,1,v2,2,v3,2,v4,2,v5,1}),(15,{v1,1,v2,3,v3,3,v4,2,v5,1})},当j=5,n3=4,不满足j≤n4,则转步骤3.4.10至3.4.12,置g=1,在spl′5,1中选取以v1,1为起点、以v5,1为终点的所有路径的最短路径,更新spl5,1={(15,{v1,1,v2,3,v3,3,v4,2,v5,1})},转步骤3.4.11后不满足g≤n1,则转步骤3.4.2后再按上述步骤原理循环2次,得到spl5,2={(14,{v1,1,v2,2,v3,2,v4,1,v5,2})},spl5,3={(19,{v1,1,v2,2,v3,4,v4,3,v5,3})}。

同理计算节点cn3与cn4进行通信后得spl9,1=

{(17,{v5,1,v6,2,v7,4,v8,1,v9,1}),(20,{v5,2,v6,2,v7,4,v8,1,v9,1}),(17,{v5,3,v6,2,v7,3,v8,1,v9,1})}。

根据步骤3.5,置r={2,4},转步骤3.2后与第一次通信同理。最后根据步骤3.6得到spl9,1={(32,{v1,1,v2,3,v3,3,v4,2,v5,1,v6,2,v7,4,v8,1,v9,1})},表示最短路径长度为32,最短路径为{v1,1,v2,3,v3,3,v4,2,v5,1,v6,2,v7,4,v8,1,v9,1}。

当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。

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