Advertisement
Guest User

Untitled

a guest
May 15th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement