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