Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public List<int> TweeOpt(int routeID, int startListIndex, int endListIndex)
- {
- List<int> bestRoute = Routes[routeID].GetRange(startListIndex+1, (endListIndex - startListIndex));
- Boolean improved = true;
- while (improved)
- {
- improved = false;
- for(int i = 0; i < bestRoute.Count-1; i++)
- {
- for(int j = i+1; j < bestRoute.Count; j++)
- {
- if (j - 1 == 1)
- continue;
- List<int> newRoute = OptSwap(bestRoute, i, j);
- if(CalculateSegmentTime(bestRoute) > CalculateSegmentTime(newRoute))
- {
- bestRoute = newRoute;
- improved = true;
- }
- }
- }
- }
- return bestRoute;
- }
- public List<int> OptSwap(List<int> route, int swapIndex1, int swapIndex2)
- {
- List<int> ordered = route.GetRange(0, swapIndex1);
- List<int> reversed = route.GetRange(swapIndex1, (swapIndex2 - swapIndex1)+1);
- reversed.Reverse();
- ordered.AddRange(reversed);
- ordered.AddRange(route.GetRange(swapIndex2 + 1, (route.Count - swapIndex2)-1));
- return ordered;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement