Esempio n. 1
0
        public static void createStatesDBForDomain(string domainFolder, string outputFolder, DomainDependentSolver solver, long totalSamples, bool storeObjectGraphs = true)
        {
            var  problemFiles   = PADDUtils.FileSystemUtils.enumerateProblemFiles(domainFolder).ToList();
            long samplesPerFile = totalSamples / problemFiles.Count;

            PADDUtils.FileSystemUtils.createDirIfNonExisting(outputFolder);
            long samplesGenerated = 0;
            long toBeGenerated    = samplesPerFile * problemFiles.Count;

            using (var writter = new StreamWriter(Path.Combine(outputFolder, "samples.tsv")))
            {
                long currentID = 1;
                writter.WriteLine("_ID\ttarget\tstate\tdomain\tproblem");                   //writing header

                foreach (var item in problemFiles)
                {
                    var sasProblem   = new Problem(item, false);
                    var initialState = sasProblem.InitialState;
                    PADD.StatesDB.StatesEnumerator e = new RandomWalksFromGoalPathStateSpaceEnumerator(sasProblem, solver);
                    DBCreator c       = new DBCreator(e);
                    var       samples = c.createSamples(item, solver, samplesPerFile, TimeSpan.FromHours(5));
                    foreach (var sample in samples)
                    {
                        samplesGenerated++;
                        if (samplesGenerated % 100 == 0)
                        {
                            Console.WriteLine("Samples generated: " + samplesGenerated + " out of " + toBeGenerated + " (" + ((double)samplesGenerated / toBeGenerated * 100).ToString("0.00") + " %");
                        }

                        writter.Write(currentID + "\t");
                        writter.Write(sample.val + "\t");
                        writter.Write(sample.key + "\t");
                        writter.Write(Path.GetFileName(domainFolder) + "\t");
                        writter.WriteLine(Path.GetFileName(item));
                        if (storeObjectGraphs)
                        {
                            IState s = State.Parse(sample.key);
                            sasProblem.SetInitialState(s);
                            var graph = KnowledgeExtractionGraphs.computeObjectGraph(sasProblem).toMSAGLGraph();

                            /*
                             * Console.WriteLine(sample.key + "\t" + s.toStringWithMeanings());
                             * Utils.GraphVisualization.GraphVis.showGraph(graph);
                             */

                            string graphPath = Path.Combine(outputFolder, "graphs", currentID.ToString() + ".bin");
                            PADDUtils.FileSystemUtils.createDirIfNonExisting(Path.Combine(outputFolder, "graphs"));
                            using (var stream = new FileStream(graphPath, FileMode.Create))
                            {
                                graph.WriteToStream(stream);
                            }
                            sasProblem.SetInitialState(initialState);
                        }
                        currentID++;
                    }
                }
            }
        }
Esempio n. 2
0
        public static void createStatesDB(string problemFile, DomainDependentSolver domainSpecificSolver)
        {
            var sasProblem = new Problem(problemFile, false);

            PADD.StatesDB.StatesEnumerator e = new RandomWalksFromGoalPathStateSpaceEnumerator(sasProblem, domainSpecificSolver);
            DBCreator c = new DBCreator(e);

            if (domainSpecificSolver is PADD.DomainDependentSolvers.VisitAll.VisitAllSolver)
            {
                var goalPath = ((RandomWalksFromGoalPathStateSpaceEnumerator)e).goalPath;
                ((PADD.DomainDependentSolvers.VisitAll.VisitAllSolver)domainSpecificSolver).drawPlan(goalPath);
            }

            c.createDB(problemFile, domainSpecificSolver, 100000, TimeSpan.FromHours(1));
            var states = c.DB.getAllElements().ToList();

            Trie <int> t = Trie <int> .load(c.getDBFilePath(problemFile),
                                            s => int.Parse(s));

            states = t.getAllElements().ToList();

            var realStates = states.Select(s => (State.Parse(s.key), s.value)).ToList();
        }