Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. Osobnik rodzic1 = listaOsobnikow[indeksRodzica1]; //przypisania pierwszego wylosowanego wczesniej osobnika do nowego obiektu
  2. Osobnik rodzic2 = listaOsobnikow[indeksRodzica2]; //przypisania drugiego wylosowanego wczesniej osobnika do nowego obiektu
  3.  
  4. vector<int>drogaDziecka; // będzie tutaj zapisywana uzyskana droga po krzyzowaniu
  5.  
  6. int poczatekSciezkiRodzica = rand() % (iloscMiast-1)+1; //wybieramy początkowy wierzcholek od którego będziemy
  7. //kopiować kolejne wierzchołki do potomka
  8.  
  9.  
  10. //wybieramy końcowy wiechołek do którego kopiować będziemy kolejne wierzcholki potomka
  11. // ograniczamy wybor konca sciezki do konca danej populacji - drogi danego osobnika
  12. int koniecSciezkiRodzica = rand() % (iloscMiast - poczatekSciezkiRodzica) + poczatekSciezkiRodzica;
  13.  
  14. vector<int>drogaTmp; // vector do którego kopiujemy zawartosc sciezki patrz ponizej
  15.  
  16. for (int j = poczatekSciezkiRodzica; j <= koniecSciezkiRodzica; j++)
  17. {
  18. drogaTmp.push_back(rodzic1.droga[j]); // w tej petli kopiujemy pierwszą część wierzcholki(genow) dla nowego potomka
  19. // zaczynając od indeksu poczatekSciezkiRodzica az do koniecSciezkiRodzica
  20. }
  21. int licznik = koniecSciezkiRodzica + 1; //pozycja do której w pierwszej kolejności zostanie dodane miasto
  22. //inaczej mowiac pierwsza pozycja za skopiowana czescia z pierwszego osobnika
  23.  
  24. while (drogaTmp.size() != iloscMiast - 1) // dopóki nie uzupłenimy drogi do końca.
  25. {
  26. if (licznik == iloscMiast) licznik = 1; // jezeli pozycja jest rowna ilosci miast, oznacza to,
  27. // ze jest ona ostatnia pozycja w tej drodze - musimy wiec uzupełnic
  28. // pozostałe miasta, zaczynajac od pierwszego
  29.  
  30. int miastoTmp = rodzic2.droga[licznik]; //do zmiennej zapisujemy pierwsza wartosc rodzica2 z jego sciezki, która znajduje się
  31. //za skopiowaną wczesniej czescia drogi do drogaTMP
  32.  
  33. //sprawdzamy czy droga naszego nowego osobnika z już przekopiowanym fragmentem z rodzica1 zawiera miasto
  34. // które znajduje się w rodzicu2
  35. if (find(drogaTmp.begin(), drogaTmp.end(), miastoTmp) != drogaTmp.end())
  36. {
  37. licznik++; //jezeli zawiera nie dodajemy go do nowego osobnika - kontynuujemy iteracje licznika w celu
  38. //pobrania nastepnego miasta z rodzica2 oraz ponownym sprawdzeniu czy te miasto znajduje się w naszym potomku
  39. continue;
  40. }
  41. else
  42. {
  43. drogaTmp.push_back(miastoTmp); // jezeli jednak nie zawiera, dodajemy te miasto do potomka z oraz iterujemy licznik
  44. licznik++; // aby sprawdzic kolejne miasto
  45. }
  46. }
  47. drogaDziecka.push_back(0); //miasto poczatkowe jako 0
  48. for (int j = (iloscMiast-poczatekSciezkiRodzica); j < iloscMiast-1; j++)
  49. {
  50. drogaDziecka.push_back(drogaTmp[j]); // kopiujemy zawartość ściezki od indeksu wycietej sciezki z rodzica1 do konca drogi nowego potomka
  51. }
  52. for (int j = 0; j < (iloscMiast - poczatekSciezkiRodzica); j++)
  53. {
  54. drogaDziecka.push_back(drogaTmp[j]); //tutaj uzupełniamy poczatek drogi nowego potomka zaczynajac od poczatku
  55. }
  56. drogaDziecka.push_back(0); // miasto koncowe jako 0
  57.  
  58. Osobnik dziecko(drogaDziecka, miasta); //tworzymy nowego osobnika z parametrami - nowa sciezka nowego potomka, oraz iloscia miast
  59. listaOsobnikow.push_back(dziecko); // dodajemy potomka do listyObosnikow
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement