SHARE
TWEET

Untitled

a guest May 15th, 2019 55 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. public class Populacja
  2.     {
  3.         int rozmiarPopulacji = 10;
  4.         int testDopasowania = 0;
  5.        
  6.         Osobnik[] Population = new Osobnik[10]; //przerzucilem jednak na tablice, bo bylo mi latwiej
  7.        
  8.  
  9.         // Metoda tworząca pierwszą generację
  10.         private void CreateFirstGeneration()
  11.         {
  12.             for (int i = 0; i < Population.Length; i++)
  13.             {
  14.                 Population[i] = new Osobnik();
  15.             }
  16.         }
  17.         //ocena przystosowania
  18.         public Osobnik PierwszeDopasowanie()
  19.         {
  20.             int maxFit = Int32.MinValue;
  21.             int maxFitIndex = 0;
  22.             for (int i = 0; i < Population.Length; i++)
  23.             {
  24.                 if (maxFit <= Population[i].dopasowanie) //zmienna dopasowanie (wedlug mnie) powinna byc w klasie osobnik i odpowiada ona ile binarnych '1' jest w danym osobniku
  25.                 {
  26.                     maxFit = Population[i].dopasowanie;
  27.                     maxFitIndex = i;
  28.                 }
  29.             }
  30.             testDopasowania = Population[maxFitIndex].dopasowanie;
  31.             return Population[maxFitIndex];
  32.         }
  33.         public Osobnik DrugieFDopasowanie() //robie drugie dopasowanie, bo bede tego potrzebowal przy selekcji
  34.         {
  35.             int maxFit1 = 0;
  36.             int maxFit2 = 0;
  37.             for (int i = 0; i < Population.Length; i++)
  38.             {
  39.                 if (Population[i].dopasowanie > Population[maxFit1].dopasowanie)
  40.                 {
  41.                     maxFit2 = maxFit1;
  42.                     maxFit1 = i;
  43.                 }
  44.                 else if (Population[i].dopasowanie > Population[maxFit2].dopasowanie)
  45.                 {
  46.                     maxFit2 = i;
  47.                 }
  48.             }
  49.             return Population[maxFit2];
  50.         }
  51.         Osobnik dopasowany;
  52.         Osobnik drugiDopasowany;
  53.         void Selekcja()
  54.         {
  55.             //Wybieram najbadziej dopasowanego osobnika
  56.             dopasowany = PierwszeDopasowanie();
  57.  
  58.             //Wybieram drugiego najbardziej dopasowanego
  59.             drugiDopasowany = DrugieFDopasowanie();
  60.         }
  61.  
  62.         // krzyzowanie (crossover)
  63.         void Krzyzowanie()
  64.         {
  65.             Random los = new Random();
  66.             //wybieram drugi losowy krzyzowy punkt;
  67.             int losCross = los.Next(Population[0].dlugoscGenu); //dlugoscGenu powinna byc zadeklarowana w osobniku
  68.             //przerzucam wartosci miedzy rodzicami
  69.             for (int i = 0; i < losCross; i++)
  70.             {
  71.                 int temp = dopasowany.genes[i]; //genes powinna byc w osobniku jako tablica z poszczegolnymi genami
  72.                 dopasowany.genes[i] = drugiDopasowany.genes[i];
  73.                 drugiDopasowany.genes[i] = temp;
  74.             }
  75.         }
  76.  
  77.         // mutacja (mutation)
  78.         void Mutacja()
  79.         {
  80.             Random rn = new Random();
  81.            
  82.             //Wybieram losowy punkt mutacji
  83.             int mutationPoint = rn.Next(Population[0].geneLength);
  84.            
  85.             //Przerzucam wartości w punkcie mutacji
  86.             if (dopasowany.genes[mutationPoint] == 0)
  87.             {
  88.                 dopasowany.genes[mutationPoint] = 1;
  89.             }
  90.             else
  91.             {
  92.                 dopasowany.genes[mutationPoint] = 0;
  93.             }
  94.  
  95.             mutationPoint = rn.Next(Population[0].geneLength);
  96.  
  97.             if (drugiDopasowany.genes[mutationPoint] == 0)
  98.             {
  99.                 drugiDopasowany.genes[mutationPoint] = 1;
  100.             }
  101.             else
  102.             {
  103.                 drugiDopasowany.genes[mutationPoint] = 0;
  104.             }
  105.         }
  106.     }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top