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));
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 5
0
        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());
                }
        }