Artificial Intelligence A Modern Approach (3rd Edition): Figure 4.11, page 136.
function AND-OR-GRAPH-SEARCH(problem) returns a conditional plan, or failure OR-SEARCH(problem.INITIAL-STATE, problem, []) --------------------------------------------------------------------------------- function OR-SEARCH(state, problem, path) returns a conditional plan, or failure if problem.GOAL-TEST(state) then return the empty plan if state is on path then return failure for each action in problem.ACTIONS(state) do plan <- AND-SEARCH(RESULTS(state, action), problem, [state | path]) if plan != failure then return [action | plan] return failure --------------------------------------------------------------------------------- function AND-SEARCH(states, problem, path) returns a conditional plan, or failure for each si in states do plani <- OR-SEARCH(si, problem, path) if plani = failure then return failure return [if s1 then plan1 else if s2 then plan2 else ... if sn-1 then plann-1 else plann]
Figure 4.11 An algorithm for searching AND-OR graphs generated by nondeterministic environments. It returns a conditional plan that reaches a goal state in all circumstances. (The notation [x | l] refers to the list formed by adding object x to the front of the list l.)
Note: Unfortunately, this class cannot implement the interface Search (core.search.framework.Search) because Search.search() returns a list of Actions to perform, whereas a nondeterministic search must return a Plan.
@author Andrew Brown