public void NowaGenerazja() { if (Populacja.Count <= 0) { return; } ObliczFitness(); nowaPopulacja.Clear(); for (int i = 0; i < Populacja.Count; i++) { Tworzenie_Osobnika <T> rodzic1 = WybieranieRodzica(); Tworzenie_Osobnika <T> rodzic2 = WybieranieRodzica(); Tworzenie_Osobnika <T> dziecko = rodzic1.Mieszanie(rodzic2); dziecko.Mutacja(SzansaMutacji); nowaPopulacja.Add(dziecko); } List <Tworzenie_Osobnika <T> > tymczasowa_lista = Populacja;// Populacja = nowaPopulacja; nowaPopulacja = tymczasowa_lista;// Generacja++; }
public Tworzenie_Osobnika <T> Mieszanie(Tworzenie_Osobnika <T> Rodzic_dwa) { Tworzenie_Osobnika <T> dziecko = new Tworzenie_Osobnika <T>(Geny.Length, random, losowyGen, funkcjaFitness, czylosGeny: false); for (int i = 0; i < Geny.Length; i++) { dziecko.Geny[i] = random.NextDouble() < 0.5 ? Geny[i] : Rodzic_dwa.Geny[i]; } return(dziecko); }
private float funkcjaFitness(int index) //ktory przebiek byl najlepszy { float ile_przeskoczen = 0; //jak duzo razy przeskoczyl przez kulke Tworzenie_Osobnika <char> dna = AlgGen.Populacja[index]; for (int i = 0; i < dna.Geny.Length; i++) { if (ile_przeskoczen < score) { ile_przeskoczen += 1; ile_przeskoczen = (ile_przeskoczen * 6);//zwiększa znaczenie ilości przeskoczeń } } return(ile_przeskoczen); }
public void ObliczFitness() { wielkośćFitness = 0; Tworzenie_Osobnika <T> Najlepszy = Populacja[0]; for (int i = 0; i < Populacja.Count; i++) { wielkośćFitness += Populacja[i].ObliczFitness(i); if (Populacja[i].Fitness > Najlepszy.Fitness) { Najlepszy = Populacja[i]; } } NajlepszyFitness = Najlepszy.Fitness; Najlepszy.Geny.CopyTo(NajleszeGeny, 0); }
private void Timer_Tick(object sender, EventArgs e) { Tworzenie_Osobnika <char> Dna = AlgGen.Populacja[czynowaGena]; for (int i = 0; i < Dna.Geny.Length; i++) //dlogosc dna { if (Dna.Geny[i] == 'A') //wydobycie genow z osobnika { sim.Keyboard.KeyPress(VirtualKeyCode.VK_A); } if (Dna.Geny[i] == 'B') { sim.Keyboard.KeyPress(VirtualKeyCode.VK_B); } } Touch(); JumpPlayer(); MoveObsticle(); PlayerScore(); }