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();
 }