3opt algorit SWAP
Hej , er der nogle der kan hjælpe mig jeg prøver at lave 3opt."3-opt analyse indebærer at man sletter 3 forbindelser (eller kanter) i et netværk (eller tur), også tilslutter man dem i netværket på alle andre mulige måder, og derefter vurdere hver gentilslutning. "
Jeg har en liste InitTur der indeholder mine ruter men den kommer ikke frem til et bedre resultat , noglde der kan se hvad jeg gør forkert
public static List<RuteLister> ThreeOpt(int i, int j, int k, List<RuteLister> InitTur, double _best_distance)
{
Afstande af = new Afstande();
List<RuteLister> newTour = new List<RuteLister>();
List<RuteLister> tempTour = new List<RuteLister>();
List<RuteLister> deltur1 = InitTur.GetRange(0, i);
List<RuteLister> deltur2 = InitTur.GetRange(deltur1.Count, j);
List<RuteLister> deltur3 = InitTur.GetRange(deltur1.Count + deltur2.Count, 2);
List<RuteLister> deltur4 = InitTur.GetRange(deltur1.Count + deltur2.Count + deltur3.Count, InitTur.Count - (deltur1.Count + deltur2.Count + deltur3.Count));
newTour = deltur1.Concat(deltur4).Concat(deltur3).Concat(deltur2).ToList();
double new_distance_swap1;
new_distance_swap1 = af.TourPrNyRuteDistance(newTour);
if (new_distance_swap1 < _best_distance) { InitTur = newTour; _best_distance = new_distance_swap1; Opt.Gain = true; }
if (Math.Abs(new_distance_swap1 - _best_distance) == 0) { Opt.Gain = false; }
//swap2
double new_distance_swap2;
newTour = deltur1.Concat(deltur3).Concat(deltur2).Concat(deltur4).ToList();
new_distance_swap2 = af.TourPrNyRuteDistance(newTour);
if (new_distance_swap2 < _best_distance) { InitTur = newTour; Opt.best_distance = new_distance_swap2; Opt.Gain = true; }
if (Math.Abs(new_distance_swap2 - _best_distance) == 0) { Opt.Gain = false; }
{
return InitTur;
}
}