public override Solution executeStrategy(Solution toStartFrom) { Solution toReturn = toStartFrom.GetShallowCopy(); Day randomDay = toReturn.GetDays()[random.Next(toReturn.GetDays().Length)]; List<Route> randomRoutes = randomDay.GetRoutes(random.Next(Day.NUMBER_OF_TRUCKS)); Route randomChosenRoute = randomRoutes[random.Next(randomRoutes.Count)]; List<Order> orders = randomChosenRoute.Orders; int ordersLength = orders.Count; int orderIndex1 = random.Next(1, ordersLength); int orderIndex2 = -1; do { orderIndex2 = random.Next(1, ordersLength); } while (!(orderIndex2 >= 0 && orderIndex2 != orderIndex1)); Order toSwitch = orders[orderIndex1]; Order toSwitch2 = orders[orderIndex2]; Order toAddAfter = orders[orderIndex1 - 1]; Order toAddAfter2 = orders[orderIndex2 - 1]; randomChosenRoute.RemoveOrder(toSwitch, toReturn.GetOrdersCounter()); randomChosenRoute.RemoveOrder(toSwitch2, toReturn.GetOrdersCounter()); randomChosenRoute.AddOrder(toSwitch, toAddAfter2, toReturn.GetOrdersCounter()); randomChosenRoute.AddOrder(toSwitch, toAddAfter, toReturn.GetOrdersCounter()); return toReturn; }