Ejemplo n.º 1
0
        static int SolveTestData(IHeuristic heuristic, TestDomainData[] data, CSVWriter csvWriter, int?timeout)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            int countSolved = 0;

            for (int i = 0; i < data.Length; i++)
            {
                Console.WriteLine("iter: " + i.ToString());

                if (timeout != null && sw.ElapsedMilliseconds > timeout)
                {
                    break;
                }

                heuristic.ClearCache();

                GC.Collect();

                TestDomainData testDomainData = data[i];

                DomainContainer domainContainer = new DomainContainer(heuristic, testDomainData.Init);

                ISearchDomain domain = domainContainer.Domain;

                IDAStar <ISearchDomain> planner = new IDAStar <ISearchDomain>(domain);

                List <IState> plan = planner.Search(domain.Initial(), timeout);

                testDomainData.SolvedCost = plan.Count - 1;

                testDomainData.SolvedExpanded = planner.Expanded;

                testDomainData.SolvedGenerated = planner.Generated;


                if (testDomainData.SolvedCost > 0)
                {
                    csvWriter.Add(planner.Expanded.ToString());
                    csvWriter.Add(planner.Generated.ToString());
                    csvWriter.Add(testDomainData.OptimalCost.ToString());
                    csvWriter.Add(testDomainData.SolvedCost.ToString());
                    csvWriter.Add(planner.SwopWatch.ElapsedMilliseconds.ToString());
                    csvWriter.EndLine();
                    csvWriter.Write();
                    csvWriter.Clear();
                    countSolved++;
                }



                Console.WriteLine("cost: " + (plan.Count - 1).ToString());

                Console.WriteLine("generated: " + planner.Generated);

                Console.WriteLine("elapsed: " + planner.SwopWatch.ElapsedMilliseconds);
            }

            return(countSolved);
        }