Transcript External A*
External A*
Stefan Edelkamp, Shahid Jabbar (ich)
University of Dortmund, Germany
and
Stefan Schrödl (DaimlerChrysler, CA)
A* Algorithm
A.k.a Goal-directed dijkstra
A heuristic estimate is used to guide the
search.
E.g. Straight line distance from the current
node to the goal in case of a graph with a
geometric layout.
Reweighting:
w’(u,v) = w(u,v) – h(u) + h(v)
Shahid Jabbar (Dortmund)
External A*
2
Problems (It’s a big big world for a small small memory)
A* needs to store all the states during exploration.
A* generates large amount of duplicates that can be
removed using an internal hash table – only if it can fit in
the main memory.
A* do not exhibit any locality of expansion. For large state
spaces, standard virtual memory management can result in
excessive page faults.
Shahid Jabbar (Dortmund)
External A*
3
A bit of History
Munagala and Ranade:
Generated states flushed to the disk for every BFS level.
No hash table.
Duplicates are removed by sorting the nodes according
to the indices and doing an scan and compaction phase.
Before expanding a layer t, the nodes in the layer t-1
and t-2 are subtracted from t.
O(|V| + sort(|V| + |E|)) I/Os.
Shahid Jabbar (Dortmund)
External A*
4
A bit of History
(contd…)
Further improved by Mehlhorn & Meyer to
O(√(|V| ∙ scan(|V| + |E|)) + sort(|V| + |E|)) I/Os.
Korf presented External BFS for implicit graphs with
the name Delayed duplicate detection for frontier
search.
Keep a level in the main memory until it exceeds a
certain bound.
If it does, sort it and flush to the disk.
When a level is finished, merge the presorted buffers to
get a sorted file and remove the duplicates
Shahid Jabbar (Dortmund)
External A*
5
Restriction on the domain
Implicit state space – generated on the fly
–> no adjacency list
Unweighted
Undirected
Consistent Heuristic
Shahid Jabbar (Dortmund)
External A*
6
Take a closer look
Implicit, unweighted,
undirected graphs
1
2
3
4
1
2
g
Shahid Jabbar (Dortmund)
0
Ah ha! It’s
5a Bucket
6
of states
0
Consistent
heurisitc
estimates.
=> ∆h ={-1,0,1}
h
3
4
5
External A*
7
Bucket
A Bucket is a set of states, residing on the disk, having the
same (g, h) value,
Where, g = number of transitions needed to transform the
initial state to the states of the bucket,
and h = Estimated distance of the bucket’s state to the goal
No state is inserted again in a bucket that is expanded
If Active (being read or written), represented internally by
a small buffer.
Insert state
Flush when full
Buffer in internal memory
File on disk
Shahid Jabbar (Dortmund)
External A*
8
External A*
Buckets represent temporal
locality – cache efficient
order of expansion.
If we store the states in the
same bucket together we
can exploit the spatial
locality.
Munagala and Ranade’s BFS
and Korf’s delayed duplicate
detection for implicit graphs.
Shahid Jabbar (Dortmund)
External A*
External A*
9
External A* - pseudocode
Procedure External A*
Bucket(0, h(I)) {I}
fmin h(I)
while (fmin ≠ ∞)
g min{i | Bucket(i, fmin − i) ≠ }
while (gmin ≤ fmin)
h fmin − g
Bucket(g, h) remove duplicates from Bucket(g, h)
Bucket(g, h) Bucket(g, h) \
(Bucket(g − 1, h) U Bucket(g − 2, h)) // Subtraction
A(fmin),A(fmin + 1),A(fmin + 2) N(Bucket(g, h)) // Generate Neighbours
Bucket(g + 1, h + 1) A(fmin + 2)
Bucket(g + 1, h)
A(fmin + 1) U Bucket(g + 1, h)
Bucket(g + 1, h − 1) A(fmin) U Bucket(g + 1, h − 1)
gg+1
fmin min{i + j > fmin | Bucket(i, j) ≠ } U {∞}
Shahid Jabbar (Dortmund)
External A*
10
Complexity Analysis
Internal A* => Each edge is
looked at most once.
Duplicates Removal:
Sorting the green bucket
having one state for every
edge from the 3 black
buckets.
Scanning and compaction.
O(sort(|E|))
Subtraction:
Removing states of orange
buckets (duplicates free)
from the green one.
O(scan(|V|) + scan(|E|))
Shahid Jabbar (Dortmund)
External A*
11
I/O Performance of External A*
Theorem: The complexity of External A* in
an implicit unweighted and undirected
graph with a consistent estimate is
bounded by O(sort(|E|) + scan(|V|)) I/Os.
Shahid Jabbar (Dortmund)
External A*
12
15-Puzzle
1
3
2
4
5
6
7
8
15
10
12
13
14
Shahid Jabbar (Dortmund)
1
2
3
4
5
6
7
11
8
9
10
11
9
12
13
14
15
External A*
13
Experimental Results – Test Instances
S. No. Instance
Init.
Opt.
Estim Sol.
ate
Length
1
0 2 1 3 5 4 6 7 8 9 10 11 12 13 14 15
4
16
2
0 1 2 3 5 4 7 6 8 9 10 11 12 13 14 15
4
24
3
0 2 1 3 5 4 7 6 8 9 13 11 12 10 14 15
10
30
4 (12) 14 1 9 6 4 8 12 5 7 2 3 0 10 11 13 15
35
45
5 (16) 1 3 2 5 10 9 15 6 8 14 13 11 12 4 7 0
24
42
6 (14) 7 6 8 1 11 5 14 10 3 4 9 13 15 2 0 12
41
59
7 (60) 11 14 13 1 2 3 12 4 15 7 9 5 10 6 8 0
48
66
8 (88) 15 2 12 11 14 13 9 5 1 3 8 7 0 10 6 4
43
65
Shahid Jabbar (Dortmund)
External A*
14
Test Run – Generated states
Shahid Jabbar (Dortmund)
External A*
15
Test Run - Duplicates
Shahid Jabbar (Dortmund)
External A*
16
Exp. Results – Generated nodes
S.No.
IDA*
External A*
% gain Space
(GB)
4
546,344
493,990
9.58
0.003
5
17,984,051
5,180,710
71.2
0.039
6
1,369,596,778
297,583,236
78.3
2.2
7
3,337,690,331
2,269,240,000
32
16.91
8
6,009,130,748
2,956, 384,330
50.8
22
Shahid Jabbar (Dortmund)
External A*
17
Cache-Efficient Behaviour:
Internal Buffers
File on disk
CPU
Shahid Jabbar (Dortmund)
External A*
18
Conclusion
A* for secondary storage with an I/O complexity
of O(sort(|E|) + scan(|V|)) .
Given that Delayed Duplication Detection has to
be performed, the bound is I/O optimal.
File-based priority queue.
Hash table replaced by Delayed Duplicate
Detection.
Successfully implemented to solve Korf’s Largest
instance in secondary memory.
In case of non-uniformly weighted graphs with
small integer weights in {1, …, C}.
O(sort(|E|) + C ∙ scan(|V|))
Shahid Jabbar (Dortmund)
External A*
19