Example #1
0
        public void wylosujPotencjalnychRodzicow()
        {
            Selekcja Selekcja = new Selekcja(populacja);

            Selekcja.obliczWartoscPopulacji();
            Selekcja.obliczPrawdopodobienstwo();
            Selekcja.setDystrybuantyDlaOsobnikow();

            // tu można wybrać interesującą nas selekcje:

            //List<Osobnik> WylosowaniOsobnicySukcesji = Selekcja.obracanieRulatki();
            List <Osobnik> WylosowaniOsobnicySukcesji = Selekcja.wyborOsobnikowMetodaRankingowaMalejaco();
            //List<Osobnik> WylosowaniOsobnicySukcesji = Selekcja.wyborOsobnikowMetodaRankingowaRosnaco();
            //List<Osobnik> WylosowaniOsobnicySukcesji = Selekcja.ZwracajacaWyborOsobnikowMetodaTurniejowaMalejaco(2);  //w nawiasie ilość osób w grupie
            //List<Osobnik> WylosowaniOsobnicySukcesji = Selekcja.ZwracajacaWyborOsobnikowMetodaTurniejowaRosnaco(2);
            //List<Osobnik> WylosowaniOsobnicySukcesji = Selekcja.wyborOsobnikowMetodaTurniejowaMalejaco(2);
            //List<Osobnik> WylosowaniOsobnicySukcesji = Selekcja.wyborOsobnikowMetodaTurniejowaRosnaco(2);
            List <Osobnik> potencjalniRodzice = new List <Osobnik>();

            for (int i = 0; i < WylosowaniOsobnicySukcesji.Count; i++)
            {
                string  imie = "Potencjalny rodzic " + i;
                Osobnik potencjalnyRodzic = new Osobnik(imie, WylosowaniOsobnicySukcesji[i]);
                potencjalnyRodzic.SetIndex(i);
                potencjalniRodzice.Add(potencjalnyRodzic);
            }

            Populacja PopulacjaPotencjalnychRodzicow = new Populacja();

            PopulacjaPotencjalnychRodzicow.SetListaOsobnikowNowaPopulacja(WylosowaniOsobnicySukcesji.Count, potencjalniRodzice, populacja.poczatkiLista, populacja.konceLista, populacja.precyzjaLista);

            this.PopulacjaPotencjalnychRodzicow = PopulacjaPotencjalnychRodzicow;
        }
        public void krzyzujOsobnikow()
        {
            Selekcja Krzyzowanie = new Selekcja(PopulacjaPotencjalnychRodzicow);

            Krzyzowanie.wyborOsobnikowDoKrzyzowania();

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

            for (int i = 0; i < Krzyzowanie.osobnicyDoSparowania.Count; i++)
            {
                string  imie   = "Rodzic " + i;
                Osobnik Rodzic = new Osobnik(imie, Krzyzowanie.osobnicyDoSparowania[i]);
                Rodzic.SetIndex(i);
                przyszliRodzice.Add(Rodzic);
            }

            Populacja PopulacjaRodzicow = new Populacja();

            PopulacjaRodzicow = PopulacjaPotencjalnychRodzicow;
            PopulacjaRodzicow.SetListaOsobnikow(przyszliRodzice);

            Selekcja Parowanie = new Selekcja(PopulacjaRodzicow);

            Parowanie.SetOsobnicyDoSparowania(przyszliRodzice);

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

            for (int i = 0; i < (Krzyzowanie.osobnicyDoSparowania.Count / 2); i++)
            {
                Parowanie.stworzPare();

                // tu można wybrać interesujący nas rodzaj krzyżowania:

                //PopulacjaRodzicow.krzyzowanieJednopunktowe(Parowanie.para[0].calyLancuchBinarny, Parowanie.para[1].calyLancuchBinarny);
                //PopulacjaRodzicow.krzyzowanieDwupunktowe(Parowanie.para[0].calyLancuchBinarny, Parowanie.para[1].calyLancuchBinarny);
                //PopulacjaRodzicow.krzyzowanieWielopunktowe(Parowanie.para[0].calyLancuchBinarny, Parowanie.para[1].calyLancuchBinarny);
                PopulacjaRodzicow.krzyzowanieRownomierne(Parowanie.para[0].calyLancuchBinarny, Parowanie.para[1].calyLancuchBinarny);

                for (int j = 0; j < PopulacjaRodzicow.listaPotomkow.Count; j++)
                {
                    PotomkowieKrzyzowania.Add(PopulacjaRodzicow.listaPotomkow[j]);
                }
            }

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

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

            Populacja PotomkowiePoKrzyzowaniu = PopulacjaRodzicow;

            PotomkowiePoKrzyzowaniu.SetListaOsobnikow(Potomkowie);

            this.PotomkowiePoKrzyzowaniu = PotomkowiePoKrzyzowaniu;
        }
Example #3
0
        public void wybierzNastepnePokolenie()
        {
            List <Osobnik> nowePokolenie = new List <Osobnik>();

            for (int i = 0; i < populacja.listaOsobnikow.Count; i++)
            {
                string  imie    = "Krolik " + i;
                Osobnik Potomek = new Osobnik(imie, WszyscyOsobnicy[i]);
                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 = populacja;

            NowePokolenie.SetListaOsobnikow(Potomkowie);

            this.populacja = NowePokolenie;
        }
Example #4
0
        public void wybierzNastepnePokolenie()
        {
            List <Osobnik> nowePokolenie = new List <Osobnik>();
            var            rng           = new Random(Guid.NewGuid().GetHashCode());

            for (int i = 0; i < populacja.listaOsobnikow.Count; i++)
            {
                int     index   = rng.Next(0, (WszyscyOsobnicy.Count - 1));
                string  imie    = "Krolik " + i;
                Osobnik Potomek = new Osobnik(imie, WszyscyOsobnicy[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 = populacja;

            NowePokolenie.SetListaOsobnikow(Potomkowie);

            this.populacja = NowePokolenie;
        }
Example #5
0
        // KRZYŻOWANIE:

        // KRZYŻOWANIE JEDNOPUNKTOWE:

        public void krzyzowanieJednopunktowe(string lancuchPierwszegoRodzica, string lancuchDrugiegoRodzica)
        {
            string lancuchPierwszegoPotomka = string.Empty;

            char[] lancuchPierwszegoRodzicaJakoChar = lancuchPierwszegoRodzica.ToCharArray();
            string lancuchDrugiegoPotomka           = string.Empty;

            char[]         lancuchDrugiegoRodzicaJakoChar = lancuchDrugiegoRodzica.ToCharArray();
            List <string>  listaLancuchow = new List <string>();
            List <Osobnik> listaPotomkow  = new List <Osobnik>();

            var rng = new Random(Guid.NewGuid().GetHashCode());
            int r;
            int m = (int)listaOsobnikow[0].dlugoscCalegoLancucha - 1;

            r = rng.Next(1, m);

            //Console.WriteLine();
            //Console.WriteLine("Punkt krzyzowania to: " + r);

            for (int i = 0; i <= r; i++)
            {
                lancuchPierwszegoPotomka += string.Concat(lancuchPierwszegoRodzicaJakoChar[i]);
                lancuchDrugiegoPotomka   += string.Concat(lancuchDrugiegoRodzicaJakoChar[i]);
            }

            for (int i = r + 1; i <= m; i++)
            {
                lancuchPierwszegoPotomka += string.Concat(lancuchDrugiegoRodzicaJakoChar[i]);
                lancuchDrugiegoPotomka   += string.Concat(lancuchPierwszegoRodzicaJakoChar[i]);
            }

            listaLancuchow.Add(lancuchPierwszegoPotomka);
            listaLancuchow.Add(lancuchDrugiegoPotomka);

            for (int i = 0; i < listaLancuchow.Count; i++)
            {
                string  imie    = "Potomek krolika " + i + "" + i;
                Osobnik Potomek = new Osobnik(imie);

                for (int j = 0; j < this.poczatkiLista.Count; j++)
                {
                    PunktGenetyczny Punkt = new PunktGenetyczny(this.poczatkiLista[j], this.konceLista[j], this.precyzjaLista[j]);
                    Punkt.Policz();
                    Punkt.generujLancuchBinarny(Punkt.dlugosclancucha);
                    Punkt.przesuniecieDoPrzedzialu();
                    Potomek.punktyGenetyczne.Add(Punkt);
                }

                Potomek.przydzielNowyLancuchBinarny(listaLancuchow[i]);
                Potomek.SetWartoscOsobnika();
                Potomek.SetScalLancuchBinarny();
                Potomek.policzDlugoscCalegoLancucha();
                listaPotomkow.Add(Potomek);
            }

            this.listaPotomkow = listaPotomkow;
        }
Example #6
0
 public Osobnik(Osobnik osobnikDoZduplikowania)
 {
     this.imie                  = osobnikDoZduplikowania.imie;
     this.punktyGenetyczne      = osobnikDoZduplikowania.punktyGenetyczne;
     this.wartoscOsobnika       = osobnikDoZduplikowania.wartoscOsobnika;
     this.prawdopodobienstwo    = osobnikDoZduplikowania.prawdopodobienstwo;
     this.dystrybuanta          = osobnikDoZduplikowania.dystrybuanta;
     this.calyLancuchBinarny    = osobnikDoZduplikowania.calyLancuchBinarny;
     this.dlugoscCalegoLancucha = osobnikDoZduplikowania.dlugoscCalegoLancucha;
 }
Example #7
0
        public void SetListaOsobnikow(List <Osobnik> listaOsobnikow)
        {
            List <Osobnik> listaDoZastapienia = new List <Osobnik>();

            for (int i = 0; i < listaOsobnikow.Count; i++)
            {
                string  imie      = "Kroliczek " + i;
                Osobnik Kroliczek = new Osobnik(imie, listaOsobnikow[i]);
                listaDoZastapienia.Add(Kroliczek);
            }

            this.listaOsobnikow = listaDoZastapienia;
        }
Example #8
0
        public void wybierzNastepnePokolenie()
        {
            List <Osobnik> nowePokolenie = WszyscyOsobnicy;

            nowePokolenie = usunPodobnychOsobnikow(nowePokolenie);

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

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

                nowePokolenie = usunPodobnychOsobnikow(nowePokolenie);
            }

            if (nowePokolenie.Count > populacja.listaOsobnikow.Count)
            {
                List <Osobnik> nowePokoleniePoOdjeciuNadmiaru = new List <Osobnik>();

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

                nowePokolenie = nowePokoleniePoOdjeciuNadmiaru;
            }

            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 = populacja;

            NowePokolenie.SetListaOsobnikow(Potomkowie);

            this.populacja = NowePokolenie;
        }
Example #9
0
        public void SetListaOsobnikowNowaPopulacja(int ileOsobnikow, List <Osobnik> listaOsobnikow, List <double> listaPoczatkow, List <double> listaKoncow, List <double> listaPrecyzji)
        {
            List <Osobnik> listaDoZastapienia = new List <Osobnik>();

            this.poczatkiLista = listaPoczatkow;
            this.konceLista    = listaKoncow;
            this.precyzjaLista = listaPrecyzji;

            for (int i = 0; i < ileOsobnikow; i++)
            {
                string  imie      = "Kroliczek " + i;
                Osobnik Kroliczek = new Osobnik(imie, listaOsobnikow[i]);
                listaDoZastapienia.Add(Kroliczek);
            }

            this.listaOsobnikow = listaDoZastapienia;
        }
Example #10
0
 public override bool Equals(object obj)
 {
     if (obj is Osobnik)
     {
         Osobnik tmp = obj as Osobnik;
         if (this.calyLancuchBinarny.Equals(tmp.calyLancuchBinarny))
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
Example #11
0
        public void generujPopulacje(int iloscOsobnikow)
        {
            for (int i = 0; i < iloscOsobnikow; i++)
            {
                string  imie   = "Krolik " + i;
                Osobnik Krolik = new Osobnik(imie);

                for (int j = 0; j < this.poczatkiLista.Count; j++)
                {
                    PunktGenetyczny Punkt = new PunktGenetyczny(this.poczatkiLista[j], this.konceLista[j], this.precyzjaLista[j]);
                    Punkt.Policz();
                    Punkt.generujLancuchBinarny(Punkt.dlugosclancucha);
                    Punkt.przesuniecieDoPrzedzialu();
                    Krolik.punktyGenetyczne.Add(Punkt);
                }

                Krolik.scalLancuchBinarny();
                Krolik.policzDlugoscCalegoLancucha();
                Krolik.algorytm();
                Krolik.SetIndex(i);
                listaOsobnikow.Add(Krolik);
            }
        }
Example #12
0
        public List <Osobnik> wyrzucanieOsobnika(Osobnik doWyrzucenia, List <Osobnik> pozostaliOsobnicy)
        {
            var nowaLista = pozostaliOsobnicy.Select(x => x).Where(x => x.wartoscOsobnika != doWyrzucenia.wartoscOsobnika).Select(x => x).ToList <Osobnik>();

            return(nowaLista);
        }
        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;
        }
Example #14
0
        // METODA TURNIEJOWA:

        public List <Osobnik> wyrzucanieOsobnika(Osobnik zwrocony, List <Osobnik> pozostaliOsobnicy)
        {
            var nowaLista = pozostaliOsobnicy.Where(x => x.id != zwrocony.id).Select(x => x).ToList <Osobnik>();

            return(nowaLista);
        }
Example #15
0
        // KRZYŻOWANIE RÓWNOMIERNE:

        public void krzyzowanieRownomierne(string lancuchPierwszegoRodzica, string lancuchDrugiegoRodzica)
        {
            string lancuchPierwszegoPotomka = string.Empty;

            char[] lancuchPierwszegoRodzicaJakoChar = lancuchPierwszegoRodzica.ToCharArray();
            string lancuchDrugiegoPotomka           = string.Empty;

            char[]         lancuchDrugiegoRodzicaJakoChar = lancuchDrugiegoRodzica.ToCharArray();
            List <string>  listaLancuchow = new List <string>();
            List <Osobnik> listaPotomkow  = new List <Osobnik>();

            var rng = new Random(Guid.NewGuid().GetHashCode());
            int indexWzorca;
            int m = (int)listaOsobnikow[0].dlugoscCalegoLancucha - 1;

            indexWzorca = rng.Next(0, listaOsobnikow.Count);

            Osobnik Wzorzec = listaOsobnikow[indexWzorca];

            //Console.WriteLine("Lancuch osobnika bedacego wzorcem: " + Wzorzec.calyLancuchBinarny);
            //Console.WriteLine();

            char[] lancuchWzorcowy = Wzorzec.calyLancuchBinarny.ToCharArray();

            for (int i = 0; i <= m; i++)
            {
                if (lancuchWzorcowy[i] == '0')
                {
                    lancuchPierwszegoPotomka += string.Concat(lancuchPierwszegoRodzicaJakoChar[i]);
                }
                else if (lancuchWzorcowy[i] == '1')
                {
                    lancuchPierwszegoPotomka += string.Concat(lancuchDrugiegoRodzicaJakoChar[i]);
                }
            }

            listaLancuchow.Add(lancuchPierwszegoPotomka);

            for (int i = 0; i <= m; i++)
            {
                if (lancuchWzorcowy[i] == '1')
                {
                    lancuchDrugiegoPotomka += string.Concat(lancuchPierwszegoRodzicaJakoChar[i]);
                }
                else if (lancuchWzorcowy[i] == '0')
                {
                    lancuchDrugiegoPotomka += string.Concat(lancuchDrugiegoRodzicaJakoChar[i]);
                }
            }

            listaLancuchow.Add(lancuchDrugiegoPotomka);

            for (int i = 0; i < listaLancuchow.Count; i++)
            {
                string  imie    = "Potomek krolika " + i + "" + i;
                Osobnik Potomek = new Osobnik(imie);

                for (int j = 0; j < this.poczatkiLista.Count; j++)
                {
                    PunktGenetyczny Punkt = new PunktGenetyczny(this.poczatkiLista[j], this.konceLista[j], this.precyzjaLista[j]);
                    Punkt.Policz();
                    Punkt.generujLancuchBinarny(Punkt.dlugosclancucha);
                    Punkt.przesuniecieDoPrzedzialu();
                    Potomek.punktyGenetyczne.Add(Punkt);
                }

                Potomek.przydzielNowyLancuchBinarny(listaLancuchow[i]);
                Potomek.SetWartoscOsobnika();
                Potomek.SetScalLancuchBinarny();
                Potomek.policzDlugoscCalegoLancucha();
                listaPotomkow.Add(Potomek);
            }

            this.listaPotomkow = listaPotomkow;
        }
Example #16
0
        // KRZYŻOWANIE WIELOPUNKTOWE:

        public void krzyzowanieWielopunktowe(string lancuchPierwszegoRodzica, string lancuchDrugiegoRodzica)
        {
            string lancuchPierwszegoPotomka = string.Empty;

            char[] lancuchPierwszegoRodzicaJakoChar = lancuchPierwszegoRodzica.ToCharArray();
            string lancuchDrugiegoPotomka           = string.Empty;

            char[]         lancuchDrugiegoRodzicaJakoChar = lancuchDrugiegoRodzica.ToCharArray();
            List <string>  listaLancuchow          = new List <string>();
            List <Osobnik> listaPotomkow           = new List <Osobnik>();
            List <int>     listaPunktowKrzyzowania = new List <int>();

            var rng = new Random(Guid.NewGuid().GetHashCode());
            int r;
            int o = 0;
            int ktoryPunkt;
            int poczatkowyPunktDoLosowania = 0;
            int m = (int)listaOsobnikow[0].dlugoscCalegoLancucha - 1;

            r = rng.Next(1, ((m / 2) - 2));

            //Console.WriteLine();
            //Console.WriteLine("Ilosc punktow krzyzowania: " + r);

            for (int i = 0; i < r; i++)
            {
                ktoryPunkt = i + 1;

                if (poczatkowyPunktDoLosowania < m - 2)
                {
                    o = rng.Next(poczatkowyPunktDoLosowania + 1, m);

                    //Console.WriteLine();
                    //Console.WriteLine("{0} punkt to: {1}", i, o);

                    if (ktoryPunkt % 2 != 0)
                    {
                        for (int j = poczatkowyPunktDoLosowania; j < o; j++)
                        {
                            lancuchPierwszegoPotomka += string.Concat(lancuchPierwszegoRodzicaJakoChar[j]);
                            lancuchDrugiegoPotomka   += string.Concat(lancuchDrugiegoRodzicaJakoChar[j]);
                        }
                    }
                    else if (ktoryPunkt % 2 == 0)
                    {
                        for (int j = poczatkowyPunktDoLosowania; j < o; j++)
                        {
                            lancuchPierwszegoPotomka += string.Concat(lancuchDrugiegoRodzicaJakoChar[j]);
                            lancuchDrugiegoPotomka   += string.Concat(lancuchPierwszegoRodzicaJakoChar[j]);
                        }
                    }

                    poczatkowyPunktDoLosowania = o;

                    if (r == ktoryPunkt)
                    {
                        if (r % 2 != 0)
                        {
                            for (int j = poczatkowyPunktDoLosowania; j <= m; j++)
                            {
                                lancuchPierwszegoPotomka += string.Concat(lancuchDrugiegoRodzicaJakoChar[j]);
                                lancuchDrugiegoPotomka   += string.Concat(lancuchPierwszegoRodzicaJakoChar[j]);
                            }
                        }
                        else if (r % 2 == 0)
                        {
                            for (int j = poczatkowyPunktDoLosowania; j <= m; j++)
                            {
                                lancuchPierwszegoPotomka += string.Concat(lancuchPierwszegoRodzicaJakoChar[j]);
                                lancuchDrugiegoPotomka   += string.Concat(lancuchDrugiegoRodzicaJakoChar[j]);
                            }
                        }
                    }
                }
                else if (poczatkowyPunktDoLosowania >= m - 2)
                {
                    if (r == ktoryPunkt)
                    {
                        if (r % 2 != 0)
                        {
                            for (int j = poczatkowyPunktDoLosowania; j <= m; j++)
                            {
                                lancuchPierwszegoPotomka += string.Concat(lancuchDrugiegoRodzicaJakoChar[j]);
                                lancuchDrugiegoPotomka   += string.Concat(lancuchPierwszegoRodzicaJakoChar[j]);
                            }
                        }
                        else if (r % 2 == 0)
                        {
                            for (int j = poczatkowyPunktDoLosowania; j <= m; j++)
                            {
                                lancuchPierwszegoPotomka += string.Concat(lancuchPierwszegoRodzicaJakoChar[j]);
                                lancuchDrugiegoPotomka   += string.Concat(lancuchDrugiegoRodzicaJakoChar[j]);
                            }
                        }
                    }
                    o = 0;
                }
            }

            listaLancuchow.Add(lancuchPierwszegoPotomka);
            listaLancuchow.Add(lancuchDrugiegoPotomka);

            for (int i = 0; i < listaLancuchow.Count; i++)
            {
                string  imie    = "Potomek krolika " + i + "" + i;
                Osobnik Potomek = new Osobnik(imie);

                for (int j = 0; j < this.poczatkiLista.Count; j++)
                {
                    PunktGenetyczny Punkt = new PunktGenetyczny(this.poczatkiLista[j], this.konceLista[j], this.precyzjaLista[j]);
                    Punkt.Policz();
                    Punkt.generujLancuchBinarny(Punkt.dlugosclancucha);
                    Punkt.przesuniecieDoPrzedzialu();
                    Potomek.punktyGenetyczne.Add(Punkt);
                }

                Potomek.przydzielNowyLancuchBinarny(listaLancuchow[i]);
                Potomek.SetWartoscOsobnika();
                Potomek.SetScalLancuchBinarny();
                Potomek.policzDlugoscCalegoLancucha();
                listaPotomkow.Add(Potomek);
            }

            this.listaPotomkow = listaPotomkow;
        }