private void UpdatePheromone(List <ACOCity> path)
        {
            double pathLength = TSPDistance.CalculateLengthOfPath <ACOCity, ACODistance>(path);
            double deltaTau   = Convert.ToDouble(_Props.Q) / pathLength;

            for (int i = 0; i < path.Count - 1; i++)
            {
                ACODistance distance = (ACODistance)path[i].GetDistanceTo(path[i + 1]);
                distance.Pheromone = (1 - Convert.ToDouble(_Props.Rho)) * distance.Pheromone + deltaTau;
            }
        }
        private List <ACOCity> UpdatePathsData(List <List <ACOCity> > paths, List <ACOCity> bestPath)
        {
            foreach (List <ACOCity> path in paths)
            {
                if (bestPath == null)
                {
                    bestPath = path;
                }
                else
                {
                    double previousLength = TSPDistance.CalculateLengthOfPath <ACOCity, ACODistance>(bestPath);
                    double currentLength  = TSPDistance.CalculateLengthOfPath <ACOCity, ACODistance>(path);
                    if (currentLength <= previousLength)
                    {
                        bestPath = path;
                    }
                }
                UpdatePheromone(path);
            }

            return(bestPath);
        }