public override void Optimize() { for (var i = 0; i < Constants.MultipleStartLocalSearchIterationNumber; i++) { ConstructionAlgorithm.ResetAlgorithm(); LocalSearch.ResetAlgorithm(); var randomIndex = RandomGenerator.Next(0, ConstructionAlgorithm.OperatingData.UnusedNodes.Count - 1); //var randomIndex = i; ConstructionAlgorithm.FindRoute(ConstructionAlgorithm.OperatingData.UnusedNodes[randomIndex]); LocalSearch.OperatingData = ConstructionAlgorithm.OperatingData.CloneData(); LocalSearch.Optimize(); if (LocalSearch.OperatingData.Distance < BestDistance) { BestDistance = LocalSearch.OperatingData.Distance; OperatingData = LocalSearch.OperatingData.CloneData(); BestSolutionInitialData = ConstructionAlgorithm.OperatingData.CloneData(); } } ConstructionAlgorithm.OperatingData = BestSolutionInitialData.CloneData(); }
public override void ResetAlgorithm() { BestDistance = int.MaxValue; LocalSearch.ResetAlgorithm(); ConstructionAlgorithm.ResetAlgorithm(); }