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();
        }
Beispiel #2
0
 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);
 }
Beispiel #3
0
        /// <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
        }
Beispiel #4
0
        /// <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);
            }
        }
Beispiel #5
0
 /// <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();
 }