public void TravellingSalesman_Smoke_Test() { var graph = new WeightedDiGraph <int, int>(); graph.AddVertex(0); graph.AddVertex(1); graph.AddVertex(2); graph.AddVertex(3); graph.AddEdge(0, 1, 1); graph.AddEdge(0, 2, 15); graph.AddEdge(0, 3, 6); graph.AddEdge(1, 0, 2); graph.AddEdge(1, 2, 7); graph.AddEdge(1, 3, 3); graph.AddEdge(2, 0, 9); graph.AddEdge(2, 1, 6); graph.AddEdge(2, 3, 12); graph.AddEdge(3, 0, 10); graph.AddEdge(3, 1, 4); graph.AddEdge(3, 2, 8); Assert.AreEqual(21, TravellingSalesman.GetMinWeight(graph)); }
public void ThreeCitiesInATriangle_CorrectlyCalculatesDistances(params double[][] cityLocations) { var tsp = new TravellingSalesman("Test Triangle", cityLocations, DecisionVector.CreateFromArray(DecisionSpace.CreateForUniformIntArray(4, 0, 2), new[] { 0, 1, 2, 0 })); Assert.Equal(12.0, tsp.Evaluate(tsp.GetGlobalOptimum()).ElementAt(0)); }
public TravellingSalesmanSolver() { Problem = new TravellingSalesman(); population = new Population(); population.NumberOfIndividuals = 100; population.NumberOfObjects = 100; }
public void TravellingSalesman_AdjacencyMatrixGraph_Smoke_Test() { var graph = new Advanced.Algorithms.DataStructures.Graph.AdjacencyMatrix.WeightedDiGraph <int, int>(); graph.AddVertex(0); graph.AddVertex(1); graph.AddVertex(2); graph.AddVertex(3); graph.AddEdge(0, 1, 1); graph.AddEdge(0, 2, 15); graph.AddEdge(0, 3, 6); graph.AddEdge(1, 0, 2); graph.AddEdge(1, 2, 7); graph.AddEdge(1, 3, 3); graph.AddEdge(2, 0, 9); graph.AddEdge(2, 1, 6); graph.AddEdge(2, 3, 12); graph.AddEdge(3, 0, 10); graph.AddEdge(3, 1, 4); graph.AddEdge(3, 2, 8); var tsp = new TravellingSalesman <int, int>(); Assert.AreEqual(21, tsp.FindMinWeight(graph, new TSPShortestPathOperators())); }
public void ConstructedFromFile_LoadsCorrectly() { var problemFilePath = Path.Combine(Directory.GetCurrentDirectory(), "SingleObjective", "Discrete", "Resources", "ulysses16.tsp"); var tsp = TravellingSalesman.CreateFromFile(problemFilePath); Assert.Equal(17, tsp.GetGlobalOptimum().Count); }
public void Init(Random gen) { this.gen = gen; problem = new TravellingSalesman(); problem.LoadTownsFromFile(DataDir.Towns); solver = new RandomOptimization <List <Town> >(gen); solver.ProblemSpace = problem.Towns; solver.CycleLimit = 1000; solver.Dice = 3; solver.Max = 300; solver.GenerateRandomStart = (towns) => { var route = new List <Town>(); foreach (var town in solver.ProblemSpace) { var index = gen.Next(0, route.Count); route.Insert(index, town); } return(route); }; solver.TakeRandomStepWithinRange = (route, epsilon) => { var alternativeRoute = new List <Town>(route); // take a random city, put it next to a close one var choice = alternativeRoute[gen.Next(0, alternativeRoute.Count)]; alternativeRoute.Remove(choice); var inRange = route.Where(x => x.Distance(choice) <= epsilon).ToList(); inRange.Remove(choice); var index = alternativeRoute.IndexOf(inRange.First()); alternativeRoute.Insert(index, choice); return(alternativeRoute); }; double acceptableLength = 10; solver.StopCondition = (route) => { return(problem.Objective(route) < acceptableLength); }; solver.Fitness = (route) => { return(problem.Objective(route)); }; }
public void GivenGraph_WhenGetCheapestPathIsInvoked_NullIsReturned(int graphNumber, string expectedPath, int expectedWeight) { // Arrange var graph = GetGraph(graphNumber); // Act var result = TravellingSalesman.GetCheapestPathThroughAllPoints(graph); // Assert Assert.Equal(expectedPath, result.Path); Assert.Equal(expectedWeight, result.Weight); }
public float SolveTravelingSalesman() { var tsp = new TravellingSalesman(); var pointsCount = _ys.Length; Vector2[] points = new Vector2[pointsCount]; for (int i = 0; i < pointsCount; i++) { points[i] = new Vector2((float)_xs[i], (float)_ys[i]); } var(pathlength, optimalPath) = tsp.GetTourPathLengthToLastNode(points); return(pathlength); }
static void Main(string[] args) { Console.WriteLine("Travelling salesman."); var graph = new Dictionary <string, Dictionary <string, int> >(); AddCity(graph); var stopwatch = new Stopwatch(); for (var i = 1; i <= 10; i++) { AddCity(graph); stopwatch.Restart(); var result = TravellingSalesman.GetCheapestPathThroughAllPoints(graph); stopwatch.Stop(); Console.WriteLine($"Result with {graph.Count} cities: {result}. Time taken: {stopwatch.ElapsedMilliseconds}"); } Console.ReadLine(); }
public void InvalidRoutes_ThrowError() { var correctDs = DecisionSpace.CreateForUniformIntArray(3, 0, 1); var tsp = new TravellingSalesman("A Tale of Two Cities", new List <double[]>() { new[] { 0.0, 0 }, new[] { 1.0, 0 } }, DecisionVector.CreateFromArray(DecisionSpace.CreateForUniformIntArray(3, 0, 2), new[] { 0, 1, 0 })); // Empty route Assert.Throws <ArgumentOutOfRangeException>(() => tsp.Evaluate(DecisionVector.CreateForEmpty())); // Route that is too long with location (2) that doesn't exist Assert.Throws <ArgumentOutOfRangeException>(() => tsp.Evaluate( DecisionVector.CreateFromArray(DecisionSpace.CreateForUniformIntArray(4, 0, 2), new[] { 0, 2, 1, 0 }))); // Route with location (2) that doesn't exist Assert.Throws <ArgumentOutOfRangeException>(() => tsp.Evaluate( DecisionVector.CreateFromArray(correctDs, new[] { 0, 2, 0 }))); }