def test_lm_cut_mark_single_goal(): task = _get_intermediate_task() heuristic = LmCutHeuristic(task) heuristic.compute_hmax(task.initial_state) heuristic.compute_goal_plateau(heuristic.explicit_goal) assert {f.name for f in heuristic.goal_plateau} == {heuristic.explicit_goal, "g"}
def test_lm_cut_compute_single_cut(): task1 = _get_intermediate_task_two_paths() heuristic = LmCutHeuristic(task1) heuristic.compute_hmax(task1.initial_state) heuristic.goal_plateau.clear() heuristic.compute_goal_plateau(heuristic.explicit_goal) cut = heuristic.find_cut(task1.initial_state) assert [op.name for op in cut] == ["op4"]
def test_lm_cut_mark_multiple_goal(): task = _get_intermediate_task() heuristic = LmCutHeuristic(task) heuristic.compute_hmax(task.initial_state) # artificially alter operator costs to get a larger goal plateau heuristic.relaxed_ops["op4"].cost = 0.0 heuristic.compute_goal_plateau(heuristic.explicit_goal) assert {f.name for f in heuristic.goal_plateau} in [ {heuristic.explicit_goal, "v4", "g"}, {heuristic.explicit_goal, "v5", "g"}, ]
def test_lm_cut_at_goal(): task = _get_simple_task_at_goal() heuristic = LmCutHeuristic(task) h_val = heuristic(make_root_node(task.initial_state)) heuristic.compute_goal_plateau(heuristic.explicit_goal) assert h_val == 0.0