基于迪杰斯特拉和最大最小蚁群的无环最短路径搜索方法与流程

文档序号:12126321阅读:660来源:国知局
基于迪杰斯特拉和最大最小蚁群的无环最短路径搜索方法与流程
本发明属于通信
技术领域
,更进一步涉及一种无环最短路径搜索方法,可用于网络路由系统中路径选择、交通运输中线路规划场景。
背景技术
:最短路径问题是在给定的网图中,求源节点到目的节点之间经过的路径权值之和最小的路径。经典的最短路径方法有迪杰斯特拉方法和弗洛伊德方法,但这两种方法最初的提出均不能适用于经过指定的必经节点。目前解决经过指定必经节点的最短路径方法主要有深度优先遍历法、迪杰斯特拉方法、遗传方法、传统蚁群方法。深度优先遍历是找出所有满足条件的路径,对比得到最短的路径,虽然得到的最短路径是最优的结果,但时间复杂度高,对于复杂图,通常不能在有效时间内得到解;迪杰斯特拉方法按权值递增的次序来产生源点到其余必经节点的最短路径,同样面临时间复杂度高的问题;遗传方法和传统蚁群方法属于启发式的智能方法,都有一定的随机性,且在必经节点个数大于15、总节点个数超过300的图规模大、结构复杂的场景中通常得到的解的权值不够小。南京富岛信息工程有限公司在其申请的专利“一种原油罐区调度方法”(申请号:CN201410240939.5,公开号CN104008431A)公开了一种获取经过n个必经顶点的最短路径的方法。该方法的主要实现方式是,必经节点之间的顺序采用全排列的方法,生成n!个组合,对于每一种组合在首尾分别加入源节点和目的节点,然后求解相邻顶点之间的局部最优路径,将相邻节点之间的局部最优路径组合得到n!条完整路径,再从这些完整路径中选出最短的一条路径作为最优解。该方法的不足之处是:首先全排列组合非常耗时,导致求解速度慢,其次当使用n!个组合得到n!条路径时,可能会产生环路。武汉烽火技术服务有限公司在其申请的专利“一种带约束条件的拓扑图最优路径方法”(申请号:201510589652.8,公开号105141524A)公开了一种带约束条件的拓扑图最优路径方法。该方法主要是根据给定的必经节点顺序,建立必经节点拓扑列表,并实时更新避开节点拓扑列表,直到找到目的节点。该方法的不足之处是只给定一个必经节点序列,找到解的可能性较小且找到的解的权值通常较大。黄书力,胡大裟,蒋玉明提出的“经过指定的中间节点集的最短路径方法”(《计算机工程与应用》2015)通过迪杰斯特拉算法计算源节点到第一个必经节点、第一个必经节点依次经过其它必经节点到达最后一个必经节点、最后一个必经节点到目的节点的最短路径,通过全排列得到必经节点组合顺序后,按照分段求最短路径方法,得到最短路径。该方法缺点是全排列方法时间复杂度高,对于必经节点较多的复杂网图在有效时间内很难找到解。WuW,RuanQ在其发表的论文中“Ahierarchicalapproachfortheshortestpathproblemwithobligatoryintermediatenodes”(《SignalProcessing》2006)提出采用遗传方法求解经过必经节点集的最短路径,适用于求解必经节点个数少于20的网络图,但有可能经过重复节点,构成有环路径。徐庆征,柯熙政在其发表的论文中“必经点最短路径问题模型及相应遗传方法研究”(《系统工程与电子技术》2009)提出生成无环最短路径的遗传方法,通过构造独特的适应度函数,使包含较多必经点的染色体能够优先被选择进入下一代,但对于节点个数多的网络图难以得到解。综上,现有方法对于求解节点个数较多的大型复杂图,时间复杂度高,在有效时间内得到的路径权值大,不适用于现实情况。技术实现要素:本发明针对上述现有技术存在的不足,提出一种基于迪杰斯特拉和最大最小蚁群的无环最短路径搜索方法,以降低时间复杂度,改善路径权值。本发明实现的技术方案是:通过将源节点作为搜索起点,对原始图进行深度搜索遍历和图筛选,剔除无用点和无用边;通过使用迪杰斯特拉方法计算出图中源节点、必经节点集、目的节点中两两节点之间的最短距离,将包含辅助节点的复杂图转化为不包含辅助节点的简单图;通过最大最小蚁群方法找到简单图的似优路径,再通过迪杰斯特拉方法,将简单图的似优路径展开为原始图的无环似优路径,并从原始图的无环似优路径集合中选择权值最小的一条路径作为最优路径输出。其实现步骤包括如下:(1)构造有权有向图:以G(V,E)为原始图,构造满足源节点s、目的节点t、必经节点集V'和辅助节点集X相互关系的有权有向图G,其中,V为节点集合,E为有权边集合;(2)初始化:建立一个似优路径集合W,并初始化为空,根据有权有向图G的结构建立p节点的出度集合Op和入度集合Ip,其中p∈V;(3)对有权有向图G进行剪枝,得到剪枝后的有权有向图G1:(3.1)通过深度优先遍历方法搜索有权有向图G,删除有权有向图G中不能到达的节点;(3.2)判断节点集合V中节点p的出度集合Op是否为空,若为空,则删除节点p及与p相关的有向边,其中p≠s且p≠t;(3.3)将必经节点集V'和辅助节点集X中所有节点的访问标志位初始化为0,设访问标志位为0表示未被访问,访问标志位为1表示已被访问;(3.4)取必经节点集V'中一个未被访问的节点p,将其访问标志位置为1,判断节点p的入度集合Ip大小是否为1:若为1,则只保留前驱节点到p的有向边,删除该前驱节点的其它出度边,执行(3.5),否则,直接执行(3.5);(3.5)判断节点p的出度集合Op大小是否为1,若为1,则只保留p到后继节点的有向边,删除该后继节点的其它入度边,执行(3.6),否则,直接执行(3.6);(3.6)判断所有必经节点的访问标志位是否都为1,若都为1,则执行(3.7),否则,返回(3.4);(3.7)取辅助节点集X中一个未被访问的节点p1,将其访问标志位置为1,判断节点p1的入度集合Ip1大小是否为1:若为1,则只保留前驱节点到p1的有向边,删除p1到其前驱节点的有向边,执行(3.8),否则,直接执行(3.8);(3.8)判断节点p1的出度集合Op1大小是否为1,若为1,则只保留p1到后继节点的有向边,删除后继节点到p1的有向边,执行(3.9),否则,直接执行(3.9);(3.9)判断所有辅助节点的访问标志位是否都为1,若都为1,得到剪枝后的有权有向图G1,执行(4),否则,返回(3.7)。(4)通过迪杰斯特拉方法将剪枝后的有权有向图G1简化为只包含源节点s、目的节点t、必经节点集V'相互关系的有权有向图G2;(5)在简化的有权有向图G2中使用结合迪杰斯特拉的最大最小蚁群方法得到最优路径:(5.1)初始化参数:蚂蚁个数为m,设置最大迭代次数F,置全局最优解的初始权值为无穷大,已迭代次数为0;(5.2)构造用于存放蚂蚁通过的节点和路径的禁忌表Tabuk,k=1,2,…,m,并初始化为空;(5.3)将全部蚂蚁放置在源节点s上,将源节点s和目的节点t添加到禁忌表Tabuk,k=1,2,…,m,置本次迭代最优解的初始权值为无穷大;(5.4)取一只蚂蚁k,计算其路径Pk;(5.5)计算当前蚂蚁k所走路径Pk的权值,清空该蚂蚁对应的禁忌表Tabuk;(5.6)判断全部蚂蚁是否完成寻路,若是,执行(5.7);否则,返回(5.4);(5.7)对所有蚂蚁的路径P1,P2,…Pk,…,Pm按照权值从小到大排序,并按照排序依次选取蚂蚁k的路径Pk,判断其路径Pk的权值是否小于本次迭代最优解,若是,则将G2中每个节点的访问标志位置为0,执行(5.8),否则,跳转到(5.12);(5.8)使用正向迪杰斯特拉方法将当前蚂蚁k得到的路径Pk恢复为正向实际路径P′k,判断正向实际路径P′k的权值是否小于本次迭代最优解,若是,则更新本次迭代最优解,执行(5.9),否则,执行(5.10);(5.9)判断正向实际路径P′k的权值是否小于全局最优解,若是,则更新全局最优解,并将似优路径集合W中的路径替换为正向实际路径P′k,执行(5.10),否则,直接执行(5.10);(5.10)将所有节点访问标志位重新置0,使用反向迪杰斯特拉方法将路径Pk恢复为反向实际路径P″k,判断反向实际路径P″k的权值是否小于本次迭代最优解,若是,则更新本次迭代最优解,执行(5.11),否则,执行(5.12);(5.11)判断反向实际路径P″k的权值是否小于全局最优解,若是,则更新全局最优解,并将似优路径集合W中的路径替换为反向实际路径P″k,执行(5.12),否则,直接执行(5.12);(5.12)计算最大最小信息素,并更新路径信息素;(5.13)迭代次数加1,判断是否达到预定的迭代次数F,若是,则将似优路径集合W中保存的路径作为最优路径输出,否则,返回(5.3)。本发明与现有技术相比,具有以下优点:第一:本发明采用剪枝和简化,将原本复杂的大型图转变为只包含源节点、必经节点、目的节点的简单图,使图的规模大大缩小,克服了现有技术中在处理复杂图时其时间复杂度高的缺点。第二:本发明采用了最大最小蚁群这种启发式方法,在求解过程中使用迪杰斯特拉方法进行正反向实际路径恢复,在有效时间内,能够得到比传统蚁群算法和遗传算法更优的解。附图说明图1为本发明的实现总流程图。图2为本发明中获取最优路径的子流程图。图3为用本发明对5个测试实例求解30次得到的路径权值折线图。图4为用本发明对示例拓扑进行简化的前后对比图。具体实施方式下面结合附图对本发明做进一步的详细描述。参照附图1,对本发明的实现步骤做进一步的详细描述。步骤1,构造有权有向图:以G(V,E)为原始图,构造满足源节点s、目的节点t、必经节点集V'和辅助节点集X相互关系的有权有向图G,其中V为节点集合,E为有权边集合。步骤2,初始化:建立一个似优路径集合W,并初始化为空,根据有权有向图G的结构建立p节点的出度集合Op和入度集合Ip,其中p∈V。步骤3,对有权有向图G进行剪枝,得到剪枝后的有权有向图G1。(3.1)通过深度优先遍历方法搜索有权有向图G,删除有权有向图G中不能到达的节点;(3.2)判断节点集合V中节点p的出度集合Op是否为空,若为空,则删除节点p及与p相关的有向边,其中p≠s且p≠t;(3.3)将必经节点集V'和辅助节点集X中所有节点的访问标志位初始化为0,设访问标志位为0表示未被访问,访问标志位为1表示已被访问;(3.4)取必经节点集V'中一个未被访问的节点p,将其访问标志位置为1,判断节点p的入度集合Ip大小是否为1:若为1,则只保留前驱节点到p的有向边,删除该前驱节点的其它出度边,执行(3.5),否则,直接执行(3.5);(3.5)判断节点p的出度集合Op大小是否为1,若为1,则只保留p到后继节点的有向边,删除该后继节点的其它入度边,执行(3.6),否则,直接执行(3.6);(3.6)判断所有必经节点的访问标志位是否都为1,若都为1,则执行(3.7),否则,返回(3.4);(3.7)取辅助节点集X中一个未被访问的节点p1,将其访问标志位置为1,判断节点p1的入度集合Ip1大小是否为1:若为1,则只保留前驱节点到p1的有向边,删除p1到其前驱节点的有向边,执行(3.8),否则,直接执行(3.8);(3.8)判断节点p1的出度集合Op1大小是否为1,若为1,则只保留p1到后继节点的有向边,删除后继节点到p1的有向边,执行(3.9),否则,直接执行(3.9);(3.9)判断所有辅助节点的访问标志位是否都为1,若都为1,得到剪枝后的有权有向图G1,执行(4),否则,返回(3.7)。步骤4,通过迪杰斯特拉方法将剪枝后的有权有向图G1简化为只包含源节点s、目的节点t、必经节点集V'相互关系的有权有向图G2。(4.1)定义源节点权值矩阵U,用于保存源节点s到每个必经节点之间的路径权值,若从源节点s到一个必经节点不存在路径,或者必须经过其他必经节点才能到达该必经节点,则保存该路径权值为无穷大,若源节点s到一个必经节点之间有多条路径存在时,则保存最短的那条路径权值;(4.2)定义必经节点权值矩阵E,用于保存两两必经节点之间的路径权值;(4.3)定义目的节点权值矩阵D,用于保存每个必经节点到目的节点的路径权值;(4.4)根据源节点权值矩阵U、必经节点权值矩阵E、目的节点权值矩阵D得到只包含源节点s、目的节点t和必经节点集V'相互关系的简化有权有向图G2。步骤5,在简化的有权有向图G2中使用结合迪杰斯特拉的最大最小蚁群方法得到最优路径。参照图2,本步骤的具体实现如下:(5.1)初始化参数:蚂蚁个数为m,设置最大迭代次数F,置全局最优解的初始权值为无穷大,已迭代次数为0;(5.2)构造用于存放蚂蚁通过的节点和路径的禁忌表Tabuk,k=1,2,…,m,并初始化为空;(5.3)将全部蚂蚁放置在源节点s上,将源节点s和目的节点t添加到禁忌表Tabuk,k=1,2,…,m,置本次迭代最优解的初始权值为无穷大;(5.4)取第k只蚂蚁,计算其路径Pk:(5.4a)初始化第k只蚂蚁的路径集合Pk为空,计算当前a时刻,从源节点s到所有未被访问的必经节点p的转移概率其中,τsp(a)表示当前时刻,节点s到节点p路径上的信息素,ηsp(a)表示从节点s到节点p的能见度,取值为节点s到节点p的距离的倒数,α为信息素的加权值,β为能见度的加权值;(5.4b)通过转移概率确定下一时刻访问节点,对其进行访问,并将源节点s到该节点对应的有向边加入到路径集合Pk中,更新禁忌表Tabuk;(5.4c)计算当前访问节点i到下一个可访问必经节点j的转移概率τij(a)表示在当前时刻,节点i到节点j路径上的信息素,ηij(a)表示从节点i到节点j的能见度,取值为节点i到节点j距离的倒数;(5.4d)通过(5.4c)得出的转移概率确定下一访问节点,对其进行访问,并更新路径集合Pk和禁忌表Tabuk;(5.4e)判断所有必经节点是否都已被访问,若是,将最后一个必经节点到目的节点t的有向边加入路径集合Pk,否则,返回(5.4c)。(5.5)计算当前蚂蚁k所走路径Pk的权值,清空该蚂蚁对应的禁忌表Tabuk;(5.6)判断全部蚂蚁是否完成寻路,若是,执行(5.7);否则,返回(5.4);(5.7)对所有蚂蚁的路径(P1,P2,…Pk,…,Pm)按照权值从小到大排序,并按照排序依次选取蚂蚁k的路径Pk,判断其路径Pk的权值是否小于本次迭代最优解,若是,则将G2中每个节点的访问标志位置为0,执行(5.8),否则,跳转到(5.14);(5.8)使用正向迪杰斯特拉方法将当前蚂蚁k得到的路径Pk恢复为正向实际路径P′k:(5.8a)构造正向实际路径P′k,初始化为空,将剪枝后的有权有向图G1中所有节点访问标志位置0;(5.8b)在剪枝后的有权有向图G1中,按照路径Pk的正向顺序,从源节点s出发,寻找下一个未访问的必经节点,并更新正向实际路径P′k;(5.8c)寻找下一个未访问的必经节点,更新正向实际路径P′k;(5.8d)判断正向实际路径P′k是否到达目的节点t,若是,得到正向实际路径P′k,否则,返回(5.8c);(5.9)判断正向实际路径P′k的权值是否小于本次迭代最优解,若是,则更新本次迭代最优解,执行(5.10),否则,执行(5.11);(5.10)判断正向实际路径P′k的权值是否小于全局最优解,若是,则更新全局最优解,并将似优路径集合W中的路径替换为正向实际路径P′k,执行(5.11),否则,直接执行(5.11);(5.11)将所有节点访问标志位重新置0,使用反向迪杰斯特拉方法将路径Pk恢复为反向实际路径P″k:(5.11a)构造反向实际路径P″k,初始化为空,将剪枝后的有权有向图G1中所有节点访问标志位置0;(5.11b)在剪枝后的有权有向图G1中,按照当前路径Pk的反向顺序,从目的节点t出发,寻找下一个未访问的必经节点,并更新反向实际路径P″k;(5.11c)寻找下一个未访问的必经节点,更新反向实际路径P″k;(5.11d)判断反向实际路径P″k是否到达源节点s,若是,得到反向实际路径P″k,否则,返回(5.11c);(5.12)判断反向实际路径P″k的权值是否小于本次迭代最优解,若是,则更新本次迭代最优解,执行(5.13),否则,执行(5.14);(5.13)判断反向实际路径P″k的权值是否小于全局最优解,若是,则更新全局最优解,并将似优路径集合W中的路径替换为反向实际路径P″k,执行(5.14),否则,直接执行(5.14);(5.14)计算最大信息素τmax和最小信息素τmin:其中,ρ表示信息素的残留系数,L为最优蚂蚁走过的路径长度,n为简化后有权有向图G2中的节点个数,avg=n/2,Pbest表示蚂蚁一次搜索找到最优解的概率;(5.15)更新路径信息素τij(a+1),并满足τmin≤τij(a+1)≤τmax:其中,代表最优蚂蚁在(a,a+1)时间内,路径i到j的信息素增量,Q为常数,表示单只蚂蚁在路径中释放出的信息素总量;(5.16)迭代次数加1,判断是否达到预定的迭代次数F,若是,则将似优路径集合W中保存的路径作为最优路径输出,否则,返回(5.3)。本发明的效果通过以下实验进一步说明:1.实验条件:测试环境为Ubuntu,单核处理器,内存为2048MB。编程语言为c++。本发明中设置最大最小蚁群方法主要参数为α=1,β=2,ρ=0.96,Q=100,Pbest=0.05,最大迭代次数F根据不同的必经节点个数动态调整。本发明选取5个测试实例:测试实例Case1总节点个数为20,必经节点个数为6;Case2总节点个数为50,必经节点个数为10;Case3总结点个数为300,必经节点个数为20;Case4总节点个数为500,必经节点个数为22;Case5总节点个数为500,必经节点个数为42。2.实验内容及结果分析:实验1,用本发明与现有的深度优先搜索方法、迪杰斯特拉方法、遗传方法对上述5个测试实例进行30次测试,得到最优路径权值和搜索时间如表1,其中,超过20分钟仍然没得到解则认为该方法对本实例无解(NA)。表1四种方法测试结果从表1可看出以下结果:在30次测试中,深度优先遍历和迪杰斯特拉在有效时间内,对于简单图可以找到一个最优解,但对于必经节点较多的复杂图,找到解的可能性较小,如表中Case3、Case4和Case5都没有找到一个近优解,在实际应用中不具有可行性。分析原因在于:深度优先遍历对图中的每个节点进行搜索遍历,有效时间内很难找到一条包含所有必经节点的路径;迪杰斯特拉方法随着必经节点个数的增加,全排列的时间复杂度迅速增长,有效时间内难以找到解。在30次测试中,遗传方法可以解出Case1、Case2、Case3、Case4,但近优解的权值较大,且耗时多,而对于Case5,遗传方法没有得到满足经过必经顶点的似优路径。在30次测试中,本发明经过节点简化后,大大减小数据量,能够更快找到最优解。对于Case1、Case2,四种方法都得到了最优解,本发明耗时更少;对于Case3和Case5,虽然本发明没有得到理论最优解,但得到了一个与理论最优解很接近的次优解,优于其它三种方法。为了测试本发明的平均性能,表2统计出本发明30次测试的平均权值,平均耗时以及误差率,其中,误差率=(平均权值-理论最优解)/理论最优解。表2针对5个用例测试30次的平均权值和误差率实例理论最优解平均权值平均耗时(ms)误差率Case171717.70.0Case2999951.80.0Case3375398.18154.10.061Case44474474171.90.0Case5444469.78496.470.057从表2可以看出,对于Case1、Case2和Case4,本发明每次均能在较短时间得到最优解,其误差率为0。对于Case3和Case5,本发明能够在有效时间内找到相对近优的路径,误差率分别为0.061和0.057。Case3虽然必经节点个数小于Case4,但其必经节点的出度较多,存在的实际路径更多,这样使得对类似Case3的这部分图得不到最优解。Case5相对于其他图,总节点以及必经点数都比较多,蚂蚁走的路径相对更多,得到最优解的几率减少。对本发明30次测试的最优路径权值变化进行折线图绘制,结果如图3。从图3可以看出:Case1、Case2和Case4在30次测试中,始终得到最优解,Case3的路径权值在385至420之间起伏,Case5的路径权值在446至512之间起伏,具有一定的稳定性。实验2,用本发明对示例拓扑进行简化,结果如图4。其中:图4(a)表示未经简化的复杂图:s为源节点,t为目的节点,k1、k2、k3、k4为必经节点,其余节点(a,b,c,d,e,f,g)为辅助节点,每条边上的数字代表权重。根据迪杰斯特拉方法,可得到s到k1的最短距离为2,对应路径为s→a→k1;同理,得到源节点到其他必经节点、两两必经节点间、以及任一必经节点到目的节点的最短距离。图4(b)为经过简化后的简单图。简单图中隐藏了复杂图中的一些路径信息,在恢复原始路径时,可能会遇到重复经过同一个辅助节点的情况,例如:假设最后从简单图中得到从s到t的路径顺序是:s→k1→k2→k3→k4→t,则恢复出s到k1的路径对应原始路径为s→a→k1,k1到k2对应为k1→a→k2,k2到k3对应为k2→d→k3,k3到k4对应为k3→k4,k4到目的节点t路径信息对应为k4→t,完整的原始路径信息为s→a→k1→a→k2→d→k3→k4→t,可见,原始路径中重复经过a节点。因此,经过图简化后,原始复杂图的节点个数减小,大大减小了复杂度,求解速度提高,但如果不进行实际路径恢复,则有可能生成有环路径,这就是后续在使用最大最小蚁群方法中使用正反向迪杰斯特拉的原因。综上所述,本发明相对于深度优先搜索方法、迪杰斯特拉方法,在求解速度上具有很大的提升,与遗传方法相比,在求解结果优劣和求解速度上都具有很大的优势。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1