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()); }