Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Populacja
- {
- int rozmiarPopulacji = 10;
- int testDopasowania = 0;
- Osobnik[] Population = new Osobnik[10]; //przerzucilem jednak na tablice, bo bylo mi latwiej
- // Metoda tworząca pierwszą generację
- private void CreateFirstGeneration()
- {
- for (int i = 0; i < Population.Length; i++)
- {
- Population[i] = new Osobnik();
- }
- }
- //ocena przystosowania
- public Osobnik PierwszeDopasowanie()
- {
- int maxFit = Int32.MinValue;
- int maxFitIndex = 0;
- for (int i = 0; i < Population.Length; i++)
- {
- if (maxFit <= Population[i].dopasowanie) //zmienna dopasowanie (wedlug mnie) powinna byc w klasie osobnik i odpowiada ona ile binarnych '1' jest w danym osobniku
- {
- maxFit = Population[i].dopasowanie;
- maxFitIndex = i;
- }
- }
- testDopasowania = Population[maxFitIndex].dopasowanie;
- return Population[maxFitIndex];
- }
- public Osobnik DrugieFDopasowanie() //robie drugie dopasowanie, bo bede tego potrzebowal przy selekcji
- {
- int maxFit1 = 0;
- int maxFit2 = 0;
- for (int i = 0; i < Population.Length; i++)
- {
- if (Population[i].dopasowanie > Population[maxFit1].dopasowanie)
- {
- maxFit2 = maxFit1;
- maxFit1 = i;
- }
- else if (Population[i].dopasowanie > Population[maxFit2].dopasowanie)
- {
- maxFit2 = i;
- }
- }
- return Population[maxFit2];
- }
- Osobnik dopasowany;
- Osobnik drugiDopasowany;
- void Selekcja()
- {
- //Wybieram najbadziej dopasowanego osobnika
- dopasowany = PierwszeDopasowanie();
- //Wybieram drugiego najbardziej dopasowanego
- drugiDopasowany = DrugieFDopasowanie();
- }
- // krzyzowanie (crossover)
- void Krzyzowanie()
- {
- Random los = new Random();
- //wybieram drugi losowy krzyzowy punkt;
- int losCross = los.Next(Population[0].dlugoscGenu); //dlugoscGenu powinna byc zadeklarowana w osobniku
- //przerzucam wartosci miedzy rodzicami
- for (int i = 0; i < losCross; i++)
- {
- int temp = dopasowany.genes[i]; //genes powinna byc w osobniku jako tablica z poszczegolnymi genami
- dopasowany.genes[i] = drugiDopasowany.genes[i];
- drugiDopasowany.genes[i] = temp;
- }
- }
- // mutacja (mutation)
- void Mutacja()
- {
- Random rn = new Random();
- //Wybieram losowy punkt mutacji
- int mutationPoint = rn.Next(Population[0].geneLength);
- //Przerzucam wartości w punkcie mutacji
- if (dopasowany.genes[mutationPoint] == 0)
- {
- dopasowany.genes[mutationPoint] = 1;
- }
- else
- {
- dopasowany.genes[mutationPoint] = 0;
- }
- mutationPoint = rn.Next(Population[0].geneLength);
- if (drugiDopasowany.genes[mutationPoint] == 0)
- {
- drugiDopasowany.genes[mutationPoint] = 1;
- }
- else
- {
- drugiDopasowany.genes[mutationPoint] = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement