Example #1
0
 public Algorytm(Osobnik[] populacja_startowa, Selekcja selekcja, Rekombinacja rekombinacja, Mutacja mutacja, WarunekStopu warunek_stopu, int parametr_stopu, Fenotyp fenotyp, FunkcjaCelu funkcja_celu)
 {
     populacja           = populacja_startowa;
     this.selekcja       = selekcja;
     this.rekombinacja   = rekombinacja;
     this.mutacja        = mutacja;
     this.fenotyp        = fenotyp;
     this.funkcja_celu   = funkcja_celu;
     liczba_osobników    = populacja_startowa.Length;
     this.warunek_stopu  = warunek_stopu;
     this.parametr_stopu = parametr_stopu;
     nowa_populacja      = new Osobnik[Liczba_osobników];
 }
Example #2
0
        public override Osobnik DokonajSelekcji(Osobnik[] populacja, Fenotyp fenotyp, FunkcjaCelu funkcja_celu)
        {
            int indeks_kandydata1 = LosowaKlasa.Los.Next(Algorytm.Liczba_osobników);
            int indeks_kandydata2 = LosowaKlasa.Los.Next(Algorytm.Liczba_osobników);

            Osobnik kandydat1 = populacja[indeks_kandydata1];
            Osobnik kandydat2 = populacja[indeks_kandydata2];

            if (kandydat1.Wartość < kandydat2.Wartość)
            {
                return(kandydat1);
            }
            else
            {
                return(kandydat2);
            }
        }
Example #3
0
        public override Osobnik DokonajSelekcji(Osobnik[] populacja, Fenotyp fenotyp, FunkcjaCelu funkcja_celu)
        {
            Osobnik[] tymczasowa_populacja = new Osobnik[Algorytm.Liczba_osobników];
            populacja.CopyTo(tymczasowa_populacja, 0);

            tymczasowa_populacja = tymczasowa_populacja.OrderByDescending(x => x.Wartość).ToArray();


            double wylosowane_prawdopodobieństwo = LosowaKlasa.Los.NextDouble();
            double akumulator_prawdopodobieństw  = 0;

            for (int i = 0; i < Algorytm.Liczba_osobników; i++)
            {
                akumulator_prawdopodobieństw += prawdopodobieństwa[i];
                if (akumulator_prawdopodobieństw >= wylosowane_prawdopodobieństwo)
                {
                    return(tymczasowa_populacja[i]);
                }
            }
            Console.WriteLine("UPS");
            return(new Osobnik(null, null, null));
        }
Example #4
0
 public abstract Osobnik DokonajRekombinacji(Osobnik mama, Osobnik tata, Mutacja mutacja, Fenotyp fenotyp, FunkcjaCelu funkcja_celu);
Example #5
0
        public override Osobnik DokonajRekombinacji(Osobnik mama, Osobnik tata, Mutacja mutacja, Fenotyp fenotyp, FunkcjaCelu funkcja_celu)
        {
            int liczba_miast = Miasta.Liczba_miast;

            int[] genotyp_dziecka = new int[liczba_miast];

            Osobnik dziecko;

            int[] na_którym_miejscu_w_matce = new int[liczba_miast];

            for (int i = 0; i < liczba_miast; i++)
            {
                na_którym_miejscu_w_matce[mama.Genotyp[i] - 1] = i;
            }

            int indeks = 0;

            do
            {
                genotyp_dziecka[indeks] = mama.Genotyp[indeks];
                indeks = na_którym_miejscu_w_matce[tata.Genotyp[indeks] - 1];
            } while (indeks != 0);

            for (int i = 0; i < liczba_miast; i++)
            {
                if (genotyp_dziecka[i] == 0)
                {
                    genotyp_dziecka[i] = tata.Genotyp[i];
                }
            }

            double wylosowana_liczba = LosowaKlasa.Los.NextDouble();

            if (wylosowana_liczba < mutacja.Prawdopodobieństwo_mutacji)
            {
                genotyp_dziecka = mutacja.Mutuj(genotyp_dziecka);
            }

            dziecko = new Osobnik(genotyp_dziecka, fenotyp, funkcja_celu);

            return(dziecko);
        }
Example #6
0
        public override Osobnik DokonajRekombinacji(Osobnik mama, Osobnik tata, Mutacja mutacja, Fenotyp fenotyp, FunkcjaCelu funkcja_celu)
        {
            int liczba_miast = Miasta.Liczba_miast;

            int[] genotyp_dziecka = new int[liczba_miast];

            Osobnik dziecko;

            int punkt_przecięcia  = LosowaKlasa.Los.Next(liczba_miast);
            int punkt_przecięcia2 = LosowaKlasa.Los.Next(liczba_miast);


            bool[] czy_dziecko_zawiera      = new bool[liczba_miast];
            int[]  na_którym_miejscu_w_ojcu = new int[liczba_miast];

            for (int i = 0; i < liczba_miast; i++)
            {
                na_którym_miejscu_w_ojcu[tata.Genotyp[i] - 1] = i;
            }

            if (punkt_przecięcia > punkt_przecięcia2)
            {
                for (int i = punkt_przecięcia; i < liczba_miast; i++)
                {
                    genotyp_dziecka[i] = tata.Genotyp[i];
                    czy_dziecko_zawiera[genotyp_dziecka[i] - 1] = true;
                }

                for (int i = 0; i < punkt_przecięcia2; i++)
                {
                    genotyp_dziecka[i] = tata.Genotyp[i];
                    czy_dziecko_zawiera[genotyp_dziecka[i] - 1] = true;
                }

                for (int i = punkt_przecięcia2; i < punkt_przecięcia; i++)
                {
                    int tymczasowa_liczba = mama.Genotyp[i];
                    while (czy_dziecko_zawiera[tymczasowa_liczba - 1])
                    {
                        tymczasowa_liczba = mama.Genotyp[na_którym_miejscu_w_ojcu[tymczasowa_liczba - 1]];
                    }
                    genotyp_dziecka[i] = tymczasowa_liczba;
                }
            }
            else
            {
                for (int i = punkt_przecięcia; i < punkt_przecięcia2; i++)
                {
                    genotyp_dziecka[i] = tata.Genotyp[i];
                    czy_dziecko_zawiera[genotyp_dziecka[i] - 1] = true;
                }

                for (int i = 0; i < punkt_przecięcia; i++)
                {
                    int tymczasowa_liczba = mama.Genotyp[i];
                    while (czy_dziecko_zawiera[tymczasowa_liczba - 1])
                    {
                        tymczasowa_liczba = mama.Genotyp[na_którym_miejscu_w_ojcu[tymczasowa_liczba - 1]];
                    }
                    genotyp_dziecka[i] = tymczasowa_liczba;
                }

                for (int i = punkt_przecięcia2; i < liczba_miast; i++)
                {
                    int tymczasowa_liczba = mama.Genotyp[i];
                    while (czy_dziecko_zawiera[tymczasowa_liczba - 1])
                    {
                        tymczasowa_liczba = mama.Genotyp[na_którym_miejscu_w_ojcu[tymczasowa_liczba - 1]];
                    }
                    genotyp_dziecka[i] = tymczasowa_liczba;
                }
            }

            double wylosowana_liczba = LosowaKlasa.Los.NextDouble();

            if (wylosowana_liczba < mutacja.Prawdopodobieństwo_mutacji)
            {
                genotyp_dziecka = mutacja.Mutuj(genotyp_dziecka);
            }

            dziecko = new Osobnik(genotyp_dziecka, fenotyp, funkcja_celu);

            return(dziecko);
        }
        public override Osobnik DokonajRekombinacji(Osobnik mama, Osobnik tata, Mutacja mutacja, Fenotyp fenotyp, FunkcjaCelu funkcja_celu)
        {
            int     liczba_miast = Miasta.Liczba_miast;
            Osobnik dziecko;

            int[] genotyp_dziecka = new int[liczba_miast];

            int punkt_przecięcia = LosowaKlasa.Los.Next(liczba_miast);

            for (int i = 0; i < punkt_przecięcia; i++)
            {
                genotyp_dziecka[i] = mama.Genotyp[i];
            }

            for (int i = punkt_przecięcia; i < liczba_miast; i++)
            {
                genotyp_dziecka[i] = tata.Genotyp[i];
            }


            double wylosowana_liczba = LosowaKlasa.Los.NextDouble();

            if (wylosowana_liczba < mutacja.Prawdopodobieństwo_mutacji)
            {
                genotyp_dziecka = mutacja.Mutuj(genotyp_dziecka);
            }

            dziecko = new Osobnik(genotyp_dziecka, fenotyp, funkcja_celu);

            return(dziecko);
        }
Example #8
0
        public override Osobnik DokonajRekombinacji(Osobnik mama, Osobnik tata, Mutacja mutacja, Fenotyp fenotyp, FunkcjaCelu funkcja_celu)
        {
            int liczba_miast = Miasta.Liczba_miast;

            int[] genotyp_dziecka = new int[liczba_miast];

            Osobnik dziecko;

            int punkt_przecięcia  = LosowaKlasa.Los.Next(0, liczba_miast);
            int punkt_przecięcia2 = LosowaKlasa.Los.Next(punkt_przecięcia, liczba_miast);

            bool[] czy_użyte = new bool[liczba_miast];

            for (int i = punkt_przecięcia; i < punkt_przecięcia2; i++)
            {
                genotyp_dziecka[i]             = mama.Genotyp[i];
                czy_użyte[mama.Genotyp[i] - 1] = true;
            }

            int indeks = punkt_przecięcia2;

            for (int i = punkt_przecięcia2; i < liczba_miast; i++)
            {
                while (czy_użyte[tata.Genotyp[indeks] - 1])
                {
                    indeks++;
                    indeks %= liczba_miast;
                }

                genotyp_dziecka[i] = tata.Genotyp[indeks];
                indeks++;
                indeks %= liczba_miast;
            }

            for (int i = 0; i < punkt_przecięcia; i++)
            {
                while (czy_użyte[tata.Genotyp[indeks] - 1])
                {
                    indeks++;
                    indeks %= liczba_miast;
                }

                genotyp_dziecka[i] = tata.Genotyp[indeks];
                indeks++;
                indeks %= liczba_miast;
            }

            double wylosowana_liczba = LosowaKlasa.Los.NextDouble();

            if (wylosowana_liczba < mutacja.Prawdopodobieństwo_mutacji)
            {
                genotyp_dziecka = mutacja.Mutuj(genotyp_dziecka);
            }

            dziecko = new Osobnik(genotyp_dziecka, fenotyp, funkcja_celu);

            return(dziecko);
        }
Example #9
0
 public Osobnik(int[] genotyp, Fenotyp fenotyp, FunkcjaCelu funkcja_celu)
 {
     this.genotyp = genotyp;
     this.fenotyp = fenotyp.Oblicz(genotyp);
     Oblicz(funkcja_celu);
 }
Example #10
0
 public abstract Osobnik DokonajSelekcji(Osobnik[] populacja, Fenotyp fenotyp, FunkcjaCelu funkcja_celu);