Example #1
0
 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;
 }
Example #2
0
        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);
        }
Example #3
0
        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);
        }