Exemplo n.º 1
0
        public void usunTakichSamychOsobnikow()
        {
            List <Osobnik> wszyscyOsobnicy = WszyscyOsobnicy;
            Osobnik        Wybraniec;
            Osobnik        doWyrzucenia;

            for (int i = 0; i < wszyscyOsobnicy.Count; i++)
            {
                Wybraniec = wszyscyOsobnicy[i];

                for (int j = i; j < wszyscyOsobnicy.Count; j++)
                {
                    doWyrzucenia = WszyscyOsobnicy[j];

                    if (Wybraniec.Equals(doWyrzucenia))
                    {
                        wszyscyOsobnicy = wyrzucanieOsobnika(doWyrzucenia, wszyscyOsobnicy);
                        // bo wyrzucani są wszyscy, a powinien zostać jeden taki osobnik, dlatego należy go później na nowo dodać
                        wszyscyOsobnicy.Add(doWyrzucenia);
                    }
                }
            }

            this.WszyscyOsobnicy = wszyscyOsobnicy;
        }
        public void wybierzNastepnePokolenie()
        {
            List <Osobnik> nowePokolenie  = new List <Osobnik>();
            List <Osobnik> listaOsobnikow = populacja.listaOsobnikow;
            List <Osobnik> listaRodzicow  = PopulacjaPotencjalnychRodzicow.listaOsobnikow;
            List <Osobnik> listaPotomkow  = PotomkowiePoKrzyzowaniu.listaOsobnikow;

            Osobnik Wybraniec;
            Osobnik rodzicDoWyrzucenia;
            Osobnik potomekDoWyrzucenia;

            for (int i = 0; i < listaOsobnikow.Count; i++)
            {
                Wybraniec = listaOsobnikow[i];

                for (int j = 0; j < listaRodzicow.Count; j++)
                {
                    rodzicDoWyrzucenia  = listaRodzicow[j];
                    potomekDoWyrzucenia = listaPotomkow[j];

                    if (Wybraniec.Equals(rodzicDoWyrzucenia))
                    {
                        nowePokolenie.Add(potomekDoWyrzucenia);
                        listaOsobnikow = wyrzucanieOsobnika(Wybraniec, listaOsobnikow);
                        listaRodzicow  = wyrzucanieOsobnika(rodzicDoWyrzucenia, listaRodzicow);
                        listaPotomkow  = wyrzucanieOsobnika(potomekDoWyrzucenia, listaPotomkow);
                    }
                }
            }

            for (int i = 0; i < listaOsobnikow.Count; i++)
            {
                nowePokolenie.Add(listaOsobnikow[i]);
            }

            Populacja PopulacjaZPotomkami = new Populacja();

            PopulacjaZPotomkami.SetListaOsobnikowNowaPopulacja(populacja.listaOsobnikow.Count, nowePokolenie, populacja.poczatkiLista, populacja.konceLista, populacja.precyzjaLista);

            this.populacja = PopulacjaZPotomkami;
        }
        public void wybierzNastepnePokolenie()
        {
            List <Osobnik> nowePokolenie = new List <Osobnik>();
            List <Osobnik> WszyscyOsobnicyBezTychZPierwotnejPopulacji = WszyscyNowiOsobnicy;

            Osobnik doWyrzucenia;
            Osobnik Wybraniec;

            for (int i = 0; i < populacja.listaOsobnikow.Count; i++)
            {
                Wybraniec = populacja.listaOsobnikow[i];

                for (int j = 0; j < WszyscyOsobnicyBezTychZPierwotnejPopulacji.Count; j++)
                {
                    doWyrzucenia = WszyscyOsobnicyBezTychZPierwotnejPopulacji[j];

                    if (Wybraniec.Equals(doWyrzucenia))
                    {
                        WszyscyOsobnicyBezTychZPierwotnejPopulacji = wyrzucanieOsobnika(doWyrzucenia, WszyscyOsobnicyBezTychZPierwotnejPopulacji);
                    }
                }
            }

            // tu można wybrać rodzaj sortowania osobników:

            //WszyscyOsobnicyBezTychZPierwotnejPopulacji = posortujOsobnikowRosnaco(WszyscyOsobnicyBezTychZPierwotnejPopulacji);
            WszyscyOsobnicyBezTychZPierwotnejPopulacji = posortujOsobnikowMalejaco(WszyscyOsobnicyBezTychZPierwotnejPopulacji);

            var rng = new Random(Guid.NewGuid().GetHashCode());

            int iloscOsobnikowZNastepnejPopulacji  = rng.Next(0, (populacja.listaOsobnikow.Count - 1));
            int iloscOsobnikowZPierwotnejPopulacji = populacja.listaOsobnikow.Count - iloscOsobnikowZNastepnejPopulacji;
            int index = 0;

            for (int i = 0; i < iloscOsobnikowZPierwotnejPopulacji; i++)
            {
                string  imie    = "Krolik " + i;
                Osobnik Potomek = new Osobnik(imie, populacja.listaOsobnikow[i]);
                Potomek.SetIndex(i);
                nowePokolenie.Add(Potomek);
            }

            for (int i = 0; i < iloscOsobnikowZNastepnejPopulacji; i++)
            {
                index = rng.Next(0, (WszyscyOsobnicyBezTychZPierwotnejPopulacji.Count - 1));
                string  imie    = "Krolik " + i;
                Osobnik Potomek = new Osobnik(imie, WszyscyOsobnicyBezTychZPierwotnejPopulacji[index]);
                Potomek.SetIndex(i);
                nowePokolenie.Add(Potomek);
            }

            List <Osobnik> Potomkowie = new List <Osobnik>();

            for (int i = 0; i < nowePokolenie.Count; i++)
            {
                string  imie    = "Krolik " + i;
                Osobnik Potomek = new Osobnik(imie, nowePokolenie[i]);
                Potomek.SetIndex(i);
                Potomkowie.Add(Potomek);
            }

            Populacja NowePokolenie = new Populacja();

            NowePokolenie.SetListaOsobnikowNowaPopulacja(populacja.listaOsobnikow.Count, Potomkowie, populacja.poczatkiLista, populacja.konceLista, populacja.precyzjaLista);

            this.populacja = NowePokolenie;
        }