Bidirectional Search
   HOME

TheInfoList



OR:

Bidirectional search is a
graph search algorithm In computer science, graph traversal (also known as graph search) refers to the process of visiting (checking and/or updating) each vertex in a graph. Such traversals are classified by the order in which the vertices are visited. Tree traversal ...
that finds a
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 two ...
from an initial vertex to a goal vertex in a directed graph. It runs two simultaneous searches: one forward from the initial state, and one backward from the goal, stopping when the two meet. The reason for this approach is that in many cases it is faster: for instance, in a simplified model of search problem complexity in which both searches expand a
tree In botany, a tree is a perennial plant with an elongated stem, or trunk, usually supporting branches and leaves. In some usages, the definition of a tree may be narrower, e.g., including only woody plants with secondary growth, only ...
with
branching factor In computing, tree data structures, and game theory, the branching factor is the number of children at each node, the outdegree. If this value is not uniform, an ''average branching factor'' can be calculated. For example, in chess, if a "node ...
''b'', and the distance from start to goal is ''d'', each of the two searches has complexity ''O''(''b''''d''/2) (in
Big O notation Big ''O'' notation is a mathematical notation that describes the asymptotic analysis, limiting behavior of a function (mathematics), function when the Argument of a function, argument tends towards a particular value or infinity. Big O is a memb ...
), and the sum of these two search times is much less than the ''O''(''b''''d'') complexity that would result from a single search from the beginning to the goal. Andrew Goldberg and others explained the correct termination conditions for the bidirectional version of
Dijkstra’s Algorithm Dijkstra's algorithm ( ) is an algorithm for finding the shortest paths between nodes in a weighted graph, which may represent, for example, a road network. It was conceived by computer scientist Edsger W. Dijkstra in 1956 and published three y ...
. As in A* search, bi-directional search can be guided by a
heuristic A heuristic or heuristic technique (''problem solving'', '' mental shortcut'', ''rule of thumb'') is any approach to problem solving that employs a pragmatic method that is not fully optimized, perfected, or rationalized, but is nevertheless ...
estimate of the remaining distance to the goal (in the forward tree) or from the start (in the backward tree). Ira Pohl was the first one to design and implement a bi-directional heuristic search algorithm. Search trees emanating from the start and goal nodes failed to meet in the middle of the solution space. The BHFFA algorithm of de Champeaux fixed this defect. A solution found by the uni-directional A* algorithm using an admissible heuristic has a shortest path length; the same property holds for the BHFFA2 bidirectional heuristic version described by de Champeaux . BHFFA2 has, among others, more careful termination conditions than BHFFA.


Description

A Bidirectional Heuristic Search is a
state space search State-space search is a process used in the field of computer science, including artificial intelligence (AI), in which successive configurations or ''states'' of an instance are considered, with the intention of finding a ''goal state'' with the ...
from some state s to another state t, searching from s to t and from t to s simultaneously. It returns a valid list of operators that if applied to s will give us t. While it may seem as though the operators have to be invertible for the reverse search, it is only necessary to be able to find, given any node n, the set of parent nodes of n such that there exists some valid operator from each of the parent nodes to n. This has often been likened to a one-way street in the route-finding domain: it is not necessary to be able to travel down both directions, but it is necessary when standing at the end of the street to determine the beginning of the street as a possible route. Similarly, for those edges that have inverse arcs (i.e. arcs going in both directions) it is not necessary that each direction be of equal cost. The reverse search will always use the inverse cost (i.e. the cost of the arc in the forward direction). More formally, if n is a node with parent p, then k_1(p,n) = k_2(n,p), defined as being the cost from p to n.


Terminology and notation

; b : the
branching factor In computing, tree data structures, and game theory, the branching factor is the number of children at each node, the outdegree. If this value is not uniform, an ''average branching factor'' can be calculated. For example, in chess, if a "node ...
of a search tree ; k(n,m) : the cost associated with moving from node n to node m ; g(n) : the cost from the root to the node n ; h(n) : the heuristic estimate of the distance between the node n and the goal ; s : the start state ; t : the goal state (sometimes g , not to be confused with the function) ; d : the current search direction. By convention, d is equal to 1 for the forward direction and 2 for the backward direction ; d' : the opposite search direction (i.e. d' = 3 - d ) ; \mathrm_d : the search tree in direction d. If d = 1 , the root is s , if d = 2 , the root is t ; \mathrm_d : the leaves of \mathrm_d (sometimes referred to as \mathrm_d ). It is from this set that a node is chosen for expansion. In bidirectional search, these are sometimes called the search 'frontiers' or 'wavefronts', referring to how they appear when a search is represented graphically. In this metaphor, a 'collision' occurs when, during the expansion phase, a node from one wavefront is found to have successors in the opposing wavefront. ; \mathrm_d : the non-leaf nodes of \mathrm_d . This set contains the nodes already visited by the search


Approaches for bidirectional heuristic search

Bidirectional algorithms can be broadly split into three categories: Front-to-Front, Front-to-Back (or Front-to-End), and Perimeter Search. These differ by the function used to calculate the heuristic.


Front-to-back

Front-to-Back algorithms calculate the h value of a node n by using the heuristic estimate between n and the root of the opposite search tree, s or t . Front-to-Back is the most actively researched of the three categories. As of 2004, the current best algorithm (at least in the
Fifteen puzzle The 15 puzzle (also called Gem Puzzle, Boss Puzzle, Game of Fifteen, Mystic Square and more) is a sliding puzzle. It has 15 square tiles numbered 1 to 15 in a frame that is 4 tile positions high and 4 tile positions wide, with one unoccupied pos ...
domain) is the BiMAX-BS*F algorithm.


Front-to-front

Front-to-Front algorithms calculate the value of a node by using the heuristic estimate between and some subset of \mathrm_ . The canonical example is that of the BHFFA (bidirectional heuristic front-to-front algorithm), where the function is defined as the minimum of all heuristic estimates between the current node and the nodes on the opposing front. Or, formally: : h_d(n) = \min_i \left \ where H(n,o) returns an admissible (i.e. not overestimating) heuristic estimate of the distance between nodes and . Front-to-Front suffers from being excessively computationally demanding. Every time a node is put into the open list, its f = g + h value must be calculated. This involves calculating a heuristic estimate from to every node in the opposing set, as described above. The sets increase in size exponentially for all domains with .


References


Further reading

*. {{Graph traversal algorithms Graph algorithms Search algorithms