/// <summary> /// Given a list of points, return the points, each with an orderId. /// </summary> /// <param name="points"></param> /// <returns></returns> private IEnumerable <OrderPoint> GetOrderPoints(IEnumerable <Point> points) { if (points.Count() > MaxClusterSize) { return(points.Select((p, i) => new OrderPoint() { PointId = p.PointId, Name = p.Name, HorizontalDisplacement = p.HorizontalDisplacement, VerticalDisplacement = p.VerticalDisplacement, OrderId = i })); } var vertices = TourBridge.GetVertices(points); var matrix = TourBridge.GetMatrix(points); var tourProvider = new TourProvider(vertices, matrix); var solvedVertices = tourProvider.Solve(); var orderedPoints = TourBridge.GetPoints(points, solvedVertices); return(orderedPoints.Select((p, i) => new OrderPoint() { PointId = p.PointId, Name = p.Name, HorizontalDisplacement = p.HorizontalDisplacement, VerticalDisplacement = p.VerticalDisplacement, OrderId = i })); }
public void SolveTest() { var vertices = new [] { 0, 1, 2, 3 }; var matrix = new double[, ] { { 0, 10, 15, 20 }, { 5, 0, 9, 10 }, { 6, 13, 0, 12 }, { 8, 8, 9, 0 } }; var expectedRoute = new [] { 0, 1, 3, 2, 0 }; var DynamicProgramming = new TourProvider(vertices, matrix); var route = DynamicProgramming.Solve(); Assert.IsTrue(ListComparer.Compare(expectedRoute, route.ToArray())); }