static void Main(string[] args) { List <Osobnik> listaWyników = new List <Osobnik>(); List <Osobnik> najlepsiPopulacji = new List <Osobnik>(); for (int index = 0; index < liczbaUruchomien; index++) { Osobnik[] populacja = new Osobnik[20]; // 20 = zalozony staly rozmiar populacji for (int i = 0; i < populacja.Length; ++i) { do { populacja[i] = new Osobnik(); populacja[i].m_genotyp = (uint)los.Next(int.MinValue, int.MaxValue); } while (CzyWZakresie(populacja[i])); } Osobnik maxUruchomienia = populacja[0]; int nr_pokolenia = 0; Osobnik maxPopulacji; while (nr_pokolenia++ < 1000) // 1000 - zalozona liczba pokolen { Osobnik[] nowa_populacja = new Osobnik[populacja.Length]; maxPopulacji = nowa_populacja[0]; for (int i = 0; i < nowa_populacja.Length; i++) // nowe pokolenie { Osobnik dziecko, mama, tata; do { mama = Selekcja(populacja); tata = Selekcja(populacja); dziecko = Rekombinacja(mama, tata); nowa_populacja[i] = dziecko; } while (CzyWZakresie(nowa_populacja[i])); } najlepsiPopulacji.Add(MaxPopulacji(populacja)); populacja = nowa_populacja; } for (int i = 0; i < populacja.Length; i++) { Console.WriteLine("{0} dla {1}", Osobnik.FunkcjaDopasowania(Osobnik.Fenotyp(populacja[i])), Osobnik.Fenotyp(populacja[i])); } listaWyników.Add(MaxPopulacji(najlepsiPopulacji.ToArray())); } Console.WriteLine("Średnia z wszystkich uruchomień: {0}", Średnia(listaWyników.ToArray())); Console.ReadKey(); }
static double Średnia(Osobnik[] wartosci) { double suma = 0.0; foreach (var item in wartosci) { suma += Osobnik.FunkcjaDopasowania(item.m_fenotyp); } return(suma / wartosci.Length); }
static Osobnik MaxPopulacji(Osobnik[] populacja) { Osobnik maxPopulacji = populacja[0]; foreach (var item in populacja) { if (Osobnik.FunkcjaDopasowania(item.m_fenotyp) > Osobnik.FunkcjaDopasowania(maxPopulacji.m_fenotyp)) { maxPopulacji = item; } } return(maxPopulacji); }
static Osobnik Selekcja(Osobnik[] populacji) { Osobnik k1 = populacji[los.Next(populacji.Length)]; Osobnik k2 = populacji[los.Next(populacji.Length)]; if (Osobnik.FunkcjaDopasowania(Osobnik.Fenotyp(k1)) > Osobnik.FunkcjaDopasowania(Osobnik.Fenotyp(k2))) { return(k1); } else { return(k2); } }