Intro To Iterative Deepening
Intro To Iterative Deepening
Motivations
BFS & A*
good for optimality bad on memory, O(bd) solutions not guaranteed optimal: dives and misses good nodes good for memory O(bd)
DFS
Iterative Deepening refers to a method that tries to combine the best of the above
Depth-Limited Search
Simply put an upper limit on the depth (cost) of paths allowed Motivation:
prevents search diving into deep solutions might already have a solution of known depth (cost), but are looking for a shallower (cheaper) one
Depth-Limited Search
Only add nodes to the queue if their depth does not exceed the bound
Trees: Depth-Limited
d= 0 d= 1
F B J C G
d= 2
A D
d= 4
d= 3
Follow the BFS pattern of search all nodes of depth d before depth d+1 But do the search at depth d using Depth-Limited-DFS Schematically: IDS: k=0; while ( not success && k < depth of tree ) { Depth-Limited-DFS ( k ); k++ }
Properties of IDS
Memory Usage
Time Usage:
Worse than BFS because nodes at each level will be expanded again at each later level BUT often is not much worse because almost all the effort is at the last level anyway, because trees are leaf heavy Typically might be at most a factor two worse
Memory Usage of A*
IDA*
Combine A* and iterative deepening f is the estimate of total path cost for start to goal IDA*:
Greatly reduces memory usage Can repeat far too much work, and so be slow
Impose a limit on f Use DFS to search within the f limit Iteratively relax the limit
Summary
Algorithm IDS:
IDS : BFS plus DFS for tree search the basis of state of the art complete & optimal algorithms
Algorithm IDA*:
Summary
BFS & A*: good for optimality, but not memory DFS: good for memory O(bd), but not optimality Iterative Deepening refers to
a broad approach used for general search, with general aim to combine optimality with low memory usage of DFS
know about the motivations and ideas and the search pattern do not need details of how to code IDA*
Questions?