public void TC_IStateOrConditions() { var problem = new Planner.SAS.Problem(new SASInputData(GetFilePath("TC_Gripper.sas"))); var heuristic = new FFHeuristic(problem); IStateOrConditions state = problem.InitialState; IStateOrConditions state2 = new Planner.SAS.State(1, 1, 1, 1, 0, 4, 4); Assert.IsTrue(CollectionsEquality.Equals(problem.GetSuccessors((IState)state), state.DetermineTransitions(problem))); Assert.IsFalse(state.DetermineGoalNode(problem)); Assert.IsTrue(state2.DetermineGoalNode(problem)); Assert.AreEqual(heuristic.GetValue((IState)state), state.DetermineHeuristicValue(heuristic)); IStateOrConditions conditions = problem.GoalConditions; IStateOrConditions conditions2 = new Planner.SAS.Conditions(new Planner.SAS.Assignment(5, 4), new Planner.SAS.Assignment(6, 4)); Assert.IsTrue(CollectionsEquality.Equals(problem.GetPredecessors((IConditions)conditions), conditions.DetermineTransitions(problem))); Assert.IsFalse(conditions.DetermineGoalNode(problem)); Assert.IsTrue(conditions2.DetermineGoalNode(problem)); Assert.AreEqual(heuristic.GetValue((IConditions)conditions), conditions.DetermineHeuristicValue(heuristic)); IStateOrConditions relativeState = problem.GoalConditions.GetCorrespondingRelativeStates(problem).First(); IStateOrConditions relativeState2 = new Planner.SAS.RelativeState(-1, -1, -1, -1, -1, 4, 4); Assert.IsTrue(CollectionsEquality.Equals(problem.GetPredecessors((IRelativeState)relativeState), relativeState.DetermineTransitions(problem))); Assert.IsFalse(relativeState.DetermineGoalNode(problem)); Assert.IsTrue(relativeState2.DetermineGoalNode(problem)); Assert.AreEqual(heuristic.GetValue((IRelativeState)relativeState), relativeState.DetermineHeuristicValue(heuristic)); }
public NNHeuristic(Problem p) { this.heur = new FFHeuristic(p); var features = FeaturesCalculator.generateFeaturesFromProblem(p); features.Add(0); //feature dependent on the state; nnInputs = features.Select(d => (float)d).ToList(); }
public static double computeFFHeuristic(string stateString) { var splitted = stateString.Split('_'); string domainName = splitted[0]; string problemName = splitted[1]; string stateAsString = splitted[2]; string sasProblemPath = Path.Combine(SAS_all_WithoutAxioms, domainName, problemName); Problem p = new Problem(sasProblemPath, false); IState state = State.Parse(stateAsString); FFHeuristic h = new FFHeuristic(p); return(h.GetValue(state)); }
public void TC_FFHeuristic() { var sasProblem = new Planner.SAS.Problem(new SASInputData(GetFilePath("TC_Gripper.sas"))); var pddlProblem = new Planner.PDDL.Problem(new PDDLInputData(GetFilePath("TC_Gripper_D.pddl"), GetFilePath("TC_Gripper_P.pddl"))); var heuristic = new FFHeuristic(sasProblem); Assert.AreEqual(9, heuristic.GetValue(sasProblem.GetInitialState())); Assert.AreEqual(9, heuristic.GetValue(sasProblem.GetGoalConditions())); Assert.AreEqual(9, heuristic.GetValue(sasProblem.GetGoalConditions().GetCorrespondingRelativeStates(sasProblem).First())); Assert.AreEqual("FF Heuristic", heuristic.GetName()); Assert.AreEqual(3, heuristic.GetCallsCount()); var heuristic2 = new FFHeuristic(pddlProblem); Assert.AreEqual(5, heuristic2.GetValue(pddlProblem.GetInitialState())); Assert.AreEqual(5, heuristic2.GetValue(pddlProblem.GetGoalConditions())); Assert.AreEqual(5, heuristic2.GetValue(pddlProblem.GetGoalConditions().GetCorrespondingRelativeStates(pddlProblem).First())); Assert.AreEqual("FF Heuristic", heuristic2.GetName()); Assert.AreEqual(3, heuristic2.GetCallsCount()); }
public static void runPlanningExperiments(string domainsFolder, TimeSpan timeLimit, int param) { Logger logger = new Logger(); List <SearchResults> allResults = new List <SearchResults>(); //try //{ //the number of computes that participate on this job. Computation is distributed among them. int numberOfComputes = 2; //if set to true, problem file that don't have histogram computed will be skipped. Otherwise all problems will be processed. bool onlyWhenHistogramExists = false; Problem d; AStarSearch ast; //HillClimbingSearch ast; var directories = Directory.EnumerateDirectories(domainsFolder); allResults = new List <SearchResults>(); foreach (var directory in directories) { var files = Directory.EnumerateFiles(directory).ToList(); foreach (var SASFile in files) { int indexOfFile = files.IndexOf(SASFile); if (indexOfFile % numberOfComputes != param) //if (indexOfFile != param) { continue; } if (onlyWhenHistogramExists && !IsHistogramComputed(directory, SASFile)) { continue; } logger.Log(" ----- new problem ----- "); logger.Log(directory + "\\" + SASFile); d = new Problem(SASFile, false); Heuristic h = new FFHeuristic(d); /* * string histogramFolder = @"C:\Users\Ota\Documents\Visual Studio 2017\Projects\PADD\heuristicStats"; * var samples = HistogramVisualizer.Form1.getHistograms(histogramFolder); * List<HistogramVisualizer.Histograms> selectedSamples = new List<HistogramVisualizer.Histograms>(); * foreach (var item in samples[Path.GetFileName(directory)].Values) * { * selectedSamples.AddRange(item); * } */ //string trainedNetworkFile = Path.Combine("..", "trainedNetwork.bin"); //Heuristic h = new NNHeuristic(d, trainedNetworkFile); //string dataFile = Path.Combine(directory, "histograms", "dataToLearn.tsv"); //Heuristic h = new FileBasedHeuristic(d, dataFile, false); //Heuristic h = new FFHeuristic(d); //Heuristic h = new RegHeuristic(new FFHeuristic(d)); //Heuristic h = new FileBasedHeuristic(d, dataFile, false); //h = getHeuristicByParam(param, d); //h = getHeuristicByParam(6, d); ISearchHeap heapStructure = null; //heapStructure = getHeapByParam(param); //ISearchHeap heapStructure = new Heaps.MeasuredHeap(); heapStructure = new RedBlackTreeHeap(); //ISearchHeap heapStructure = new Heaps.FibonacciHeap1(); //ISearchHeap heapStructure = new Heaps.FibonacciHeap2(); //ISearchHeap heapStructure = new Heaps.RegularBinaryHeap(); //ISearchHeap heapStructure = new Heaps.RegularTernaryHeap(); //ISearchHeap heapStructure = new Heaps.BinomialHeap(); //ISearchHeap heapStructure = new Heaps.LeftistHeap(); ast = new AStarSearch(d, h, heapStructure); //ast = new MultiHeuristicAStarSearch(d, h); //ast = new MultiHeuristicAStarSearch(d, new List<Heuristic>() { h, hNN }); //ast = new IterativeDeepeningAStarSearch(d, null); DirectoryInfo currentDirectory = new DirectoryInfo(directory); FileInfo currentFile = new FileInfo(SASFile); if (ast.OpenNodes is MeasuredHeap <IState> ) { ((MeasuredHeap <IState>)ast.OpenNodes).SetLoggingOutputFile(currentDirectory.Name + "_" + currentFile.Name); } ast.TimeLimitOfSearch = timeLimit; ast.Start(); var searchResult = ast.GetSearchResults(false); searchResult.DomainName = (Path.GetFileName(directory)); searchResult.ProblemName = (Path.GetFileName(SASFile)); searchResult.Heuristic = h.GetDescription(); searchResult.Algorithm = ast.GetDescription() + "+" + heapStructure.GetName(); searchResult.BestHeuristicValue = h.Statistics.BestHeuristicValue; searchResult.AverageHeuristicValue = h.Statistics.AverageHeuristicValue; //foreach (var item in ast.GetSolution().GetOperatorSeqIndices()) // Console.Write(item + " "); allResults.Add(searchResult); if (ast.OpenNodes is MeasuredHeap <IState> ) { ((MeasuredHeap <IState>)ast.OpenNodes).ClearStats(); } logger.Log(); } logger.Log(" ----- new domain ----- "); } // catch (Exception e) // { // using (var writer = new System.IO.StreamWriter("results" + Environment.MachineName + ".txt")) // foreach (var item in allResults) // { // writer.WriteLine(item.ToString()); // } //} using (var writer = new System.IO.StreamWriter("results" + Environment.MachineName + ".txt")) foreach (var item in allResults) { writer.WriteLine(item.ToString()); } }