public override Solution executeStrategy(Solution toStartFrom) { Planning = toStartFrom.GetRandomPlanning(); if (Planning.Item3.Count == 0) return toStartFrom; OriginalRoute = Planning.Item3[random.Next(Planning.Item3.Count)]; if (OriginalRoute == null || OriginalRoute.Orders.Count < 2) return toStartFrom; int orderIndex = random.Next(OriginalRoute.Orders.Count - 1); OrderRemoved = OriginalRoute.Orders[orderIndex]; OrderBefore = orderIndex == 0 ? null : OriginalRoute.Orders[orderIndex - 1]; OrderRemoved.AddAvailableOrderBackToCluster(); OriginalRoute.RemoveOrder(OrderRemoved); if (OriginalRoute.Orders.Count == 1) { // Basically delete the route (remove it from planning) toStartFrom.RemoveRouteFromPlanning(Planning.Item1, Planning.Item2, OriginalRoute); toStartFrom.RemoveRoute(OriginalRoute); } strategyHasExecuted = true; return toStartFrom; }
private void swapOrders(Order A, Order B, Route route) { route.RemoveOrder(B); route.AddOrderAt(B, A); }