static void viewResults(AntInfo solution, Label l1) { l1.Text = " Path: "; for (int i = 0; i < solution.T.Count(); i++) { l1.Text += solution.T[i] + " "; } l1.Text += "\nPath length: " + solution.L; }
public static List <List <int> > CitiesCoordinatesSequence(List <List <int> > coordinates, AntInfo solution) { List <List <int> > coordsSequence = new List <List <int> >(); for (int i = 0; i < coordinates.Count() + 1; i++) { coordsSequence.Add(coordinates[solution.T[i]]); } return(coordsSequence); }
public static AntInfo AlgoGo(double alpha, double beta, List <List <int> > CitiesCoordinates, Label SolutionOut) { int N; double tau0 = 1; int Q = 10; double p = 0.6; Random rand = new Random(); double randNum; int chooseCityNum = 0; int Tmax = 10; List <List <double> > nu = new List <List <double> >(); // visibilities of cities List <List <double> > D = CountDistancesBetweenCities(CitiesCoordinates, nu); // distances between cities AntInfo Solution = new AntInfo(new List <int>(), 1000000); if (D.Any()) { N = D.Count(); List <List <double> > tau = new List <List <double> >(); List <List <double> > deltaTau = new List <List <double> >(); List <List <double> > P = new List <List <double> >(); double maybeBest; int indexBest; init(tau, N); init(deltaTau, N); init(P, N); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (i != j) { tau[i][j] = tau0; } else { tau[i][j] = 0; } } } for (int t = 0; t < Tmax; t++) { List <AntInfo> AllAntsInfo = new List <AntInfo>(); for (int k = 0; k < N; k++) // for every ant { List <int> visited = new List <int>(); List <int> forVisit = new List <int>(); initCities(forVisit, N); visited.Add(k); forVisit.Remove(k); for (int town = 0; town < N - 1; town++) { Pr(P, tau, nu, alpha, beta, visited[visited.Count() - 1], forVisit); randNum = rand.NextDouble(); double sum = P[visited[visited.Count() - 1]][0]; for (int q = 0; q < N; q++) { if (q + 1 < N && randNum > sum) { sum += P[visited[visited.Count() - 1]][q + 1]; } else { chooseCityNum = q; break; } } visited.Add(chooseCityNum); forVisit.Remove(chooseCityNum); } AllAntsInfo.Add(new AntInfo(visited, L(D, visited))); for (int i = 0; i < N; i++) { deltaTau[k][i] = deltaTauFor1Ant(Q, AllAntsInfo[k].L); } } maybeBest = AllAntsInfo.Min(x => x.L); if (maybeBest < Solution.L) { indexBest = AllAntsInfo.FindIndex(x => x.L == maybeBest); Solution.L = maybeBest; Solution.T = AllAntsInfo[indexBest].T; } for (int k = 0; k < N; k++) { for (int j = 0; j < N; j++) { tau[k][j] = newTau(p, tau[k][j], deltaTau[k][j]); } } } Solution.T.Add(Solution.T[0]); viewResults(Solution, SolutionOut); } return(Solution); }