Ejemplo n.º 1
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="problem">The problem instance to solve.</param>
 public DvrpSolver(DvrpProblem problem)
 {
     State = UCCTaskSolver.TaskSolver.TaskSolverState.OK;
     _dvrpProblem = problem;
     var n = _dvrpProblem.Requests.Length;
     _distances = new double[n, n];
     for (var i = 0; i < n; i++)
     {
         for (var j = i + 1; j < n; j++)
         {
             var dx = _dvrpProblem.Requests[i].X - _dvrpProblem.Requests[j].X;
             var dy = _dvrpProblem.Requests[i].Y - _dvrpProblem.Requests[j].Y;
             _distances[i, j] = _distances[j, i] = Math.Sqrt(dx*dx + dy*dy);
         }
     }
     var m = _dvrpProblem.Depots.Length;
     _depotDistances = new double[m, n];
     for (var i = 0; i < m; i++)
     {
         for (var j = 0; j < n; j++)
         {
             var dx = _dvrpProblem.Depots[i].X - _dvrpProblem.Requests[j].X;
             var dy = _dvrpProblem.Depots[i].Y - _dvrpProblem.Requests[j].Y;
             _depotDistances[i, j] = Math.Sqrt(dx*dx + dy*dy);
         }
     }
     _tspSolver = new TspSolver(this);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="problem">The problem instance to solve.</param>
        public DvrpSolver(DvrpProblem problem)
        {
            State        = UCCTaskSolver.TaskSolver.TaskSolverState.OK;
            _dvrpProblem = problem;
            var n = _dvrpProblem.Requests.Length;

            _distances = new double[n, n];
            for (var i = 0; i < n; i++)
            {
                for (var j = i + 1; j < n; j++)
                {
                    var dx = _dvrpProblem.Requests[i].X - _dvrpProblem.Requests[j].X;
                    var dy = _dvrpProblem.Requests[i].Y - _dvrpProblem.Requests[j].Y;
                    _distances[i, j] = _distances[j, i] = Math.Sqrt(dx * dx + dy * dy);
                }
            }
            var m = _dvrpProblem.Depots.Length;

            _depotDistances = new double[m, n];
            for (var i = 0; i < m; i++)
            {
                for (var j = 0; j < n; j++)
                {
                    var dx = _dvrpProblem.Depots[i].X - _dvrpProblem.Requests[j].X;
                    var dy = _dvrpProblem.Depots[i].Y - _dvrpProblem.Requests[j].Y;
                    _depotDistances[i, j] = Math.Sqrt(dx * dx + dy * dy);
                }
            }
            _tspSolver = new TspSolver(this);
        }
Ejemplo n.º 3
0
        private static void RunRandomLSPathsStatistics(IGraph graph, TspSolver solver, string coordinatesPath)
        {
            var localSearchSolver = new PathSimilaritySolver(graph, new InitializationSolver(solver,
                                                                                             new RandomPathAlgorithm(Steps, new EdgeFinder())),
                                                             new ISimilarityCalculationStrategy[] { new EdgeSimillarityStrategy(), new NodeSimilarityStrategy() });
            var localSearchAlgorithm = new LocalSearchAlgorithm(Steps, new EdgeFinder());

            localSearchSolver.Solve(localSearchAlgorithm);
        }
Ejemplo n.º 4
0
        private static void RunBasicAlgorithms(TspSolver solver, string coordinatesPath, string resultsPath)
        {
            var resultPrinter = new ResultPrinter()
                                .AddPrinter(new ConsolePrinter(), new ConsoleContentBuilder(solver.SolvingStatistics))
                                .AddPrinter(new FilePrinter(resultsPath, $"{DateTime.Now.Date.ToFileTime()}_results.txt"),
                                            new FileContentBuilder(solver.SolvingStatistics, coordinatesPath));

            SolveAndPrint(solver, new NearestNeighborAlgorithm(Steps, new EdgeFinder()), "NEAREST NEIGHBOR", resultPrinter);

            SolveAndPrint(solver, new GreedyCycleAlgorithm(Steps, new EdgeFinder()), "GREEDY CYCLE", resultPrinter);

            SolveAndPrint(solver, new NearestNeighborAlgorithm(Steps, new GraspEdgeFinder(3)), "NEAREST NEIGHBOR GRASP", resultPrinter);

            SolveAndPrint(solver, new GreedyCycleAlgorithm(Steps, new GraspEdgeFinder(3)), "GREEDY CYCLE GRASP", resultPrinter);
        }
Ejemplo n.º 5
0
        private static void RunILSAlgorithm(IGraph graph, TspSolver solver, string coordinatesPath, string resultsPath)
        {
            var localSearchSolver    = new TspIteratedLocalSearchSolver(graph, solver, new NearestNeighborAlgorithm(Steps, new GraspEdgeFinder(3)));
            var localSearchAlgorithm = new LocalSearchAlgorithm(Steps, new EdgeFinder());

            SolveAndPrint(localSearchSolver, localSearchAlgorithm,
                          "NN Grasp with local search (ILS)", LocalSearchResultPrinter(localSearchSolver, "NNG_ILS", coordinatesPath, resultsPath));

            localSearchSolver    = new TspIteratedLocalSearchSolver(graph, solver, new GreedyCycleAlgorithm(Steps, new GraspEdgeFinder(3)));
            localSearchAlgorithm = new LocalSearchAlgorithm(Steps, new EdgeFinder());
            SolveAndPrint(localSearchSolver, localSearchAlgorithm,
                          "GC Grasp with local search (ILS)", LocalSearchResultPrinter(localSearchSolver, "GCG_ILS", coordinatesPath, resultsPath));

            localSearchSolver    = new TspIteratedLocalSearchSolver(graph, solver, new RandomPathAlgorithm(Steps, new EdgeFinder()));
            localSearchAlgorithm = new LocalSearchAlgorithm(Steps, new EdgeFinder());
            SolveAndPrint(localSearchSolver, localSearchAlgorithm,
                          "Random with local search (ILS)", LocalSearchResultPrinter(localSearchSolver, "Random_ILS", coordinatesPath, resultsPath));
        }
Ejemplo n.º 6
0
        public static void Main(string[] args)
        {
            var buildConfig = BuildConfiguration();
            var config      = buildConfig.GetSection(nameof(AppConfiguration));

            var dataPath         = config["data"];
            var resultPath       = config["results"];
            var graphEdges       = System.IO.Path.Combine(dataPath, config["graphEdges"]);
            var graphCoordinates = System.IO.Path.Combine(dataPath, config["graphCoordinates"]);

            var dataLoader = new GraphLoader(graphEdges, 100);
            var graph      = dataLoader.Load();

            var calculationStrategies = new ISimilarityCalculationStrategy[]
            { new EdgeSimillarityStrategy(), new NodeSimilarityStrategy() };

            var simpleSolver      = new TspSolver(graph);
            var localSearchSolver = new TspLocalSearchSolver(graph);
            var edgeFinder        = new GraspEdgeFinder(3);

            var evolutinarySolver = new EvolutionarySolver(graph,
                                                           new Recombinator(new SimilarityFinder(calculationStrategies), Steps, graph),
                                                           new Selector(), 41000);
            var localSearch = new LocalSearchAlgorithm(Steps, edgeFinder);

            var stats = new BasicSolverStatistics();

            var bestCost = int.MaxValue;
            ISolverStatistics bestStatistics = new BasicSolverStatistics();

            for (var i = 0; i < 10; i++)
            {
                var generatedPaths = simpleSolver.Solve(new RandomPathAlgorithm(Steps, edgeFinder));
                generatedPaths = localSearchSolver.Solve(localSearch, generatedPaths);

                evolutinarySolver.Solve(localSearch, generatedPaths);

                if (evolutinarySolver.SolvingStatistics.BestPath.Cost < bestCost)
                {
                    bestCost       = evolutinarySolver.SolvingStatistics.BestPath.Cost;
                    bestStatistics = evolutinarySolver.SolvingStatistics;
                }

                stats.UpdateSolvingResults(evolutinarySolver.SolvingStatistics.BestPath, evolutinarySolver.SolvingStatistics.MeanSolvingTime);
            }

            var statsPrinter = new FilePrinter(resultPath, "evo_stats.res");

            statsPrinter.Print(stats.ToString());

            var output = new StringBuilder();

            output.AppendLine($"{"Id".PadRight(4)}\tCost\tTime");
            for (var i = 0; i < bestStatistics.Costs.Count; i++)
            {
                output.AppendLine($"{i.ToString().PadRight(4)}\t{bestStatistics.Costs[i].ToString().PadRight(4)}\t{bestStatistics.SolvingTimes[i].Milliseconds:D}");
            }

            var evoResultsPrinter = new FilePrinter(resultPath, "evolutionary_results.res");

            evoResultsPrinter.Print(output.ToString());

            Console.WriteLine("Evolutionary solver ended his work!");
            //SimilaritySolver(resultPath, graph, calculationStrategies, edgeFinder);
        }
        public static void Main(string[] args)
        {
            #region MyRegion

            /*            new Node("f", 0, 9),
             *              new Node("g", 1, 4),
             *              new Node("h", 1, 6),
             *              new Node("i", 3, 4),
             *              new Node("j", 8, 4),
             *              new Node("k", 9, 4),
             *              new Node("l", 4, 4)
             *
             */

            #endregion

            var xxxx = new List <Node>
            {
                new Node("A", 0, 0),
                new Node("B", 1, 1),
                new Node("C", 2, 2),
                new Node("D", 2, 9),
                new Node("E", 4, 5),
                new Node("F", 8, 1),
            };

            #region mockList

            //var A = new Node("A", 1, 1);
            //var B = new Node("B", 1, 1);
            //var C = new Node("C", 1, 1);
            //var D = new Node("D", 1, 1);
            //var E = new Node("E", 1, 1);

            //A.Routes = new Dictionary<Node, Route>()
            //{
            //    {A, new Route(0)},
            //    {B, new Route(10)},
            //    {C, new Route(12)},
            //    {D, new Route(11)},
            //    {E, new Route(14)},
            //};

            //B.Routes = new Dictionary<Node, Route>()
            //{
            //    {A, new Route(10)},
            //    {B, new Route(0)},
            //    {C, new Route(13)},
            //    {D, new Route(15)},
            //    {E, new Route(18)},
            //};

            //C.Routes = new Dictionary<Node, Route>()
            //{
            //    {A, new Route(12)},
            //    {B, new Route(13)},
            //    {C, new Route(0)},
            //    {D, new Route(9)},
            //    {E, new Route(14)},
            //};

            //D.Routes = new Dictionary<Node, Route>()
            //{
            //    {A, new Route(11)},
            //    {B, new Route(15)},
            //    {C, new Route(9)},
            //    {D, new Route(0)},
            //    {E, new Route(16)},
            //};

            //E.Routes = new Dictionary<Node, Route>()
            //{
            //    {A, new Route(14)},
            //    {B, new Route(8)},
            //    {C, new Route(14)},
            //    {D, new Route(16)},
            //    {E, new Route(0)},
            //};

            //var mockNodes = new List<Node> {A, B, C, D, E};

            #endregion

            //TspSolver
            //    .AntColonyOptimization()
            //    .Default()
            //    .WithCities(xxxx)
            //    .StartFrom(1)
            //    .WithAnts(6)
            //    .WithMaximumTime(1000)
            //    .Solve();

            TspSolver
            .AntColonyOptimization()
            .Custom()
            .WithInfluenceOfPheromoneOnDrection(2)
            .WithInfluenceOfAdjacentNodeDistance(3)
            .WithPheromoneDecreaseFactor(0.1)
            .WithPheromoneIncreaseFactor(3)
            .WithCities(xxxx /*@"C:\Users\dariusz.dabrowski\Desktop\Ceneo\Nodes.txt"*/)
            .StartFromRandomPosition()
            .WithAnts(2)
            .WithMaximumTime(10000)
            .Solve();



            Console.ReadKey();
        }