一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于双向Dijkstra的城市路网K条最短路径的获取方法与流程

2021-12-17 22:06:00 来源:中国专利 TAG:

基于双向dijkstra的城市路网k条最短路径的获取方法
技术领域
1.本发明属于车载导航路径优化领域,具体的说是一种基于双向dijkstra的城市路网k条最短路径的获取方法。


背景技术:

2.随着城市道路网规模的不断扩大,一对起讫点之间的旅程选择可以有多条不同路径,并且随着当前导航用户的使用量增大,以及导航效果与实时路况的信息时效性息息相关,人们对于算法的要求越来越高。常用的最短路算法在大规模城市道路网中使用,尤其是起讫点距离较远时,计算所涉及的范围很广,耗时和资源占用相应增大,这种用资源数量换取效率质量的方法是普遍的应对方案。
3.在解决k最短路问题上,不同学者设计了不同的算法,通过“重构网络”或者“删边法”等等,然而这些方法使得计算工作量将会明显增大,不适用于实时性导航的理念。
4.在保证求解效率和最优路径质量的基础上,提供k条最短路选择,是当今导航用户的现实需求之一。有学者提出将双向搜索应用在k

shortestpath问题上的算法,然而仍具有潜在不足之处:完成整个算法流程得到的最终结果并不能保证具有全局最短的性质,并且算法流程不能使得路径长度依次按照从短至长的顺序计算得出结果,需要进行已获得路径的排序。


技术实现要素:

5.本发明是为了解决上述现有技术存在的不足之处,提出一种基于双向dijkstra的城市路网k条最短路径的获取方法,以期能在有效提升大规模路网导航规划的计算效率的同时,满足用户的多路径导航需求。
6.本发明为达到上述发明目的,采用如下技术方案:
7.本发明一种基于双向dijkstra的城市路网k条最短路径的获取方法的特点是按如下步骤进行:
8.步骤1:定义参数并初始化:
9.获取实时道路网络数据并得到城市路网图g=(v,a),v表示交叉口集合,且v={v1,v2,v3,...,v
q
,...,v
q
},设城市路网图g中需要规划的起点交叉口为v
s
∈v,终点交叉口为v
t
∈v,v
q
表示第q个交叉口,且v
q
=(d
q
,v
q,pre
,v
q,root
),其中,v
q,root
表示第q个交叉口v
q
的所在路径的根交叉口节点,v
q,root
∈{v
s
,v
t
},d
q
表示从根交叉口节点v
q,root
到达第q个交叉口v
q
的途经距离,v
q,pre
表示第q个交叉口v
q
的前驱交叉口节点,v
q,pre
∈v,q=1,2,3...q,q表示交叉口的总数,a表示交叉口之间的有向路段集合,且a={a
ij
=(v
i
,v
j
)|i,j=1,2,...q},(v
i
,v
j
)表示第i个交叉口v
i
到第j个交叉口v
j
之间的路段,令ω
i,j
为路段(v
i
,v
j
)的权值;
10.定义叶子交叉口节点为双向搜索过程中,由根交叉口节点探索出的路径树结构中度为“1”的节点;
11.定义当前搜索次数为t,并定义d
f,t
、d
b,t
分别为用于记录当前第t次搜索的路径树
结构中,从前向和后向搜索的各叶子交叉口节点的集合;
12.定义集合用于记录所有叶子交叉口节点中离自身的根节点距离值最小所对应的叶子交叉口节点;
13.定义双向搜索过程中叶子交汇交叉口节点集用于记录在当前第t次搜索下所有能够双向交汇的叶子交叉口节点;将叶子交汇交叉口节点集中对应的节点组成叶子交汇交叉口节点对并存入集合p中,用于存储所有产生的连通路径;
14.定义存储路径树结构中新增的一个叶子交叉口节点v
i
所在路径的前驱交叉口节点的列表为r(v
i
);
15.确定所需最短路径条数为k,定义当前最短路径条数为k,并初始化k=0,第k条最短路径的路程记为初始化起点交叉口节点终点交叉口节点
16.初始化t=1;并将起点交叉口v
s
加入当前第t次前向搜索的集合d
f,t
,将终点交叉口v
t
加入当前第t次后向搜索的集合d
b,t

17.步骤2:找出d
f,t
、d
b,t
中途经距离值最小的叶子交叉口节点v
min
,从而得到当前第t次搜索的集合再随机选择集合中的叶子交叉口节点中根交叉口节点相同的所有叶子交叉口节点,并依次将第t次搜索时根交叉口节点相同的叶子交叉口节点,作为第t 1次所要搜索得到的叶子交叉口节点的前驱交叉口节点放入集合
18.若根交叉口节点为起点交叉口v
s
,则从有向路段集合a中依次找出前驱交叉口节点集合中每个前驱交叉口节点所能到达的邻接交叉口节点;其中,记任意一个前驱交叉口节点v
min
所能到达的一个邻接交叉口节点为v
j
,转步骤2.1;
19.若根交叉口节点为终点交叉口v
t
,则从有向路段集合a中依次找出前驱交叉口节点集合中能够达到每个前驱交叉口节点的邻接交叉口节点;其中,记达到任意一个前驱交叉口节点v
min
的一个邻接交叉口节点为v
j
,转步骤2.1;
20.步骤2.1:判断每个邻接交叉口节点是否符合要求;
21.如果寻找的路径允许包含环路,且根交叉口节点为起点交叉口v
s
,则转步骤2.3;
22.如果寻找的路径允许包含环路,且根交叉口节点为终点交叉口v
t
,则转步骤2.4;
23.如果寻找的路径不允许包含环路,则先将邻接交叉口节点v
j
的前驱交叉口节点v
min
加入列表r(v
j
)中,然后从前驱交叉口节点v
min
开始向根交叉口节点进行回溯,且每回溯一个前驱交叉口节点就加入列表r(v
j
)中,若r(v
j
)中存在与邻接交叉口节点v
j
相同的前驱交叉口节点,则表示v
j
的引入使得环路存在,直接将邻接交叉口节点v
j
舍弃,继续判断下一个邻接交叉口节点,否则,表示无环路,并执行步骤2.2;
24.步骤2.2:当根交叉口节点为起点交叉口v
s
,则转步骤2.3;当根交叉口节点为终点交叉口v
t
,则转步骤2.4;
25.步骤2.3:将邻接交叉口节点记为v
j
=(d
vmin
ω
min,j
,v
min
,v
s
),然后更新集合d
f,t 1
=d
f,t
∪{v
j
};其中,ω
min,j
表示前驱交叉口节点v
min
到其邻接交叉口节点v
j
的路段权值,d
vmin
表示前驱交叉口节点v
min
到其根交叉口节点的途经距离;
26.当找完前驱交叉口节点v
min
的所有邻接交叉口节点并完成判断后,从d
f,t
中将相应的前驱交叉口节点v
min
删除,更新d
f,t 1
=d
f,t
\{v
min
};
27.当找完所有前驱交叉口节点的邻接交叉口节点后,将t 1赋值给t后,执行步骤3;
28.步骤2.4:将邻接交叉口节点记为v
j
=(d
min
ω
j,min
,v
min
,v
t
),更新集合d
b,t 1
=d
b,t
∪{v
j
};其中,ω
j,min
表示v
min
的邻接交叉口节点v
j
到前驱交叉口节点v
min
的路段权值,表示前驱交叉口节点v
min
到它的根交叉口节点的途经距离;
29.当找完前驱交叉口节点v
min
的所有邻接交叉口节点并完成判断后,从d
b,t
中将相应的前驱交叉口节点v
min
删除,更新d
b,t 1
=d
b,t
\{v
min
};
30.当找完所有前驱交叉口节点的邻接交叉口节点后,将t 1赋值给t后,执行步骤3;
31.步骤3:运算若即表示存在一组或多组交汇交叉口节点,则将其中每一组交汇交叉口节点所对应的前向搜索出的叶子交叉口节点v
i
=(d
i
,v
i,pre
,v
s
)和后向搜索出的叶子交叉口节点v
i

=(d
i

,v
i

,pre
,v
t
)组成交汇交叉口点对(v
i
,v
i

)并加入集合p,且(v
i
,v
i

)路径长度d
i,len
=d
i
d
i

,并转步骤4;若即表示没有新的交汇交叉口点对构成新路径,并返回步骤2顺序执行;
32.步骤4:计算第t次双向搜索的最短路判断条件其中,表示第t次前向搜索的叶子交叉口节点集合d
f,t
中所有叶子交叉口节点的最小途经距离d,即中所有叶子交叉口节点的最小途经距离d,即表示第t次后向搜索的叶子交叉口节点集合d
b,t
中所有叶子交叉口节点的最小途经距离d,即
33.步骤5:取集合p中所有交汇交叉口节点对的路径长度的点对加入集合中,然后将集合p中点对的路径长度d
i,len
从小到大进行排序,并分别作为第k 1条至第k n条最短路,其中,n=集合的长度将集合排序后的路径长度d
i,len
依次赋值给至并分别从路径长度所对应的交汇交叉口点对开始分别前向回溯至v
s
、后向回溯至v
t
,并将回溯过程中的所有交叉口节点连接形成为一条完整路径,最后从集合p中删除集合中的交汇交叉口点对,从而更新集合p,更新k为k n;转步骤6;若找不到的点对,则返回步骤2顺序执行;
34.步骤6:判断k是否大于等于k,若是,则表示已获得k条最短路,并终止路径搜索,从前k条最短路中取前k条最短路最为结果输出,否则,继续判断p为空,且第t次搜索过程中集合中的每个节点均找不到其他邻接交叉口节点是否成立,若成立,则表示只能获得k条最短路,并终止路径搜索;否则,返回步骤2顺序执行。
35.与现有技术相比,本发明的有益效果在于:
36.1、本发明能在不改变道路网络结构以及不通过枚举方法的基础上引入双向搜索算法,利用双向搜索的思想获取城市路网任意起讫点间的k条最短路,二者巧妙结合使算法能够高效处理大规模路网图,节省了资源的同时保证了效率,避免了不必要的时间损耗,为
大型路网计算繁杂的难题提供获取k条最短路的优化方法,实质性地提高了计算效率和质量,能够缓解导航规划的计算负担,给予导航使用者更多元的选择,满足了用户现实需求。
37.2、常用的最短路算法有dijkstra,因单向搜索的本质特性,在应对复杂大型图时的计算效率不高,在单向搜索的基础上求解k最短路问题往往需要“重构网络”,这将会使得效率急剧降低。本发明考虑分别从起点和终点出发进行双向交替搜索,以效率更高的双向搜索为基础寻找新的k最短路求解优化方法,为解决k

shortestpath问题提供了新的解决方案。
38.3、本发明在获取k条最短路的方法中,没有选择改变道路网络结构,而是巧妙借用双向搜索中的交汇成路的思想,以及路径树中临时最小值这一路径选择的重要判断因素,使得一条完整路径的选择是通过间断计算当前已覆盖的两个搜索方向中的最小距离值之和来动态决定的,实现了能够按顺序依次获得k条路径,并且避免了枚举的做法,极大减少了计算工作量。
39.4、本发明分别从起点和终点出发进行双向交替搜索,由于该双向搜索算法的特性,可以同时扩展符合条件的叶子交叉口节点,所以本发明为多线程条件下的并行化计算提供了可能,为后续的城市路网导航规划工作中并行双向搜索奠定基础,并且便于与并行图划分技术相配合,为规划效率提速。
40.5、本发明在过程中可以根据使用者的要求,可以分别求解允许存在环路或不允许存在环路的k最短路径的情况,给予出行者更多行程选择。
附图说明
41.图1为本发明的流程图;
42.图2为本发明简单城市路网图;
43.图3为本发明初始化的路径树结构;
44.图4为本发明第t=2次探索得到的路径树结构;
45.图5为本发明第t=4次探索时处理交汇交叉口节点对以及对应路径长度信息的示意图;
46.图6为本发明第t=9次搜索时同时获得多条最短路的示意图;
47.图7为本发明的k条最短路获取结果图。
具体实施方式
48.本实施例中,从双向搜索算法求解k条最短路的想法出发,提出一种基于双向dijkstra的城市路网k条最短路径的获取方法,是在导航规划的k最短路问题中加入双向dijkstra搜索方法来处理,具体流程如图1所示,按如下步骤进行:
49.步骤1:定义参数并初始化:
50.获取实时道路网络数据并得到城市路网图g=(v,a),以图2为简易路网图为例,v表示交叉口集合,且v={v1,v2,v3,...,v
q
,...,v
q
},设城市路网图g中需要规划的起点交叉口为v
s
∈v,终点交叉口为v
t
∈v,v
q
表示第q个交叉口,且v
q
=(d
q
,v
q,pre
,v
q,root
),其中,v
q,root
表示第q个交叉口v
q
的所在路径的根交叉口节点,v
q,root
∈{v
s
,v
t
},d
q
表示从根交叉口节点v
q,root
到达第q个交叉口v
q
的途经距离,v
q,pre
表示第q个交叉口v
q
的前驱交叉口节点,v
q,pre

v,q=1,2,3...q,q表示交叉口的总数,由于路径树图能够表示前驱交叉口节点和根交叉口节点,所以实施例的路径树结构图中都只标记出交叉口节点的途经距离d值,并且为了便于区别清楚相同编号的节点,将用上标'来区分,a表示交叉口之间的有向路段集合,且a={a
ij
=(v
i
,v
j
)|i,j=1,2,...q},(v
i
,v
j
)表示第i个交叉口v
i
到第j个交叉口v
j
之间的路段,令ω
i,j
为路段(v
i
,v
j
)的权值;
51.定义叶子交叉口节点为双向搜索过程中,由根交叉口节点探索出的路径树结构中度为“1”的节点;
52.定义当前搜索次数为t,并定义d
f,t
、d
b,t
分别为用于记录当前第t次搜索的路径树结构中,从前向和后向搜索的各叶子交叉口节点的集合,为了简便,实施例的路径树从v
s
出发的一侧的叶子交叉口节点放在d
f,t
,反之放在d
b,t
,不再做额外标记;
53.定义集合用于记录叶子交叉口节点中距离该叶子交叉口节点的根节点距离最小所对应的叶子交叉口节点;
54.定义双向搜索过程中叶子交汇交叉口节点集用于记录在当前第t次搜索下所有能够双向交汇的叶子交叉口节点;将叶子交汇交叉口节点集中对应的节点组成叶子交汇交叉口节点对并存入集合p中,用于存储所有产生的连通路径,只需记录通过交汇获得的完整路径,而不需考虑从前向探至v
s
或从后向探至v
t
而形成的完整路径,因为后者一定在前者的情况中被更早地确定;
55.定义存储路径树结构中新增的一个叶子交叉口节点v
i
所在路径的前驱交叉口节点的列表为r(v
i
);
56.确定所需最短路径条数为k,定义当前最短路径条数为k,并初始化k=0,第k条最短路径的路程记为初始化起点交叉口节点终点交叉口节点
57.初始化t=1;并将起点交叉口v
s
加入当前第t次前向搜索的集合d
f,t
,将终点交叉口v
t
加入当前第t次后向搜索的集合d
b,t
,初始化如图3所示;
58.步骤2:找出d
f,t
、d
b,t
中途经距离值最小的叶子交叉口节点v
min
,从而得到当前第t次搜索的集合再随机选择集合中的叶子交叉口节点中根交叉口节点相同的所有叶子交叉口节点,并依次将第t次搜索时根交叉口节点相同的叶子交叉口节点,作为第t 1次所要搜索得到的叶子交叉口节点的前驱交叉口节点放入集合如图3所示,其中由于中同时含有不同根交叉口节点属性的叶子交叉口节点,随机取根交叉口节点为v
s
的那些叶子交叉口节点,这样就得到第t=1次需要向外扩展的交叉口节点;
59.若根交叉口节点为起点交叉口v
s
,则从有向路段集合a中依次找出前驱交叉口节点集合中每个前驱交叉口节点所能到达的邻接交叉口节点;其中,记任意一个前驱交叉口节点v
min
所能到达的一个邻接交叉口节点为v
j
,转步骤2.1;
60.若根交叉口节点为终点交叉口v
t
,则从有向路段集合a中依次找出前驱交叉口节点集合中能够达到每个前驱交叉口节点的邻接交叉口节点;其中,记达到任意一个前驱
交叉口节点v
min
的一个邻接交叉口节点为v
j
,转步骤2.1;
61.步骤2.1:判断每个邻接交叉口节点是否符合要求,本算例以允许包含环路的情况顺序进行;
62.如果寻找的路径允许包含环路,且根交叉口节点为起点交叉口v
s
,则转步骤2.3;
63.如果寻找的路径允许包含环路,且根交叉口节点为终点交叉口v
t
,则转步骤2.4;
64.如果寻找的路径不允许包含环路,则先将邻接交叉口节点v
j
的前驱交叉口节点v
min
加入列表r(v
j
)中,然后从前驱交叉口节点v
min
开始向根交叉口节点进行回溯,且每回溯一个前驱交叉口节点就加入列表r(v
j
)中,若r(v
j
)中存在与邻接交叉口节点v
j
相同的前驱交叉口节点,则表示v
j
的引入使得环路存在,直接将邻接交叉口节点v
j
舍弃,即对于该邻接交叉口节点将不执行后面全部步骤,继续判断下一个邻接交叉口节点,否则,表示无环路,并执行步骤2.2;
65.步骤2.2:当根交叉口节点为起点交叉口v
s
,则转步骤2.3;当根交叉口节点为终点交叉口v
t
,则转步骤2.4;
66.步骤2.3:承接上方步骤2的流程,将会进入步骤2.3,以本步骤中的扩展规则将会得到第t=2次搜索的路径树,新扩展出的叶子交叉口节点的连边用粗黑边表示,见图4。将邻接交叉口节点记为v
j
=(d
vmin
ω
min,j
,v
min
,v
s
),然后更新集合d
f,t 1
=d
f,t
∪{v
j
};其中,ω
min,j
表示前驱交叉口节点v
min
到它的邻接交叉口节点v
j
的路段权值,d
vmin
表示前驱交叉口节点v
min
到它的根交叉口节点的途经距离;
67.当找完前驱交叉口节点v
min
的所有邻接交叉口节点并完成判断后,从d
f,t
中将相应的前驱交叉口节点v
min
删除,更新d
f,t 1
=d
f,t
\{v
min
};
68.当找完所有前驱交叉口节点的邻接交叉口节点后,将t 1赋值给t后,执行步骤3;
69.步骤2.4:将邻接交叉口节点记为v
j
=(d
min
ω
j,min
,v
min
,v
t
),更新集合d
b,t 1
=d
b,t
∪{v
j
};ω
j,min
表示v
min
的邻接交叉口节点v
j
到前驱交叉口节点v
min
的路段权值,表示前驱交叉口节点v
min
到它的根交叉口节点的途经距离;
70.当找完前驱交叉口节点v
min
的所有邻接交叉口节点并完成判断后,从d
b,t
中将相应的前驱交叉口节点v
min
删除,更新d
b,t 1
=d
b,t
\{v
min
};
71.当找完所有前驱交叉口节点的邻接交叉口节点后,将t 1赋值给t后,执行步骤3;
72.步骤3:运算若即表示存在一组或多组交汇交叉口节点,则将其中每一组交汇交叉口节点所对应的前向搜索出的叶子交叉口节点v
i
=(d
i
,v
i,pre
,v
s
)和后向搜索出的叶子交叉口节点v
i

=(d
i

,v
i

,pre
,v
t
)组成交汇交叉口点对(v
i
,v
i

)并加入集合p,且(v
i
,v
i

)路径长度d
i,len
=d
i
d
i

,如图5所示,可以交汇的交叉口节点在图中以虚线连接标出,因此将中叶子交汇交叉口节点进行匹配成对,即得到(v1,v1)和(v2,v2),然后计算(v1,v1)构成路径的长度为d
len
=9 9=18,(v2,v2)构成路径的长度为d
len
=15 10=25,以路径长度作为节点对的自有属性值,并转步骤4;若即表示没有新的交汇交叉口点对构成新路径,并返回步骤2顺序执行;
73.步骤4:计算第t次双向搜索的最短路判断条件保证了每次交汇形
成而被加入集合p中的路径一定大于或等于而根据选择并纳入k最短路的必定小于等于因此成为整个算法能够顺序且不遗漏路径规划结果的关键所在。由图5可以计算出第t=4次搜索时,其中,表示第t次前向搜索的叶子交叉口节点集合d
f,t
中所有叶子交叉口节点的最小途经距离d,即中所有叶子交叉口节点的最小途经距离d,即表示第t次后向搜索的叶子交叉口节点集合d
b,t
中所有叶子交叉口节点的最小途经距离d,即
74.步骤5:取集合p中所有交汇交叉口节点对的路径长度的点对加入集合中,然后将集合p中点对的路径长度d
i,len
从小到大进行排序,分别作为第k 1条至第k n条最短路,其中n=集合的长度将排序后的路径长度d
i,len
赋值给至其中中节点对构成的路径的长度一定大于之前已经确定的最短路径长度,且一定小于之后找到的最短路路径长度,同时不会遗漏可能存在的某一条最短路,所以可以将满足小于等于的n条路径一次性确定为n条最短路,这样加速了k最短路的获取速度,并分别从路径长度所对应的交汇交叉口点对开始分别前向回溯至v
s
、后向回溯至v
t
,并将回溯过程中的所有交叉口节点连接形成为一条完整路径,最后从集合p中删除集合中的交汇交叉口点对,图5中由于(v1,v1)的因此这一步确定了最短路径回溯得到路径为v
s

v1→
v3→
v
t
;在图6中,展示了第t=9次探索时,可以一次性将两条路径确定为最短路,由于此时p集合中(v2,v2)的(v1',v
1”)的按从小到大排序后,即可确定第4短路回溯得到路径为v
s

v2→
v3→
v
t
,第5短路回溯得到路径为v
s

v1→
v3→
v1→
v3→
v1→
v3→
v
t
。从而更新集合p,更新k为k n,转步骤6;若找不到的点对,则返回步骤2顺序执行;
75.步骤6:判断k是否大于等于k,若是,则表示已获得k条最短路,并终止路径搜索,从前k条最短路中取前k条最短路最为结果输出,否则,继续判断p为空,且第t次搜索过程中集合中的每个节点均找不到其他邻接交叉口节点是否成立,若成立,则表示只能获得k条最短路,并终止路径搜索;否则,返回步骤2顺序执行。图7为当出行者需要5条最短路且允许路径包含环路时,获得的路径规划结果。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献