一种考虑多类型约束的k最短路径求解方法与流程

文档序号:11292098阅读:430来源:国知局
一种考虑多类型约束的k最短路径求解方法与流程

本发明属于交通工程技术领域,具体涉及一种考虑多类型约束的k最短路径求解方法。



背景技术:

最短路径问题(shortestpathproblem)是一类受到普遍重视和研究的网络优化问题,广泛应用于计算机科学、交通工程、通信工程、系统工程、运筹学、信息论、控制理论等众多领域。它为研究更复杂的网络流问题提供了基础,是解决其它许多复杂网络优化问题的子问题之一。现实生活很多问题都可以通过抽象转换为最短路径问题,例如交通网络中的出行路线选取问题、旅行商旅行路线选取问题、计算机之间的网络路由问题等,因此有效计算最短路径的研究具有重要的理论和现实意义。如何在满足目标要求的情况下,通过设计合理可行的线路节省资源、降低成本成为备受关注的热点和难点问题。

目前最短路径规划算法有dijkstra算法、floyd算法、a*算法、bellman-ford算法、深度优先搜索、广度优先搜索、模拟退火算法、蚁群算法和遗传算法等,其共同缺点是没有考虑带有必经节点、禁止节点、必经路径和禁止路径约束条件的路径寻优,在使用上有一定的局限性。

本方法基于网络拓扑图的结构考虑,借鉴现有最短路径算法的成果,以网络拓扑结构特点和最短路径限制条件抽象出数学模型,将禁止路径和必经路径分别转换为禁止节点和必经节点,通过结合dijkstra算法、floyd算法、bellman-ford算法、bfs算法和k-dijkstra算法等算法,可以较好的解决必经节点、禁止节点、必经路径、禁止路径、限制节点数目及任意组合所形成的约束条件下的最短路径规划问题。



技术实现要素:

本发明的目的是提供一种考虑多类型约束的k最短路径求解方法,解决了现有技术中存在的未考虑必经节点、必经路径、禁止经过节点、禁止经过线段、节点数目限制等约束条件,导致最短路径规划存在应用局限性的问题。

本发明所采用的技术方案是:一种考虑多类型约束的k最短路径求解方法,包括以下步骤:

步骤1、根据节点拓扑图构建邻接矩阵;

步骤2、由必经节点、必经路径、禁止节点、禁止路径修改邻接矩阵数据得到修改邻接矩阵;

步骤3、简化必经路径为虚拟节点,综合考虑必经节点,构造问题可行解集合;

步骤4、筛选符合节点数目要求的最短路径。

所述步骤1具体包括以下步骤:

步骤(1.1)、根据给定的节点数目n,设置大小为n×n全0矩阵am;

步骤(1.2)、修改步骤(1.1)中am(i,j)=wij,式中wij为节点拓扑图中的第i个节点至第j个节点的连接权值,1≤i≤n,1≤j≤n,假如第i个节点至第j个节点没有直接相连的路径,则设置am(i,j)=∞,其中∞表示无穷大,对角线元素am(i,i)=0,1≤i≤n,1≤j≤n;

对所有的节点进行上述操作,得到邻接矩阵am。

所述步骤2具体包括以下步骤:

步骤(2.1)、考虑在禁止节点约束下,最短路径起点与终点之间的中间节点选择过程中不能选取任何禁止的节点,因此设置与禁止节点i相连接的所有权值为无穷大,即am(i,:)=∞,am(:,i)=∞,am表示邻接矩阵,对所有禁止节点执行此操作;

步骤(2.2)、在禁止路径约束下,禁止路径不能作为最短路径中间路径出现,因此设置禁止路径(i,j)的连接权值为无穷大,即am(i,j)=∞,(i,j)表示由节点i与节点j之间的有向边,如果网络拓扑图是无向图,则设置禁止线路(i,j)与(j,i)均为无穷大,即am(i,j)=∞,am(j,i)=∞,其中(i,j)和(j,i)分别表示无向图中节点i与节点j之间的两条无向边,am表示邻接矩阵,对所有禁止路径进行此操作。

所述步骤3具体包括以下步骤:

步骤(3.1)、首先针对必经路径,将其两端点退化为一个虚拟节点,并存储于虚拟节点集合slv中,对所有的必经路径进行此操作;

步骤(3.2)、将所有必经节点集合sn中的元素与虚拟节点集合slv中的元素合并成一个新的集合snlv,并对该集合中的所有元素进行全排列,得到所有可行解的集合ssv;

根据必经节点与必经路径的要求,每条满足约束条件的可行解路径,必须按照某种顺序依次通过所有必经节点与虚拟节点,根据组合数学的排列组合理论可知,对必经节点与虚拟节点进行全排列,可得到指定起点与中点之间的所有满足约束条件的可行解,因此,将必经节点集合sn与虚拟节点集合slv合并为新的集合snlv,进而对集合snlv中的元素进行全排列,得到多约束类型条件下的最短路径问题可行解数目为并把每种可行解记录于集合ssv中,其中nl表示必经路径集合sl中的元素的数目,nc表示必经节点集合sn中元素的数目;

步骤(3.3)、根据节点拓扑图是否有向,对可行解集ssv进行修正;

在无向图中,两个端点均可作为必经路径的入口,假设必经路径为节点l与节点m之间的无向边,即必须通过无向边(l,m)或无向边(m,l)其中之一;将步骤(3.2)得到的可行解集合ssv中所有的虚拟节点替换为相对应的两个无向边,并在每个可行解的首节点之前插入最短路径起始节点,尾节点之后插入最短路径终止节点;所以修正后的集合ssv中的可行解数目变为其中nl表示必经路径集合sl中的元素的数目,nc表示必经节点集合sn中元素的数目;

在有向图中,假设必经路径为由节点l至节点m之间的有向边,必须要经过l,m这两个点,仅有一种路径,即必须通过有向边(l,m);将步骤(3.2)得到的可行解集合ssv中所有虚拟节点替换为相对应的有向边,并在每个可行解的首节点之前插入最短路径起始节点,尾节点之后插入最短路径终止节点;修正后的集合ssv中的可行解数目变为其中nl表示必经路径集合sl中的元素的数目,nc表示必经节点集合sn中元素的数目;

步骤(3.4)、计算修正后的可行解集ssv中每个可行解相邻节点之间的最短路径,形成中间子路径,使用现有的最短路径算法,搜索得到相邻节点间的最短路径;对于必经路径的两个节点,直接使用该路径替代两点间的最短路径,生成中间子路径最后按照每个可行解中节点的排列顺序,将上述中间子路径组成问题的可行解,并添加至集合sp。

所述步骤4具体包括以下步骤:

对步骤(3.4)得到集合sp中的可行解路径进行筛选,舍弃节点数目超过约束条件的路径,并对剩余的可行解按照路径消耗大小进行升序排列,筛选出消耗最少的前k个路径,将符合要求的最短路径存储到集合path中;

若要求最短路无环,则删除集合path中形成环的路径。

本发明的有益效果是,一种考虑多类型约束的k最短路径求解方法,考虑了必经节点、必经路径、禁止经过节点、禁止经过线段、节点数目限制等约束条件,通过分析最短路径的特点,对必经节点和必经路径进行合理的排列组合,使用现有的最短路径算法搜索得到每种排列中相邻节点的最短路径,形成中间子路径,进而组合成符合要求最短路径可行解。最后通过筛选符合节点数目要求的路径,从而获得在多类型约束条件下的k最短路径。本发明解决了现有技术中存在的仅考虑节点限制或资源消耗的最短路径不能较好满足工程需求的矛盾,在一定程度上提高了最短路径模型的鲁棒性,为工程上提供了一种适用范围更广、自适应能力更强的新型k最短路径方法。

附图说明

图1是本发明的流程图;

图2是本发明方法中的测试用例图(原始节点拓扑图);

图3是本发明方法中的测试效果图(考虑多类型约束的k最短路径求解效果图,其中a为路径1,b为路径2)。

具体实施方式

下面结合附图和具体实施方式对本发明进行详细说明。

本发明一种考虑多类型约束的k最短路径求解方法,包括以下步骤:

步骤1、根据节点拓扑图构建邻接矩阵,如图1所示,具体按照以下步骤实施:

步骤(1.1)、根据给定的节点数目n,设置大小为n×n全0矩阵am。

步骤(1.2)、修改步骤(1.1)中am(i,j)=wij,式中wij为节点拓扑图中的第i个节点至第j个节点的连接权值,1≤i≤n,1≤j≤n。假如第i个节点至第j个节点没有直接相连的路径,则设置am(i,j)=∞,其中∞表示无穷大,对角线元素am(i,i)=0,1≤i≤n,1≤j≤n。

对所有的节点进行上述操作,得到邻接矩阵am。

步骤2、由必经节点、必经路径、禁止节点、禁止路径修改邻接矩阵数据得到修改邻接矩阵,具体按照以下步骤实施:

步骤(2.1)、考虑在禁止节点约束下,最短路径起点与终点之间的中间节点选择过程中不能选取任何禁止的节点,因此设置与禁止节点i相连接的所有权值为无穷大,即令am(i,:)=∞,am(:,i)=∞,am表示邻接矩阵。对所有禁止节点执行此操作。

步骤(2.2)、在禁止路径约束下,禁止路径不能作为最短路径中间路径出现,因此设置禁止路径(i,j)的连接权值为无穷大,即am(i,j)=∞,(i,j)表示由节点i与节点j之间的有向边。如果网络拓扑图是无向图,则设置禁止线路(i,j)与(j,i)均为无穷大,即am(i,j)=∞,am(j,i)=∞,其中(i,j)和(j,i)分别表示无向图中节点i与节点j之间的两条无向边,am表示邻接矩阵。对所有禁止路径进行此操作。

步骤3、简化必经路径为虚拟节点,综合考虑必经节点,构造问题可行解集合,具体按照以下步骤实施:

步骤(3.1)、首先,针对必经路径,将其两端点退化为一个虚拟节点,并存储于虚拟节点集合slv中,对所有的必经路径进行此操作。

步骤(3.2)、将所有必经节点集合sn中的元素与虚拟节点集合slv中的元素合并成一个新的集合snlv,并对该集合中的所有元素进行全排列,得到所有可行解的集合ssv。

根据必经节点与必经路径的要求,每条满足约束条件的可行解路径,必须按照某种顺序依次通过所有必经节点与虚拟节点。根据组合数学的排列组合理论可知,对必经节点与虚拟节点进行全排列,可得到指定起点与中点之间的所有满足约束条件的可行解。因此,将必经节点集合sn与虚拟节点集合slv合并为新的集合snlv,进而对集合snlv中的元素进行全排列,得到多约束类型条件下的最短路径问题可行解数目为并把每种可行解记录于集合ssv中,其中nl表示必经路径集合si中的元素的数目,nc表示必经节点集合sn中元素的数目。

步骤(3.3)、根据节点拓扑图是否有向,对可行解集ssv进行修正。

在无向图中,两个端点均可作为必经路径的入口。假设必经路径为节点l与节点m之间的无向边,即必须通过无向边(l:m)或无向边(m:l)其中之一。因而,将步骤(3.2)得到的可行解集合ssv中所有的虚拟节点替换为相对应的两个无向边,并在每个可行解的首节点之前插入最短路径起始节点,尾节点之后插入最短路径终止节点。所以修正后的集合ssv中的可行解数目变为其中nl表示必经路径集合sl中的元素的数目,nc表示必经节点集合sn中元素的数目。

在有向图中,假设必经路径为由节点l至节点m之间的有向边,必须要经过l,m这两个点,仅有一种路径,即必须通过有向边(l,m)。将步骤(3.2)得到的可行解集合ssv中所有虚拟节点替换为相对应的有向边,并在每个可行解的首节点之前插入最短路径起始节点,尾节点之后插入最短路径终止节点。修正后的集合ssv中的可行解数目变为其中nl表示必经路径集合sl中的元素的数目,nc表示必经节点集合sn中元素的数目。

步骤(3.4)、计算修正后的可行解集ssv中每个可行解相邻节点之间的最短路径,形成中间子路径。使用现有的最短路径算法,搜索得到相邻节点间的最短路径。对于必经路径的两个节点,直接使用该路径替代两点间的最短路径,生成中间子路径。最后按照每个可行解中节点的排列顺序,将上述中间子路径组成问题的可行解,并添加至集合sp。

步骤4、具体按照以下步骤实施:

对步骤(3.4)得到集合sp中的可行解路径进行筛选,舍弃节点数目超过约束条件的路径,并对剩余的可行解按照路径消耗大小进行升序排列,筛选出消耗最少的前k个路径,将符合要求的最短路径存储到集合path中。

若要求最短路无环,则删除集合path中形成环的路径。

本发明一种考虑多类型约束的k最短路径求解方法,针对现有最短路径算法中对必须经过的节点、必须经过的路径、禁止经过的节点、禁止经过的路径以及节点限制等约束条件考虑不足的缺陷,根据节点拓扑图和邻接矩阵进行综合分析,通过修改邻接矩阵中禁止经过的节点和禁止经过的路径有关的系数,实现了禁止点与禁止路径的约束下的最短路问题,对满足必经节点与必经路径使用排列组合的思想构造出问题的初步可行解的可能组合,使用现有的最短路径算法搜索得到中间子最短路径,构成可行解集合,最后筛选出符合节点数目约束的路径作为问题的最短路径。本发明考虑了多种类型的约束条件,克服了仅考虑节点限制或资源消耗的最短路径不能较好满足工程需求的矛盾,在一定程度上提高了最短路径模型的鲁棒性,为工程上提供了一种适用范围更广、自适应能力更强的新型k最短路径方法。

实施例:

实施例中拓扑图大小为18个节点的无向图,如图2所示。必经节点为n8、n13,必经路径为(n14,n13)、(n2,n4),禁止通过的节点为n6,禁止经过的路径为(n11,n12),节点数目限制为13个。由此可得必经节点数目nc=2,必经路径数目nl=2,所以可行解个数种路径。使用采用floyd算法求得中间子路径,并将其按照96种排列方式,组合成96种可行解路径。最后舍弃节点数目超过13的可行解,并对剩余的可行解按照路径消耗大小进行升序排列,筛选出消耗最少的前2个路径,如图3所示。结果:路径1为消耗140,路径1依次经过无向边(s,n2),(n2,n4),(n4,n2),(n2,n3),(n3,n7),(n7,n8),(n8,n14),(n14,n13),(n13,n12),(n12,n16),(n16,e)。路径2消耗为140,路径2依次经过无向边(s,n2),(n2,n4),(n4,n5),(n5,n3),(n3,n7),(n7,n8),(n8,n14),(n14,n13),(n13,n12),(n12,n16),(n16,e)。

本发明解决了现有技术中存在的仅考虑节点限制或资源消耗的最短路径不能较好满足工程需求的矛盾,在一定程度上提高了最短路径模型的鲁棒性,为工程上提供了一种适用范围更广、自适应能力更强的新型k最短路径方法。

以上所述为本发明较佳实施例,对于本领域的普通技术人员而言,根据本发明的教导,在不脱离本发明的原理与精神的情况下,对实施方式所进行的改变、修改、替换和变型仍落入本发明的保护范围之内。

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