def test_iterative_deepening_best_first_search(): """ Without heuristic it is basically the same as iterative_deepening_search. (here is the case where we use graph search). """ for goal in range(1,10): p = AnnotatedProblem(EasyProblem(0, extra=goal)) sol = next(iterative_deepening_best_first_search(p, search=graph_search)) assert sol.state == goal assert p.nodes_expanded == sum([i*2 for i in range(1,goal+2)])-2 assert p.goal_tests == sum([i+1 for i in range(1,goal+1)])+1
def test_iterative_deepening_best_first_search(): """ Without heuristic it is basically the same as iterative_deepening_search. (here is the case where we use graph search). """ for goal in range(1, 10): p = AnnotatedProblem(EasyProblem(0, goal)) sol = next(iterative_deepening_best_first_search(p, graph=True)) assert sol.state_node.state == goal assert p.nodes_expanded == sum([i * 2 for i in range(1, goal + 2)]) - 2 assert p.goal_tests == sum([i + 1 for i in range(1, goal + 1)]) + 1
def test_iterative_best_first_tree_search(): """ Test iterative deepening tree search. When there is a perfect heuristic the cost is increased until the heuristic is included, then search proceeds directly to the solution. """ for goal in range(1,10): p = AnnotatedProblem(HeuristicEasyProblem(0, extra=goal)) sol = next(iterative_deepening_best_first_search(p, search=tree_search)) assert sol.state == goal assert p.nodes_expanded == goal*2 assert p.goal_tests == goal+1
def test_iterative_best_first_tree_search(): """ Test iterative deepening tree search. When there is a perfect heuristic the cost is increased until the heuristic is included, then search proceeds directly to the solution. """ for goal in range(1, 10): p = AnnotatedProblem(HeuristicEasyProblem(0, goal)) sol = next(iterative_deepening_best_first_search(p, graph=False)) assert sol.state_node.state == goal assert p.nodes_expanded == goal * 2 assert p.goal_tests == goal + 1