经过必经顶点的最短路径搜索方法与流程

文档序号:13147130阅读:983来源:国知局
技术领域本发明属于物理技术领域,更进一步涉及路径搜索技术领域中的一种经过必经顶点的最短路径搜索方法。本发明可以解决“旅行家问题”、“公交路线设计问题”和“军事物质运输问题”等一系列类似问题。

背景技术:
经过必经顶点的最短路径问题是一类受到普遍重视和研究的问题,广泛应用于计算机科学、交通工程、通信工程、系统工程、运筹学、信息论、控制理论等众多的领域。在现有方法中,必经顶点数很多或者总的顶点数很多时,很难得到最优路径,一般是通过求出似优路径作为最优路径的近似解。“旅行家”问题,给旅行家设计一条旅行路线。使得它从某地出发,游玩一些事先计划好的旅游地点到达目的地后,使总的旅行路程最短。“公交车路线设计问题”,给公交车设计一条路线,使得公交车从起始站出发,途径一些重要的站点到达终点站后,使总的行驶路程最短。“军事物质运输问题”,部队在执行军事运输任务的过程中,必须通过一些地点,比如重要的城市、桥梁、加油站、弹药库,到达目的地后,使总的行驶路径最短。目前,解决这类问题的方法通常有:深度优先搜索方法、遗传方法和蚁群方法等。虽然深度优先搜索方法能够求出满足必经顶点的最短路径,但是由于它的计算复杂度太高,面对顶点规模比较大的情况时,在有限的时间内就很难找到最短路径,因此很难满足实际应用的需求。遗传算法是一种启发式算法,由于求解过程要基于种群数量、迭代次数,并且选择路径过程中具有很大的随机性,因此会导致不能求出稳定的似优路径。蚁群方法同样是一种启发式方法,由于刚开始已知信息量少,导致初期信息数匮乏,求解速度过慢,并且在路径选择过程中,采用了随机性方法,同样会导致不能求出稳定的似优路径。徐庆征和柯熙政在其发表的论文“必经点最短路径问题模型及相应遗传算法研究”(《系统工程与电子技术》2009年)公开了一种求解经过必经顶点的最短路径计算方法。首先初始化种群,选择合适的适应度函数,然后循环执行染色体交叉、基因变异和种群选择,直到到达初始化种群时规定的循环次数。该方法的不足之处是:由于遗传方法在实际求解中具有很大的随机性,并且容易出现过早的收敛到似优路径的情况,导致不能稳定的求出似优路径。林小玲、何建农和周勇在其发表的论文“带限制条件的最短路径算法与实现”(《福州大学学报》2004年)公开了一种求解经过必经顶点的最短路径计算方法。利用分段求最短路径的方法求出总的最短路径,将所求得最短路径相加即得总最短路径。该方法的不足之处是:当不同段之间寻找局部最短路径会用到公共顶点时,这种方法就容易导致无法求出路径。黄书力、胡大裟和蒋玉明在其发表的论文“经过指定的中间节点集的最短路径算法”(《计算机工程与应用》2015年)公开了一种求解经过必经顶点的最短路径计算方法。通过迪杰斯特拉方法依次求起点集到中间节点集之间的局部最短路径,连通中间节点集中所有节点的局部最短路径,中间节点集到终点集之间的局部最短路径,以此求出一条从起点出发经过指定的所有中间节点后到达终点的待选全局最短路径。该方法的不足之处是:在寻找经过必经顶点的最短路径过程中有些顶点可能重复多次经过,这样就导致了环路的产生。闻泰通讯股份有限公司在其申请的专利“导航系统中必经点最短路径的获取方法”(申请号:CN201310631719.0,公开号:CN103674049A)公开了一种获取经过K个必经顶点的N条最短路径方法。该方法的实现主要是先按照给出必经点的顺序,找到一条过必经点的最短路径作为源路径。然后通过排列组合的方式找到所有必经顶点之间的最短路径作为子图,来反复替换原路径中的必经顶点,达到找到多条路径的目的。该方法存在不足之处是:首先不一定能够按照给定的必经点顺序来找到最短路径,其次通过排列组合找到所有必经顶点之间的路径时间耗时非常大,对于大规模数据来说不具有实用性。南京富岛信息工程有限公司在其申请的专利“一种原油罐区调度方法”(申请号:CN201410240939.5,公开号CN104008431A)公开了一种获取经过n个必经顶点的最短路径的方法。该方法的主要实现方式是,首先将n个必经顶点全排列,生成n!个组合,对于每一种组合在首尾分别加入源顶点和目的顶点,然后求解相邻顶点之间的局部最优路径,将路径组合得到n!条路径,再从这些路径中选出最短的一条路径作为最优解。该方法的不足之处是:首先全排列组合非常耗时,导致求解速度慢,其次当使用n!个组合得到n!条路径时,可能会产生环路。

技术实现要素:
本发明的目的是针对上述现有技术存在的不足,提出一种经过必经顶点的最短路径搜索方法。本发明实现的具体思路是:首先把源顶点作为搜索起点,找到搜索起点到所有必经顶点的最短路径,比较这些最短路径的权值,记下其中权值最小的最短路径所对应的必经顶点,然后将其作为新的搜索起点,继续寻找新搜索起点到其余所有必经顶点的最短路径中权值最小的最短路径并记下,如此循环反复,直至所有必经顶点都成为搜索起点,再寻找最后一个搜索起点到目的顶点的最短路径并记下,最后将所有记下的最短路径连起来,就得到满足必经顶点约束的似优路径。若其中某个搜索起点找不到最短路径,则回溯到该搜索起点的上一个必经顶点,令上一个必经顶点为新的搜索起点,记下权值次小的最短路径所对应的必经顶点,然后将该必经顶点作为新的搜索起点继续寻找。实现本发明目的的具体步骤如下:(1)构造有权有向图:构造满足源顶点、目的顶点、必经顶点、非必经顶点之间相互关系的有权有向图;(2)初始化:将目的顶点d添加到必经顶点集合X中,建立一个用来存放似优路径上的顶点集合M,将存放似优路径上的顶点集合M初始化为空,将迭代次数k初始化为1,建立一个用来存放似优路径的集合W,将存放似优路径的集合W初始化为空;(3)判断必经顶点集合X中的顶点个数是否为1,若是,则执行步骤(17),否则,执行步骤(4);(4)搜索第1阶段的最短路径:(4a)以源顶点s作为搜索起点sk,采用Dijkstra迪杰斯特拉方法,分别求出搜索起点sk到必经顶点集合X中除去目的顶点d之外的所有顶点之间的不成环最短路径;(4b)采用最短路径权值公式,计算第1阶段搜索起点到每个必经顶点的最短路径pk,将最短路径pk按照权值从小到大的顺序排列为pk,1,pk,2、……、其中,qk表示搜索过程中搜索起点到其余未搜索到的必经顶点能够连通的最短路径的个数;(5)存储第k阶段的路径:(5a)建立一个用来存放第k阶段搜索过程中,搜索起点到其余必经顶点能够连通的最短路径集合Nk,将最短路径集合Nk初始化为空;(5b)按照最短路径权值从小到大的顺序,将与最短路径权值大小顺序对应的最短路径分别存放到最短路径集合Nk中,ik表示最短路径在最短路径集合Nk中索引,初始化ik为1;(6)确定下一阶段的搜索起点:(6a)找出最短路径集合Nk中索引为ik的最短路径对应的必经顶点将连接搜索起点sk到必经顶点之间的所有顶点的集合记为(6b)将集合中的所有顶点存到似优路径的顶点集合M中;(6c)最短路径存到似优路径的集合W中;(6d)在必经顶点集合X中移除必经顶点将必经顶点作为k=k+1阶段的搜索起点sk;(7)判断必经顶点集合X中的个数是否为1,若是,则执行步骤(8),否则,执行步骤(10);(8)寻找搜索起点sk到目的顶点d之间的最短路径;(9)判断搜索起点sk到目的顶点d之间是否存在最短路径,若是,则执行步骤(17),否则,执行步骤(10);(10)搜索下一阶段的最短路径:(10a)通过Dijkstra迪杰斯特拉方法寻找搜索起点sk到必经顶点集合X中除去目的顶点d外的每个必经顶点之间的不成环最短路径;(10b)第k阶段搜索过程中,搜索起点到其余未搜索到的必经顶点能够连通的最短路径个数qk;(11)判断最短路径个数qk的值是否为0,若是,则执行步骤(13),否则,执行步骤(12);(12)采用最短路径权值公式,计算搜索起点到每个必经顶点的最短路径权值,将路径按照权值由从小到大的的顺序排列为pk,1,pk,2、…、执行步骤(5);(13)恢复上一个必经顶点的路径信息:(13a)回溯到似优路径的顶点集合M中必经顶点的上一个必经顶点,恢复上一个必经顶点的路径信息;(13b)将当前搜索阶段变为k=k-1,似优路径的顶点集合M中移除第k阶段的最短路径包含的顶点(13c)似优路径的集合W中移除最短路径(13d)必经顶点集合X中加上必经顶点(14)判断最短路径集合Nk中索引ik+1的值是否小于等于路径个数qk,若是,执行步骤(15),否则,执行步骤(16);(15)选择权值次小的最短路径:将最短路径集合Nk中索引变为ik=ik+1,执行步骤(6);(16)深度回溯:(16a)将当前搜索阶段变为k=k-1,似优路径顶点集合M中移除第k阶段的最短路径包含的顶点(16b)似优路径集合W中移除最短路径(16c)必经顶点集合X中加上必经顶点(16d)将最短路径集合Nk中索引变为ik=ik+1,执行步骤(6);(17)输出路径:通过Dijkstra迪杰斯特拉方法求出最短路径,将最短路径存储到似优路径集合W中,将似优路径集合W中的路径作为经过必经顶点的似优路径。与现有技术相比,本发明具有以下优点:第一,本发明通过计算搜索起点到每个必经顶点的最短路径权值,减少路径的搜索规模,克服了现有技术深度优先搜索方法需要全部遍历所有顶点的缺点,使得本发明具有显著降低搜索最短路径时间能力的优点。第二,本发明通过分别寻找搜索起点到其余未搜索到的必经顶点之间的最短路径,然后组合成满足必经顶点约束的最短的路径,克服了现有搜索技术遗传方法,蚁群方法的随机搜索特性,使得本发明具有得到固定搜索结果的优点。附图说明图1是本发明的流程图;图2是对于测试用例Case1,采用本发明、遗传方法和蚁群方法3种方法进行10次测试路径权值的折线对比图;图3是对于测试用例Case2,采用本发明、遗传方法和蚁群方法3种方法进行10次测试路径权值的折线对比图;图4是对于测试用例Case3,采用本发明、遗传方法和蚁群方法3种方法进行10次测试路径权值的折线对比图;图5是对于测试用例Case1,采用本发明、遗传方法和蚁群方法3种方法进行10次测试所用时间的折线对比图;图6是对于测试用例Case2,采用本发明、遗传方法和蚁群方法3种方法进行10次测试所用时间的折线对比图;图7是对于测试用例Case3,采用本发明、遗传方法和蚁群方法3种方法进行10次测试所用时间的折线对比图。具体实施方式下面结合附图对本发明做进一步的详细描述。参照附图1,对本发明的实现步骤做进一步的详细描述。步骤1,构造有权有向图。通过所给的源顶点、目的顶点、必经顶点、非必经顶点,构造满足他们之间相互关系的有权有向图,有权有向图中包含相邻顶点索引,相邻顶点之间的权值。步骤2,初始化。令源顶点记为s,目的顶点记为d,必经顶点集合记为X,将目的顶点d添加到X中,建立一个集合M,用来存放似优路径上的顶点,初始化为空,定义变量k,代表搜索阶段,初始化为1,建立一个集合W,用来存放似优路径,初始化为空。步骤3,判断顶点集合X中顶点个数是否为1,若是,则执行步骤17,否则,执行步骤4。步骤4,搜索第1阶段的最短路径。以源顶点s作为搜索起点sk,通过迪杰斯特拉方法分别求出搜索起点sk到必经顶点集合X中除去目的顶点d之外的所有顶点之间的不成环最短路径,定义变量qk,表示第k阶段搜索过程中搜索起点到其余未搜寻到的必经顶点能够连通的最短路径个数。采用最短路径权值公式,计算搜索起点到每个必经顶点的最短路径权值,令最短路径权值按照从小到大的最短路径的顺序为pk,1,pk,2、…、最短路径权值公式如下:c=Σmb]]>其中,c表示搜索起点到必经顶点的最短路径权值,∑表示求和操作,m表示搜索起点到每个必经顶点的所有路径集合,b表示路径集合m中单条路径对应的权值。步骤5,存储第k阶段的路径。建立一个存放第k阶段搜索过程中搜索起点到其余必经顶点能够连通的最短路径的集合Nk,将其初始化为空;按照权值从小到大的顺序将最短路径分别存放到集合Nk中,ik为最短路径在最短路径集合Nk中索引,初始化ik为1。步骤6,确定下一阶段的搜索起点。找出集合Nk中索引为ik的最短路径对应的必经顶点将连接搜索起点sk到必经顶点之间的所有顶点的集合记为将集合中的所有顶点存到似优路径集合M中,最短路径存到似优路径集合W中,在必经顶点集合X中移除必经顶点假如含有其它的必经顶点,就不需要在以后的搜素过程中再次搜索这些必经顶点。令这些必经顶点集合为在必经顶点集合X中移除集合将必经顶点作为k=k+1阶段的搜索起点sk。步骤7,判断必经顶点集合X中的个数是否为1,若是,则执行步骤8,否则,执行步骤10。步骤8,寻找搜索起点到目的顶点的最短路径。寻找搜索起点sk到目的顶点d之间的最短路径。步骤9,判断是否存在最短路径,若是,则执行步骤17,否则,执行步骤(10)。步骤10,搜索下一阶段的最短路径。通过迪杰斯特拉方法寻找搜索起点sk到必经顶点集合X中除去目的顶点d外的每个必经顶点之间的不成环最短路径,搜索过程中首先判断顶点是否属于集合M,只有当不属于集合M的时候,才把顶点加入最短路径中。定义变量qk,表示第k阶段搜索过程中搜索起点到其余未搜寻到的必经顶点能够连通的最短路径个数。步骤11,判断最短路径个数qk的值是否为0,若是,则执行步骤13,否则,执行步骤12。步骤12,采用最短路径权值公式,计算搜索起点到每个必经顶点的最短路径权值,将路径按照权值由从小到大的的顺序排列为pk,1,pk,2、…、执行步骤5。最短路径权值公式如下:c=Σmb]]>其中,c表示搜索起点到必经顶点的最短路径权值,∑表示求和操作,m表示搜索起点到每个必经顶点的所有路径集合,b表示路径集合m中单条路径对应的权值。步骤13,恢复上一个必经顶点的路径信息。回溯到似优路径集合顶点集合M中必经顶点的上一个必经顶点,恢复上一个必经顶点的路径信息。令当前搜索阶段k=k-1,似优路径顶点集合M中移除第k阶段的最短路径包含的顶点似优路径集合W中移除最短路径必经顶点集合X中加上必经顶点必经顶点集合X中加上集合步骤14,判断ik+1的值是否小于等于路径个数qk,ik为在最短路径集合Nk中索引。若是,执行步骤15,否则,执行步骤16。步骤15,选择权值次小的最短路径。索引ik+1小于等于路径个数qk,选择权值次小的最短路径,令索引ik=ik+1,ik为最单路径在最短路径集合Nk中索引,执行步骤6。步骤16,深度回溯。令当前的搜索阶段k=k-1,似优路径顶点集合M中移除第k阶段的最短路径包含的顶点似优路径集合W中移除最短路径必经顶点集合X加上必经顶点必经顶点集合X加上令索引ik=ik+1,ik为最短路径在最短路径集合Nk中索引,执行步骤6。步骤17,输出路径。通过迪杰斯特拉方法找到最短路径,将最短路径存储到似优路径集合W中,似优路径集合W中的路径即为经过必经顶点的似优路径。本发明的效果可通过以下仿真仿真实验进一步说明。1.仿真仿真实验条件:本发明仿真仿真实验是在windows7系统,处理器Intel(R)Core(Tm)i5-2450MCPU主频2.50GHz,RAM4GB的环境下进行的。编程语言是java,jdk为1.8.0_40.编程软件为Eclipse。2.仿真实验内容及结果分析:下面以2016年华为软件精英挑战赛的初赛试题数据进行测试。选取其中的3个测试用例,让本发明与深度优先搜索方法、遗传方法和蚁群方法在得到的权值和搜索时间上进行对比分析。测试用例Case1的总顶点数为20,必经顶点数为6,测试用例Case2的总顶点数为300,必经顶点数为20,测试用例Case3的总顶点数为500,必经顶点数为22。为了进行数据分析,对其中的每个测试用例,用每个方法都测试了10次,表1表示本发明、深度优先搜索方法、遗传方法和蚁群方法在每个相同测试用例下,10次测试的平均耗时和似优路径平均权值。图2、图3和图4分别为本发明、遗传方法和蚁群方法针对3个测试用例进行10次测试分别得到的似优路径权值的折线图。图5、图6和图7分别为本发明、遗传方法和蚁群方法针对3个测试用例进行10次测试所用时间的折线图。下面结合表1对本发明的效果做进一步的描述。本仿真实验选取了3个测试用例,分别给出了3个测试用例的总顶点数和必经顶点数,来对应不同问题规模。虽然测试用例Case2的总顶点数和必经顶点数比测试用例Case3少,但是测试用例Case2的出度更多,复杂度更高。从源顶点经过必经顶点到达目的顶点的路径会有很多条,有向有权图中权值不同说明经过的路径不同。表1:4种方法针对3个用例10次测试的平均耗时与平均权值一览表通过表1可以看出:遗传方法进行10次测试时,针对测试用例Case2,第3次与第7次测试没有得到满足经过必经顶点的似优路径。针对测试用例Case3,第5次测试没有得到满足经过必经顶点的似优路径,因此它们的10次测试平均耗时与平均权值都是无。通过表1可以看出:本发明在很短的时间就可以得到满足经过必经顶点的似优路径,虽然深度优先搜索方法在全遍历之后可以得到满足经过必经顶点的最优路径,但是耗时却非常大,这样导致其在实际应用中不具有可行性。下面结合附图2、附图3和附图4对本发明的效果做进一步的描述。图2是对于测试用例Case1,采用本发明、遗传方法和蚁群方法3种方法进行10次测试路径权值的折线对比图。图3是对于测试用例Case2,采用本发明、遗传方法和蚁群方法3种方法进行10次测试路径权值的折线对比图。图4是对于测试用例Case3,采用本发明、遗传方法和蚁群方法3种方法进行10次测试路径权值的折线对比图。图2、图3和图4中的横坐标表示仿真实验的次数,纵坐标表示每次仿真实验得到的权值。图2、图3和图4中以▽标示的折线表示本发明10次仿真实验路径权值的折线图,以*标示的折线表示遗传方法10次仿真实验路径权值的折线图,以□标示的折线表示蚁群方法10次仿真实验路径权值的折线图。图3和图4中的断点处表示本次仿真实验没有得到满足经过必经顶点的似优路径。对比图2、图3和图4可以看出本发明在3个测试用例中进行10次测试每次都可以得到同一个满足经过必经顶点的似优路径,其中,遗传方法在3个测试用例中进行10次测试每次得到的满足经过必经顶点的似优路径几乎都不相同。并且有几次还没有得到满足经过必经顶点的路径。这说明遗传方法的求解结果十分不稳定。蚁群方法虽然每次都可以找到满足必经顶点的似优路径,但每次求得的路径权值都不相同,同样可以看出其求解结果的不稳定性。下面结合附图5、附图6和附图7对本发明的效果做进一步的描述。图5是对于测试用例Case1,采用本发明、遗传方法和蚁群方法3种方法进行10次测试所用时间的折线对比图;图6是对于测试用例Case2,采用本发明、遗传方法和蚁群方法3种方法进行10次测试所用时间的折线对比图;图7是对于测试用例Case3,采用本发明、遗传方法和蚁群方法3种方法进行10次测试所用时间的折线对比图。图5、图6和图7中的横坐标表示仿真实验的次数,纵坐标表示每次仿真实验所用的时间。图5、图6和图8中以○标示的折线表示本发明10次仿真实验所用时间的折线图,以☆标示的折线表示遗传方法10次仿真实验所用时间的折线图,以标示的折线表示蚁群方法10次仿真实验所用时间的折线图。图6和图7中的断点处表示本次仿真实验没有得到满足经过必经顶点的似优路径。对比图5、图6和图7可以看出本发明在3个测试用例中进行10次测试每次测试所用的时间都比遗传方法和蚁群方法要少,可以看出本发明相比于遗传方法和蚁群方法在求解速度上具有很大的优势。并且针对同一个测试用例,每次求解满足经过必经顶点的最短路径所用的时间几乎是不变的,而遗传方法和蚁群方法的时间波动比较大。综上所述,本发明相对于深度优先搜索方法在求解速度上具有很大的提升,与遗传方法和蚁群方法相比,在求解稳定性和求解速度上都具有很大的优势。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1