static void Main(string[] args)
        {
            //zrobić wczytywanie mapy i wyliczanie odległości

            // domyślne parametry
            //optimal berlin52 7544.365901904087
            //optimal kroA200 29368
            string mapPath = "kroA200.txt";
            int numberOfIterations = 5000;
            int numberOfGeneratedCandidates = 200;
            int tabuLifeTime = 50;
            float frequencyAdjustment = 0.01F;

            // czytanie parametrów podanych przy wywołaniu
            var argsCount = args.Count();
            if (argsCount >= 1)
            {
                if (args[0] == "-help")
                {
                    Console.WriteLine("Parametry do podania nalezy podawać po kolei oddzielone spacjami");
                    Console.WriteLine("1. Ścieżka do pliku z współrzędnymi ");
                    Console.WriteLine("2. Ilość iteracji algorytmu  integer");
                    Console.WriteLine("3. Ilość generowanych kandydatów(par miast do zamiany) integer");
                    Console.WriteLine("4. Czas trwania karencji Tabu  integer");
                    Console.WriteLine("5. Współczynnik dostosowania częstotliwości  float");
                    return;
                }
                else if (argsCount != 5)
                {
                    Console.WriteLine("nie prawidłowa ilość parametrów. skorzystaj z opcji -help");
                    return;
                }
                else
                {
                    mapPath = args[0];
                    numberOfIterations = Convert.ToInt32(args[1]);
                    numberOfGeneratedCandidates = Convert.ToInt32(args[2]);
                    tabuLifeTime = Convert.ToInt32(args[3]);
                    frequencyAdjustment = Convert.ToSingle(args[4]);
                }

            }
            // wczytywanie mapy i kalkulacja odległości

            var cities = ReadCitiesCoordinates(mapPath);
            var distanceMap = CalculateDistanceForCoordinates(cities);

            // zmienne tymczasowe
            var bestSolutions = new List<Route>();
            var bestSolutionsIteration = new List<int>();

            // wykonanie algorytmu dziesięciokrotnie
            for (int i = 0; i < 10; i++)
            {

                var algorithm = new TabuAlgorithm(distanceMap, numberOfIterations, numberOfGeneratedCandidates, tabuLifeTime, frequencyAdjustment);
                algorithm.Run();
                // zapis najlepszych osobników
                bestSolutions.Add(algorithm.BestSolution);
                bestSolutionsIteration.Add(algorithm.BestSolutionIteration);
            }

            // zapis do pliku
            FileStream fs = new FileStream(DateTime.Now.ToString("HH_mm_ss") + ".csv", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            Console.SetOut(sw);
            Console.WriteLine("Iteracja najlepszego rozwiązania; Koszt najlepszego rozwiązania");
            for (int i = 0; i < 10; i++)
            {

                Console.WriteLine("{0};{1}", bestSolutionsIteration[i], bestSolutions[i].Cost.ToString("0.000000000"));
            }

            Console.WriteLine("Średni koszt;Nalepsza wartość kosztu;Najgorsza wartość kosztu");
            Console.WriteLine("{0};{1};{2}", bestSolutions.Average(g => g.Cost), bestSolutions.Min(g => g.Cost), bestSolutions.Max(g => g.Cost));
            Console.WriteLine("Średnia ilość iteracji;Nalepsza ilość iteracji;Najgorsza ilość iteracji");
            Console.WriteLine("{0};{1};{2}", bestSolutionsIteration.Average(), bestSolutionsIteration.Min(), bestSolutionsIteration.Max());

            var z = bestSolutions.OrderBy(b => b.Cost).First();

            foreach (var item in z.Points)
            {
                Console.WriteLine(item+1);
            }

            sw.Flush();
            fs.Flush(true);
            fs.Close();
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            //zrobić wczytywanie mapy i wyliczanie odległości

            // domyślne parametry
            //optimal berlin52 7544.365901904087
            //optimal kroA200 29368
            string mapPath                     = "kroA200.txt";
            int    numberOfIterations          = 5000;
            int    numberOfGeneratedCandidates = 200;
            int    tabuLifeTime                = 50;
            float  frequencyAdjustment         = 0.01F;

            // czytanie parametrów podanych przy wywołaniu
            var argsCount = args.Count();

            if (argsCount >= 1)
            {
                if (args[0] == "-help")
                {
                    Console.WriteLine("Parametry do podania nalezy podawać po kolei oddzielone spacjami");
                    Console.WriteLine("1. Ścieżka do pliku z współrzędnymi ");
                    Console.WriteLine("2. Ilość iteracji algorytmu  integer");
                    Console.WriteLine("3. Ilość generowanych kandydatów(par miast do zamiany) integer");
                    Console.WriteLine("4. Czas trwania karencji Tabu  integer");
                    Console.WriteLine("5. Współczynnik dostosowania częstotliwości  float");
                    return;
                }
                else if (argsCount != 5)
                {
                    Console.WriteLine("nie prawidłowa ilość parametrów. skorzystaj z opcji -help");
                    return;
                }
                else
                {
                    mapPath                     = args[0];
                    numberOfIterations          = Convert.ToInt32(args[1]);
                    numberOfGeneratedCandidates = Convert.ToInt32(args[2]);
                    tabuLifeTime                = Convert.ToInt32(args[3]);
                    frequencyAdjustment         = Convert.ToSingle(args[4]);
                }
            }
            // wczytywanie mapy i kalkulacja odległości

            var cities      = ReadCitiesCoordinates(mapPath);
            var distanceMap = CalculateDistanceForCoordinates(cities);

            // zmienne tymczasowe
            var bestSolutions          = new List <Route>();
            var bestSolutionsIteration = new List <int>();

            // wykonanie algorytmu dziesięciokrotnie
            for (int i = 0; i < 10; i++)
            {
                var algorithm = new TabuAlgorithm(distanceMap, numberOfIterations, numberOfGeneratedCandidates, tabuLifeTime, frequencyAdjustment);
                algorithm.Run();
                // zapis najlepszych osobników
                bestSolutions.Add(algorithm.BestSolution);
                bestSolutionsIteration.Add(algorithm.BestSolutionIteration);
            }

            // zapis do pliku
            FileStream   fs = new FileStream(DateTime.Now.ToString("HH_mm_ss") + ".csv", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);

            Console.SetOut(sw);
            Console.WriteLine("Iteracja najlepszego rozwiązania; Koszt najlepszego rozwiązania");
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("{0};{1}", bestSolutionsIteration[i], bestSolutions[i].Cost.ToString("0.000000000"));
            }

            Console.WriteLine("Średni koszt;Nalepsza wartość kosztu;Najgorsza wartość kosztu");
            Console.WriteLine("{0};{1};{2}", bestSolutions.Average(g => g.Cost), bestSolutions.Min(g => g.Cost), bestSolutions.Max(g => g.Cost));
            Console.WriteLine("Średnia ilość iteracji;Nalepsza ilość iteracji;Najgorsza ilość iteracji");
            Console.WriteLine("{0};{1};{2}", bestSolutionsIteration.Average(), bestSolutionsIteration.Min(), bestSolutionsIteration.Max());

            var z = bestSolutions.OrderBy(b => b.Cost).First();

            foreach (var item in z.Points)
            {
                Console.WriteLine(item + 1);
            }

            sw.Flush();
            fs.Flush(true);
            fs.Close();
        }