예제 #1
0
        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++;
        }
예제 #2
0
        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);
        }
예제 #3
0
파일: Form1.cs 프로젝트: Filmik/NAI
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
파일: Form1.cs 프로젝트: Filmik/NAI
        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();
        }