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