Пример #1
0
        public static Osobnik Oblicz(Osobnik trasa)
        {
            int czasObliczeń = 1000 * 60 * 30;  //30 minut

            Stopwatch stoper = new Stopwatch();

            stoper.Start();
            while (stoper.ElapsedMilliseconds <= czasObliczeń)
            {
                Osobnik sąsiad = new Osobnik();
                sąsiad.genotyp = trasa.genotyp.GetRange(0, trasa.genotyp.Count);

                int punkt1 = Program.random.Next(trasa.genotyp.Count);
                int punkt2 = Program.random.Next(trasa.genotyp.Count);
                int temp;

                temp = sąsiad.genotyp[punkt1];
                sąsiad.genotyp[punkt1] = sąsiad.genotyp[punkt2];
                sąsiad.genotyp[punkt2] = temp;

                if (sąsiad.SzybkośćTrasy() != 0 && sąsiad.SzybkośćTrasy() < trasa.SzybkośćTrasy())
                {
                    trasa = sąsiad;
                    //Console.WriteLine(trasa.SzybkośćTrasy());
                }
            }

            stoper.Stop();

            Console.WriteLine("Znaleziona ścieżka: ");
            for (int i = 0; i < trasa.genotyp.Count; i++)
            {
                Console.Write(Osobnik.listaMiast[trasa.genotyp[i]].indeks + " ");
            }
            Console.WriteLine("\nSzybkość trasy: " + trasa.SzybkośćTrasy());
            Console.WriteLine("\nLiczba baterii: " + trasa.liczbaBateriiOsobnika);

            using (System.IO.StreamWriter zapisator =
                       new System.IO.StreamWriter(@"../../Wyniki/Z" + Program.nazwaPlikuWejściowego + "-" + Program.liczbaBaterii + "-" + DateTime.Now.ToString().Replace(':', '-') + ".txt"))
            {
                zapisator.WriteLine("\nSzybkość trasy: " + trasa.SzybkośćTrasy());
                zapisator.WriteLine("\nLiczba baterii: " + trasa.liczbaBateriiOsobnika);
                zapisator.WriteLine();

                for (int i = 0; i < trasa.genotyp.Count; i++)
                {
                    zapisator.Write(Osobnik.listaMiast[trasa.genotyp[i]].indeks + " ");
                }
                zapisator.WriteLine();
            }

            return(trasa);
        }
Пример #2
0
        public static void Oblicz(Osobnik[] populacja, string nazwaPlikuWejściowego, int wielkośćPopulacji, int liczbaPokoleń, string krzyżowanie, int liczbaBaterii, string selekcja, double prawdopodobieństwoMutacji)
        {
            for (int i = 0; i < liczbaPokoleń; i++)
            {
                Osobnik[] nowaPopulacja = new Osobnik[wielkośćPopulacji];

                for (int j = 0; j < wielkośćPopulacji; j++)
                {
                    Osobnik tata    = Selekcja.Selekcjonuj(Program.selekcja, populacja);
                    Osobnik mama    = Selekcja.Selekcjonuj(Program.selekcja, populacja);
                    Osobnik dziecko = Krzyżowanie.Krzyżuj(krzyżowanie, tata, mama);

                    //konkurencja między rodzicami i dzieckiem
                    if (tata.SzybkośćTrasy() < mama.SzybkośćTrasy())
                    {
                        nowaPopulacja[j] = tata;
                    }
                    else
                    {
                        nowaPopulacja[j] = mama;
                    }

                    if (dziecko.SzybkośćTrasy() < nowaPopulacja[j].SzybkośćTrasy())
                    {
                        nowaPopulacja[j] = dziecko;
                    }
                }
                populacja = nowaPopulacja;
            }

            Console.WriteLine("Znaleziona ścieżka: ");
            for (int i = 0; i < Program.niebo.genotyp.Count; i++)
            {
                Console.Write(Osobnik.listaMiast[Program.niebo.genotyp[i]].indeks + " ");
            }
            Console.WriteLine("\nSzybkość trasy: " + Program.niebo.SzybkośćTrasy());
            Console.WriteLine("\nLiczba baterii: " + Program.niebo.liczbaBateriiOsobnika);

            using (System.IO.StreamWriter zapisator =
                       new System.IO.StreamWriter(@"../../Wyniki/" + nazwaPlikuWejściowego + "-" + wielkośćPopulacji + "-" + liczbaPokoleń + "-" + krzyżowanie + "-" + liczbaBaterii + "-" + prawdopodobieństwoMutacji + "-" + selekcja + "-" + DateTime.Now.ToString().Replace(':', '-') + ".txt"))
            {
                zapisator.WriteLine("\nSzybkość trasy: " + Program.niebo.SzybkośćTrasy());
                zapisator.WriteLine("\nLiczba baterii: " + Program.niebo.liczbaBateriiOsobnika);
                zapisator.WriteLine();

                for (int i = 0; i < Program.niebo.genotyp.Count; i++)
                {
                    zapisator.Write(Osobnik.listaMiast[Program.niebo.genotyp[i]].indeks + " ");
                }
                zapisator.WriteLine();
            }
        }
Пример #3
0
 public static Osobnik PorównajOsobników(Osobnik osobnik1, Osobnik osobnik2)
 {
     if (osobnik1.SzybkośćTrasy() < osobnik2.SzybkośćTrasy())
     {
         if (osobnik1.SzybkośćTrasy() != 0)
         {
             return(osobnik1);
         }
         else if (osobnik2.SzybkośćTrasy() != 0)
         {
             return(osobnik2);
         }
         else
         {
             return(osobnik1);
         }
     }
     else
     {
         return(osobnik2);
     }
 }