Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. std::vector<int> GeneticAlgorithm::PMX(std::vector<int> p1, std::vector<int> p2)
  2. {
  3.     std::vector<std::vector<int>> children;
  4.  
  5.     int slicePoint1, slicePoint2;
  6.  
  7.     slicePoint1 = rand() % instanceSize;
  8.     do
  9.         slicePoint2 = rand() % (instanceSize + 1);
  10.     while (slicePoint2 <= slicePoint1);
  11.  
  12.     std::vector<int> child;
  13.     std::vector<int> child2;
  14.     for (int j = 0; j < slicePoint1; j++) {
  15.         child.push_back(-1);
  16.         child2.push_back(-1);
  17.     }
  18.  
  19.     std::vector<int> sliceToInsertChild = std::vector<int>(p2.begin() + slicePoint1, p2.begin() + slicePoint2);
  20.     std::vector<int> sliceToInsertChild2 = std::vector<int>(p1.begin() + slicePoint1, p1.begin() + slicePoint2);
  21.     child.insert(child.end(), sliceToInsertChild.begin(), sliceToInsertChild.end());
  22.     child2.insert(child2.end(), sliceToInsertChild2.begin(), sliceToInsertChild2.end());
  23.  
  24.     for (int j = slicePoint2; j < instanceSize; j++) {
  25.         child.push_back(-1);
  26.         child2.push_back(-1);
  27.     }
  28.  
  29.     for (int j = 0; j < instanceSize; j++) {
  30.         if (j >= slicePoint1 && j < slicePoint2)
  31.             continue;
  32.  
  33.         if (std::find(child.begin(), child.end(), p1[j]) == child.end()) {
  34.             child[j] = p1[j];
  35.         }
  36.         else {
  37.             int p1Temp = p1[j];
  38.             int index = j;
  39.             do {
  40.                 index = findIndexOfElem(p2, p1Temp);
  41.                 p1Temp = p1[index];
  42.             } while (std::find(child.begin(), child.end(), p1Temp) != child.end());
  43.             child[j] = p1Temp;
  44.         }
  45.  
  46.         if (std::find(child2.begin(), child2.end(), p2[j]) == child2.end()) {
  47.             child2[j] = p2[j];
  48.         }
  49.         else {
  50.             int p2Temp = p2[j];
  51.             int index = j;
  52.             do {
  53.                 index = findIndexOfElem(p1, p2Temp);
  54.                 p2Temp = p2[index];
  55.             } while (std::find(child2.begin(), child2.end(), p2Temp) != child2.end());
  56.             child2[j] = p2Temp;
  57.         }
  58.     }
  59.     std::vector<int> offspring = (tsp.countTC(child) < tsp.countTC(child2) ? child : child2);
  60.  
  61.     //return child;
  62.     return offspring;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement