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

文档序号:12126321阅读:来源:国知局

技术特征:

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;

(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)。

2.根据权利要求1所述的方法,其中步骤(4)中通过迪杰斯特拉方法对剪枝后的有权有向图G1进行简化,按如下步骤进行:

(4.1)定义源节点权值矩阵U,用于保存源节点s到每个必经节点之间的路径权值,若从源节点s到一个必经节点不存在路径,或者必须经过其他必经节点才能到达该必经节点,则保存该路径权值为无穷大,若源节点s到一个必经节点之间有多条路径存在时,保存最短的那条路径权值;

(4.2)定义必经节点权值矩阵E,用于保存两两必经节点之间的路径权值;

(4.3)定义目的节点权值矩阵D,用于保存每个必经节点到目的节点的路径权值;

(4.4)根据源节点权值矩阵U、必经节点权值矩阵E、目的节点权值矩阵D得到只包含源节点s、目的节点t和必经节点集V'相互关系的简化有权有向图G2。

3.根据权利要求1所述的方法,其中步骤(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)。

4.根据权利要求1所述的方法,其中步骤(5.8)中使用正向迪杰斯特拉方法将当前蚂蚁k得到的路径Pk恢复为正向实际路径P′k,按如下步骤进行:

(5.8a)构造正向实际路径Pk',初始化为空,将剪枝后的有权有向图G1中所有节点访问标志位置0;

(5.8b)在剪枝后的有权有向图G1中,按照路径Pk的正向顺序,从源节点s出发,寻找下一个未访问的必经节点,并更新正向实际路径P′k

(5.8c)寻找下一个未访问的必经节点,更新正向实际路径P′k

(5.8d)判断是否到达目的节点t,若是,得到正向实际路径P′k,否则,返回(5.8c)。

5.根据权利要求1所述的方法,其中步骤(5.10)中使用反向迪杰斯特拉方法将当前蚂蚁k得到的路径Pk恢复为反向实际路径P″k,按如下步骤进行:

(5.10a)构造反向实际路径P″k,初始化为空,将剪枝后的有权有向图G1中所有节点访问标志位置0;

(5.10b)在剪枝后的有权有向图G1中,按照当前路径Pk的反向顺序,从目的节点t出发,寻找下一个未访问的必经节点,并更新反向实际路径P″k

(5.10c)寻找下一个未访问的必经节点,更新反向实际路径P″k

(5.10d)判断是否到达源节点s,若是,得到反向实际路径P″k,否则,返回(5.10c)。

6.根据权利要求1所述的方法,其中步骤(5.12)中计算最大最小信息素,通过以下公式进行:

其中,τmax为最大信息素,ρ表示信息素的残留系数,L为最优蚂蚁走过的路径长度,τmin为最小信息素,n为简化后有权有向图G2中的节点个数,avg=n/2,Pbest表示蚂蚁一次搜索找到最优解的概率。

7.根据权利要求1所述的方法,其中步骤(5.12)中更新信息素,通过以下公式进行:

其中,代表最优蚂蚁在(a,a+1)时间内,路径i到j的信息素增量;

Q为常数,表示单只蚂蚁在路径中释放出的信息素总量。

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