IDA*
   HOME

TheInfoList



OR:

Iterative deepening A* (IDA*) is a graph traversal and path search algorithm that can find the
shortest path In graph theory, the shortest path problem is the problem of finding a path between two vertices (or nodes) in a graph such that the sum of the weights of its constituent edges is minimized. The problem of finding the shortest path between ...
between a designated start node and any member of a set of goal nodes in a weighted graph. It is a variant of
iterative deepening depth-first search In computer science, iterative deepening search or more specifically iterative deepening depth-first search (IDS or IDDFS) is a state space/graph search strategy in which a depth-limited version of depth-first search is run repeatedly with incr ...
that borrows the idea to use a heuristic function to evaluate the remaining cost to get to the goal from the A* search algorithm. Since it is a depth-first search algorithm, its memory usage is lower than in A*, but unlike ordinary iterative deepening search, it concentrates on exploring the most promising nodes and thus does not go to the same depth everywhere in the search tree. Unlike A*, IDA* does not utilize
dynamic programming Dynamic programming is both a mathematical optimization method and a computer programming method. The method was developed by Richard Bellman in the 1950s and has found applications in numerous fields, from aerospace engineering to economics. ...
and therefore often ends up exploring the same nodes many times. While the standard iterative deepening depth-first search uses search depth as the cutoff for each iteration, the IDA* uses the more informative f(n) = g(n) + h(n), where g(n) is the cost to travel from the root to node n and h(n) is a problem-specific heuristic estimate of the cost to travel from n to the goal. The algorithm was first described by Richard Korf in 1985.


Description

Iterative-deepening-A* works as follows: at each iteration, perform a depth-first search, cutting off a branch when its total cost f(n) = g(n) + h(n) exceeds a given ''threshold''. This threshold starts at the estimate of the cost at the initial state, and increases for each iteration of the algorithm. At each iteration, the threshold used for the next iteration is the minimum cost of all values that exceeded the current threshold. As in A*, the heuristic has to have particular properties to guarantee optimality (shortest paths). See
Properties Property is the ownership of land, resources, improvements or other tangible objects, or intellectual property. Property may also refer to: Mathematics * Property (mathematics) Philosophy and science * Property (philosophy), in philosophy an ...
below.


Pseudocode

path ''current search path (acts like a stack)'' node ''current node'' ''(last node in current path)'' g ''the cost to reach current node'' f ''estimated cost of the cheapest path (root..node..goal)'' h(node) ''estimated cost of the cheapest path (node..goal)'' cost(node, succ) ''step cost function'' is_goal(node) ''goal test'' successors(node) ''node expanding function, expand nodes ordered by g + h(node)'' ida_star(root) ''return either NOT_FOUND or a pair with the best path and its cost'' procedure ida_star(root) bound := h(root) path := root.html" ;"title="span style="color:Green;">root">span style="color:Green;">root loop t := search(path, 0, bound) if t = FOUND then return (path, bound) if t = ∞ then return NOT_FOUND bound := t end loop end procedure function search(path, g, bound) node := path.last f := g + h(node) if f > bound then return f if is_goal(node) then return FOUND min := ∞ for succ in successors(node) do if succ not in path then path.push(succ) t := search(path, g + cost(node, succ), bound) if t = FOUND then return FOUND if t < min then min := t path.pop() end if end for return min end function


Properties

Like A*, IDA* is guaranteed to find the shortest path leading from the given start node to any goal node in the problem graph, if the heuristic function is admissible, that is :h(n) \le h^*(n) for all nodes , where is the true cost of the shortest path from to the nearest goal (the "perfect heuristic"). IDA* is beneficial when the problem is memory constrained. A* search keeps a large queue of unexplored nodes that can quickly fill up memory. By contrast, because IDA* does not remember any node except the ones on the current path, it requires an amount of memory that is only linear in the length of the solution that it constructs. Its time complexity is analyzed by Korf ''et al.'' under the assumption that the heuristic cost estimate is ''consistent'', meaning that :h(n) \le \mathrm(n, n') + h(n') for all nodes and all neighbors of ; they conclude that compared to a brute-force tree search over an exponential-sized problem, IDA* achieves a smaller search depth (by a constant factor), but not a smaller branching factor. Recursive best-first search is another memory-constrained version of A* search that can be faster in practice than IDA*, since it requires less regenerating of nodes.


Applications

Applications of IDA* are found in such problems as
planning Planning is the process of thinking regarding the activities required to achieve a desired goal. Planning is based on foresight, the fundamental capacity for mental time travel. The evolution of forethought, the capacity to think ahead, is c ...
.


References

{{DEFAULTSORT:Ida Graph algorithms Routing algorithms Search algorithms Game artificial intelligence Articles with example pseudocode