public MAM_OpenList ( MAM_ISolver user ) { this.openNodes = new Dictionary <IBinaryHeapItem, IBinaryHeapItem>(); this.heap = new BinaryHeap(); this.queue = new Queue <IBinaryHeapItem>(); this.user = user; this.ClearPrivateStatistics(); this.ClearPrivateAccumulatedStatistics(); }
private void PrintNullStatistics ( MAM_ISolver solver ) { // Success col: this.resultsWriter.Write(MAM_Run.FAILURE_CODE + RESULTS_DELIMITER); // Runtime col: this.resultsWriter.Write(Constants.MAX_TIME + RESULTS_DELIMITER); // Solution Cost col: this.resultsWriter.Write("irrelevant" + RESULTS_DELIMITER); // Max Group col: this.resultsWriter.Write("irrelevant" + RESULTS_DELIMITER); // Solution Depth col: this.resultsWriter.Write("irrelevant" + RESULTS_DELIMITER); }
/// <summary> /// Write to file a given instance /// </summary> /// <param name="instance">The instance to execute</param> public void WriteGivenProblem ( ProblemInstance instance, MAM_ISolver solver, MAM_Plan currentPlan = null) { string initialH; if (solver.GetHeuristicCalculator().GetInitialH() == 0) { initialH = 0.ToString(); } else if (solver.GetCostFunction() == CostFunction.SOC) { Tuple <double, int> bestInitH = solver.GetHeuristicCalculatorInitialH(); double bestH = bestInitH.Item1; double bestAgents = bestInitH.Item2; initialH = bestH.ToString(); } else { Tuple <double, int> bestInitH = solver.GetHeuristicCalculatorInitialH(); double bestH = bestInitH.Item1; int bestAgents = bestInitH.Item2; initialH = (bestH / bestAgents).ToString(); } writeToFile( solver.GetName(), // solver name planningTime.ToString(), // planning time costFunctionToString(solver.GetCostFunction()), // cost function solver.GetSolutionSOCCost().ToString(), // solution SOC cost solver.GetSolutionMakeSpanCost().ToString(), // solution MakeSpan cost instanceId.ToString(), // instanceId instance.fileName, // file Name instance.m_vAgents.Length.ToString(), // #Agents m_mapFileName, // Map name solver.IsSolved().ToString(), // Success instance.m_nObstacles, // Obstacles solver.GetExpanded().ToString(), // Expansions solver.GetGenerated().ToString(), // Generates preprocessingTime.ToString(), // preprocessing time solver.GetHeuristicCalculator().GetName(), // Heuristic Name initialH); // Initial h value }
/// <summary> /// Solve a given instance with the given solver /// </summary> /// <param name="solver">The solver</param> /// <param name="instance">The problem instance that will be solved</param> private void run ( MAM_ISolver solver, ProblemInstance instance, HashSet <MMStarConstraint> constraints = null ) { // Run the algorithm bool solved; //Console.WriteLine("----------------- " + solver + " with " + solver.GetHeuristicCalculator().GetName() + ", Minimizing " + solver.GetCostFunction().ToString() + " -----------------"); this.startTime = this.ElapsedMillisecondsTotal(); solver.GetHeuristicCalculator().init(instance); solver.Setup(instance, this); if (constraints == null) { constraints = new HashSet <MMStarConstraint>(); } //MMStarConstraint constraint1 = new MMStarConstraint(2, 3, 2, Move.Direction.South, 2); //MMStarConstraint constraint2 = new MMStarConstraint(1, 1, 2, Move.Direction.NO_DIRECTION, 1); //constraints.Add(constraint1); //constraints.Add(constraint2); solver.AddConstraints(constraints); // Add constraints solved = solver.Solve(); elapsedTime = this.ElapsedMilliseconds(); if (solved) { //Console.WriteLine("Total MakeSpan cost: {0}", solver.GetSolutionMakeSpanCost()); //Console.WriteLine("Total SOC cost: {0}", solver.GetSolutionSOCCost()); } else { Console.WriteLine("Failed to solve"); } //Console.WriteLine(); //Console.WriteLine("Expanded nodes: {0}", solver.GetExpanded()); //Console.WriteLine("Time in milliseconds: {0}", elapsedTime); if (toPrint) { this.PrintStatistics(instance, solver, elapsedTime); } }
/// <summary> /// Print the solver statistics to the results file. /// </summary> /// <param name="instance">The problem instance that was solved. Not used!</param> /// <param name="solver">The solver that solved the problem instance</param> /// <param name="runtimeInMillis">The time it took the given solver to solve the given instance</param> private void PrintStatistics ( ProblemInstance instance, MAM_ISolver solver, double runtimeInMillis ) { // Success col: //if (solver.GetSolutionCost() < 0) // this.resultsWriter.Write(Run.FAILURE_CODE + RESULTS_DELIMITER); //else this.resultsWriter.Write(MAM_Run.SUCCESS_CODE + RESULTS_DELIMITER); // Runtime col: this.resultsWriter.Write(runtimeInMillis + RESULTS_DELIMITER); // Solution Cost col: //this.resultsWriter.Write(solver.GetSolutionCost() + RESULTS_DELIMITER); // Algorithm specific cols: solver.OutputStatistics(this.resultsWriter); // Solution Depth col: this.resultsWriter.Write(solver.GetSolutionDepth() + RESULTS_DELIMITER); //this.resultsWriter.Flush(); }