[发明专利]基于双向Dijkstra的城市路网K条最短路径的获取方法有效
申请号: | 202111140784.4 | 申请日: | 2021-09-28 |
公开(公告)号: | CN113808424B | 公开(公告)日: | 2022-07-05 |
发明(设计)人: | 丁建勋;颜江楠;樊哲延;殷慧娟;黄林煊;曾嘉涵;查菲菲;徐小明;龙建成 | 申请(专利权)人: | 合肥工业大学 |
主分类号: | G08G1/0968 | 分类号: | G08G1/0968 |
代理公司: | 安徽省合肥新安专利代理有限责任公司 34101 | 代理人: | 陆丽莉;何梅生 |
地址: | 230009 安*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 双向 dijkstra 城市 路网 条最短 路径 获取 方法 | ||
1.一种基于双向Dijkstra的城市路网K条最短路径的获取方法,其特征是按如下步骤进行:
步骤1:定义参数并初始化:
获取实时道路网络数据并得到城市路网图G=(V,A),V表示交叉口集合,且V={v1,v2,v3,...,vq,...,vQ},设城市路网图G中需要规划的起点交叉口为vs∈V,终点交叉口为vt∈V,vq表示第q个交叉口,且vq=(dq,vq,pre,vq,root),其中,vq,root表示第q个交叉口vq的所在路径的根交叉口节点,vq,root∈{vs,vt},dq表示从根交叉口节点vq,root到达第q个交叉口vq的途经距离,vq,pre表示第q个交叉口vq的前驱交叉口节点,vq,pre∈V,q=1,2,3...Q,Q表示交叉口的总数,A表示交叉口之间的有向路段集合,且A={aij=(vi,vj)|i,j=1,2,...Q},(vi,vj)表示第i个交叉口vi到第j个交叉口vj之间的路段,令ωi,j为路段(vi,vj)的权值;
定义叶子交叉口节点为双向搜索过程中,由根交叉口节点探索出的路径树结构中度为“1”的节点;
定义当前搜索次数为t,并定义Df,t、Db,t分别为用于记录当前第t次搜索的路径树结构中,从前向和后向搜索的各叶子交叉口节点的集合;
定义集合用于记录所有叶子交叉口节点中离自身的根节点距离值最小所对应的叶子交叉口节点;
定义双向搜索过程中叶子交汇交叉口节点集用于记录在当前第t次搜索下所有能够双向交汇的叶子交叉口节点;将叶子交汇交叉口节点集中对应的节点组成叶子交汇交叉口节点对并存入集合P中,用于存储所有产生的连通路径;
定义存储路径树结构中新增的一个叶子交叉口节点vi所在路径的前驱交叉口节点的列表为R(vi);
确定所需最短路径条数为K,定义当前最短路径条数为k,并初始化k=0,第k条最短路径的路程记为初始化起点交叉口节点终点交叉口节点
初始化t=1;并将起点交叉口vs加入当前第t次前向搜索的集合Df,t,将终点交叉口vt加入当前第t次后向搜索的集合Db,t;
步骤2:找出Df,t、Db,t中途经距离值最小的叶子交叉口节点vmin,从而得到当前第t次搜索的集合再随机选择集合中的叶子交叉口节点中根交叉口节点相同的所有叶子交叉口节点,并依次将第t次搜索时根交叉口节点相同的叶子交叉口节点,作为第t+1次所要搜索得到的叶子交叉口节点的前驱交叉口节点放入集合
若根交叉口节点为起点交叉口vs,则从有向路段集合A中依次找出前驱交叉口节点集合中每个前驱交叉口节点所能到达的邻接交叉口节点;其中,记任意一个前驱交叉口节点vmin所能到达的一个邻接交叉口节点为vj,转步骤2.1;
若根交叉口节点为终点交叉口vt,则从有向路段集合A中依次找出前驱交叉口节点集合中能够达到每个前驱交叉口节点的邻接交叉口节点;其中,记达到任意一个前驱交叉口节点vmin的一个邻接交叉口节点为vj,转步骤2.1;
步骤2.1:判断每个邻接交叉口节点是否符合要求;
如果寻找的路径允许包含环路,且根交叉口节点为起点交叉口vs,则转步骤2.3;
如果寻找的路径允许包含环路,且根交叉口节点为终点交叉口vt,则转步骤2.4;
如果寻找的路径不允许包含环路,则先将邻接交叉口节点vj的前驱交叉口节点vmin加入列表R(vj)中,然后从前驱交叉口节点vmin开始向根交叉口节点进行回溯,且每回溯一个前驱交叉口节点就加入列表R(vj)中,若R(vj)中存在与邻接交叉口节点vj相同的前驱交叉口节点,则表示vj的引入使得环路存在,直接将邻接交叉口节点vj舍弃,继续判断下一个邻接交叉口节点,否则,表示无环路,并执行步骤2.2;
步骤2.2:当根交叉口节点为起点交叉口vs,则转步骤2.3;当根交叉口节点为终点交叉口vt,则转步骤2.4;
步骤2.3:将邻接交叉口节点记为然后更新集合Df,t+1=Df,t∪{vj};其中,ωmin,j表示前驱交叉口节点vmin到其邻接交叉口节点vj的路段权值,表示前驱交叉口节点vmin到其根交叉口节点的途经距离;
当找完前驱交叉口节点vmin的所有邻接交叉口节点并完成判断后,从Df,t中将相应的前驱交叉口节点vmin删除,更新Df,t+1=Df,t\{vmin};
当找完所有前驱交叉口节点的邻接交叉口节点后,将t+1赋值给t后,执行步骤3;
步骤2.4:将邻接交叉口节点记为更新集合Db,t+1=Db,t∪{vj};其中,ωj,min表示vmin的邻接交叉口节点vj到前驱交叉口节点vmin的路段权值,表示前驱交叉口节点vmin到它的根交叉口节点的途经距离;
当找完前驱交叉口节点vmin的所有邻接交叉口节点并完成判断后,从Db,t中将相应的前驱交叉口节点vmin删除,更新Db,t+1=Db,t\{vmin};
当找完所有前驱交叉口节点的邻接交叉口节点后,将t+1赋值给t后,执行步骤3;
步骤3:运算若即表示存在一组或多组交汇交叉口节点,则将其中每一组交汇交叉口节点所对应的前向搜索出的叶子交叉口节点vi=(di,vi,pre,vs)和后向搜索出的叶子交叉口节点v′i=(d′i,v′i,pre,vt)组成交汇交叉口点对(vi,v′i)并加入集合P,且(vi,v′i)路径长度di,len=di+d′i,并转步骤4;若即表示没有新的交汇交叉口点对构成新路径,并返回步骤2顺序执行;
步骤4:计算第t次双向搜索的最短路判断条件其中,表示第t次前向搜索的叶子交叉口节点集合Df,t中所有叶子交叉口节点的最小途经距离d,即表示第t次后向搜索的叶子交叉口节点集合Db,t中所有叶子交叉口节点的最小途经距离d,即
步骤5:取集合P中所有交汇交叉口节点对的路径长度的点对加入集合中,然后将集合P中点对的路径长度di,len从小到大进行排序,并分别作为第k+1条至第k+n条最短路,其中,n=集合的长度将集合排序后的路径长度di,len依次赋值给至并分别从路径长度所对应的交汇交叉口点对开始分别前向回溯至vs、后向回溯至vt,并将回溯过程中的所有交叉口节点连接形成为一条完整路径,最后从集合P中删除集合中的交汇交叉口点对,从而更新集合P,更新k为k+n;转步骤6;若找不到的点对,则返回步骤2顺序执行;
步骤6:判断k是否大于等于K,若是,则表示已获得K条最短路,并终止路径搜索,从前k条最短路中取前K条最短路最为结果输出,否则,继续判断P为空,且第t次搜索过程中集合中的每个节点均找不到其他邻接交叉口节点是否成立,若成立,则表示只能获得k条最短路,并终止路径搜索;否则,返回步骤2顺序执行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于合肥工业大学,未经合肥工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111140784.4/1.html,转载请声明来源钻瓜专利网。