/// <summary> /// Creates and returns the corresponding heuristic for the search engine. /// </summary> /// <param name="problem">Planning problem.</param> /// <returns>Corresponding heuristic for the search engine.</returns> private Planner.Heuristics.IHeuristic GetHeuristic(Planner.IProblem problem) { switch (Heuristic) { case Heuristic.BlindHeuristic: return(new Planner.Heuristics.BlindHeuristic()); case Heuristic.StripsHeuristic: return(new Planner.Heuristics.StripsHeuristic(problem)); case Heuristic.PerfectRelaxationHeuristic: return(new Planner.Heuristics.PerfectRelaxationHeuristic(problem)); case Heuristic.AdditiveRelaxationHeuristic: return(new Planner.Heuristics.AdditiveRelaxationHeuristic(problem)); case Heuristic.MaxRelaxationHeuristic: return(new Planner.Heuristics.MaxRelaxationHeuristic(problem)); case Heuristic.FFHeuristic: return(new Planner.Heuristics.FFHeuristic(problem)); case Heuristic.PDBHeuristic: return(new Planner.Heuristics.PDBHeuristic(problem)); default: throw new System.NotImplementedException("Unknown heuristic type!"); } }
/// <summary> /// Creates and returns the corresponding heuristic search engine. /// </summary> /// <returns>Corresponding heuristic search engine.</returns> protected override Planner.Search.IHeuristicSearch GetHeuristicSearch() { Planner.IProblem problem = GetProblem(); Planner.Heuristics.IHeuristic heuristic = GetHeuristic(problem); Planner.Heaps.IHeap heap = GetHeap(); System.TimeSpan timeLimit = System.TimeSpan.FromMinutes(TimeLimit); long memoryLimit = MemoryLimit; switch (Algorithm) { case Algorithm.AStarSearch: return(new Planner.Search.AStarSearch(problem, heuristic, heap, false, timeLimit, memoryLimit)); case Algorithm.BeamSearch: return(new Planner.Search.BeamSearch(problem, heuristic, heap, 2, false, timeLimit, memoryLimit)); case Algorithm.HillClimbingSearch: return(new Planner.Search.HillClimbingSearch(problem, heuristic, false, timeLimit, memoryLimit)); default: throw new System.NotImplementedException("Unknown search algorithm type!"); } }