routing

advertisement
Route Planning
Vehicle navigation systems,
Dijkstra’s algorithm, bidirectional
search, transit-node routing
Vehicle navigation systems
• Main tasks:
– positioning: locating the vehicle using GPS and/or
dead reckoning with distance and heading sensors
– routing: determining a good route from a source to a
destination
– guidance: providing visual and audio feedback on the
route
Positioning
• GPS: works well, except in “urban
canyons”
• Urban canyons can give gross
errors in position due to
reflections from buildings
• Urban canyons can give loss of
signal
• Especially problematic when
driving out of parking garages
Positioning
• Dead reckoning: determine position from last known
position using distance and heading sensors (relative
position)
• Use map matching: the shape of the route taken and
where it matches on the map, to correct dead reckoning
Guiding
• Top view, perspective view, overview
• Schematic information on exit lanes
• Spoken directions
Largely an HCI issue
Routing
• Based on Dijkstra’s shortest path algorithm
• Many improvements to deal with huge networks
• Improvements use preprocessing
Routing
• Based on Dijkstra’s shortest path algorithm
• Many improvements to deal with huge networks
• Improvements use preprocessing
Routing
• Based on Dijkstra’s shortest path algorithm
• Many improvements to deal with huge networks
• Improvements use preprocessing
Bidirectional
search (from
Bayreuth and
from Erlangen)
Routing
• Based on Dijkstra’s shortest path algorithm
• Many improvements to deal with huge networks
• Improvements use preprocessing
Bidirectional
search (from
Bayreuth and
from Erlangen)
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
2
10
9
2
4
6
3
9
7
5
2
6
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges

1

2
10
9
2
0
4

3
9
7
5
6

6

2
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges

1

2
10
9
2
0
4

3
9
7
5
6

6

2
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges

1
10
2
10
9
2
0
4
6

3
9
7
5
5
6

2
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges

1
10
2
10
9
2
0
4
6

3
9
7
5
5
6

2
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges

1
10
2
10
9
2
0
4
6

3
9
7
5
5
6

2
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
14
8
2
10
9
2
0
4
6
14
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
14
8
2
10
9
2
0
4
6
14
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
14
8
2
10
9
2
0
4
6
14
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
13
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
13
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
13
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
9
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
9
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
9
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
9
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
9
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
9
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
1
9
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a
graph with n nodes and m edges
shortest path tree
1
9
8
2
10
9
2
0
4
6
13
3
9
7
6
5
5
2
7
Routing
• Dijkstra’s algorithm takes O(n + m log m) time for a graph
with n nodes and m edges
–
–
–
–
Every node is handled only once
Its outgoing edges are considered only then
Considering an edge may lower the cost of its destination node
Nodes are stored by distance in a Fibonacci heap (it allows for a
very efficient decrease-value operation)
• Road networks have m = O(n), so it takes O(n log n) time
Routing
• Very fast shortest path queries are needed in vehicle
navigation systems and by Google Maps
• Idea: pre-compute the shortest path for every pair of
nodes and store it in a table
X
much too much storage needed
• Need other ways to answer shortest path queries faster
– Highway hierarchies
– Transit-node routing
Transit-Node Routing
• For a real road network, there exists a relatively small
set of nodes, such that any shortest path of sufficient
length will pass at least one of them
• For the Netherlands, every shortest path of at least 100
km will use a highway, so we can take all highway exits
Highways and other
major roads; every
shortest path in the
original road network
of at least 60 km will
use a highway or
other major road
60 km
Transit-Node Routing
• This relatively small set of nodes is called the set of
transit nodes
• Furthermore, for every node, there are (typically) only
few nodes that are the first transit nodes encountered
when going far enough (access nodes)
• For the USA, the road network has 24 million nodes and
58 million edges
• Transit-node routing uses 10,000 transit nodes and for
each node there are ~10 access nodes
Transit-Node Routing
• Store all distances between two transit nodes in a table
• For every node, store the distance to its ~10 access
nodes in a table
• Use table look-up to determine shortest paths, if the
distance between source and target is large enough
– for the source and target, get the access nodes and distances
– for every pair [access node of source, access node of target],
determine a candidate path length by 3 table look-ups
• If the distance is small, just run Dijkstra bidirectional
V : nodes of the input graph
T : transit nodes chosen
nodes of V
transit nodes
access
node
table/list
transit nodes
i
transit node
table
access nodes of i
Transit-Node Routing
• Trade-off:
many transit nodes: fast query time, large storage
requirements, high preprocessing time
few transit nodes: slower query time, smaller storage
requirements, lower preprocessing time
• Reported (road network USA):
query time: 5 – 63 s
storage: 21 – 244 bytes/node
preprocessing: 59 – 1200 minutes
Transit-Node Routing
• Need (for preprocessing):
– a way to choose transit-nodes
– a way to determine access nodes
– a way to compute the transit node table and access node table
• Need (at query time):
– a way to decide if a query is local ( use Dijkstra)
or not ( use table look-up)
– a way to retrieve the shortest path itself
Choosing transit nodes
• Use grid-based
partition and use
intersections of
the network and
the grid
Choosing transit nodes
• Use grid-based
partition and use
intersections of
the network and
the grid
• Select nodes from
Vinner based on
whether they lie
on some shortest
path from a node
in C to Vouter
outer
inner
C
Choosing transit nodes
•
•
•
•
Consider every center square C
Use 5 x 5 squares to define Vinner
Use 9 x 9 squares to define Vouter
Consider all paths from some node in C to some node
in Vouter
• All nodes of Vinner on such a path will go in the set of
transit nodes (eventually united over all C)
• Run Dijkstra from every node in C until all nodes in
Vouter are settled
Choosing transit nodes
• Given s and t, if they are more than 4 grid cells apart
(horizontally or vertically), their shortest path must
contain a transit node
• This provides an easy test for locality of any query
(later, during query time)
Computing access nodes
• For each transit node u, run Dijkstra until all shortest
paths from u pass another transit node
• Every node v in the shortest path tree from u before
another transit node is reached gets u as one of its
access nodes
u
shortest path
tree from u
v
Computing the tables
• The access node table is automatically computed when
the access nodes are determined
• Distances between “near” transit nodes are also
computed  transit node graph
• Dijkstra on the transit node graph gives the transit node
table
Summary
• Vehicle navigation systems rely on positioning, routing,
and guidance
• Route planning relies on Dijkstra’s algorithm and
techniques to speed up queries, like preprocessing
using the transit nodes idea
Download