private static void Main(string[] args)
        {
            Środowisko srodowisko = new Środowisko();

            srodowisko.Populacja = new Populacja();
            srodowisko.Populacja.GenerujPierwsząPopulację();

            // Tutaj mamy się kręcić w pętli przez 1000 pokoleń tak czy tak, więc wywalone
            //if (srodowisko.WarunekStopu())
            //    Stop();

            for (int i = 0; i < 1000; i++)
            {
                if (i % 50 == 0)
                {
                    Console.WriteLine("x=" + Populacja.NajlepszyWHistorii.Fenotyp + ", f(x)=" + Środowisko.Funkcja(Populacja.NajlepszyWHistorii.Fenotyp));
                }

                srodowisko.Populacja.GenerujNowąPopulację_Turniej();
            }
            Osobnik x = Populacja.NajlepszyWHistorii;

            Console.WriteLine("x=" + x.Fenotyp + ", f(x)=" + Środowisko.Funkcja(x.Fenotyp));

            Console.ReadKey();
        }
        public Osobnik Selekcja_Turniej()
        {
            Random rng = new Random();

            Osobnik[] turniej = new Osobnik[RozmiarTurnieju];
            for (int i = 0; i < RozmiarTurnieju; i++)
            {
                turniej[i] = Osobniki[rng.Next(RozmiarPopulacji)];
            }
            return(turniej.OrderByDescending(x => Środowisko.Funkcja(x.Fenotyp)).First()); // zwraca najlepszego z turnieju`
        }
        public Osobnik NajlepszyWPopulacji()
        {
            Osobnik najlepszy = Osobniki[0];

            for (int i = 1; i < RozmiarPopulacji; i++)
            {
                najlepszy = Środowisko.Lepszy(najlepszy, Osobniki[i]);
            }

            NajlepszyWHistorii = Środowisko.Lepszy(najlepszy, NajlepszyWHistorii);

            return(najlepszy);
        }
        public void GenerujNowąPopulację_Turniej()
        {
            Populacja nowePokolenie = new Populacja();

            for (int i = 0; i < RozmiarPopulacji; i++)
            {
                do
                {
                    Osobnik mama = Selekcja_Turniej();
                    Osobnik tata = Selekcja_Turniej();

                    nowePokolenie.Osobniki[i] = Osobnik.Krzyżowanie(mama, tata);
                    nowePokolenie.Osobniki[i].Mutacja();
                } while(nowePokolenie.Osobniki[i].ŚmiertelnieZmutowany()); // Niektóre osobniki mogą być niedopuszczalne do rozwiązania
            }

            NajlepszyWHistorii = Środowisko.Lepszy(NajlepszyWHistorii, nowePokolenie.NajlepszyWPopulacji());
        }