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); }