Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1. #include "Solution.h"
  2. #include <stdio.h> /* printf, scanf, puts, NULL */
  3. #include <stdlib.h> /* srand, rand */
  4.  
  5.  
  6.  
  7. Solution::Solution(int _size)
  8. {
  9. setup = new int[size];
  10. size = _size;
  11.  
  12. weight = 0;
  13. score = 0;
  14. //CalculateScore(vec);
  15. //CalculateWeight(vec);
  16. }
  17.  
  18. Solution::Solution(std::vector<Item*> * vec)
  19. {
  20.  
  21. size = vec->size();
  22. setup = new int[size];
  23.  
  24.  
  25. for (int i = 0; i < size; i++)
  26. {
  27. if(randomHelper.Random(50))
  28. {
  29. setup[i] = 1;
  30. }
  31. else
  32. {
  33. setup[i] = 0;
  34. }
  35. }
  36.  
  37. weight = 0;
  38. score = 0;
  39. CalculateScore(vec);
  40. CalculateWeight(vec);
  41.  
  42.  
  43.  
  44. }
  45.  
  46. Solution::~Solution()
  47. {
  48. //delete setup;
  49. }
  50.  
  51.  
  52.  
  53. void Solution::CalculateScore(std::vector<Item*> * vec)
  54. {
  55. if (weight > vec->at(0)->GetCriticalWeight())
  56. {
  57. score = 0;
  58. return;
  59. }
  60.  
  61.  
  62. score = 0;
  63. for (int i = 0; i < size; i++)
  64. {
  65. if (setup[i] == 1)
  66. {
  67. score += vec->at(i)->GetValue();
  68. }
  69.  
  70. }
  71.  
  72.  
  73.  
  74. }
  75.  
  76. void Solution::CalculateWeight(std::vector<Item*> * vec)
  77. {
  78. weight = 0;
  79. for (int i = 0; i < vec->size(); i++)
  80. {
  81. if (setup[i] == 1)
  82. {
  83. weight += vec->at(i)->GetWeight();
  84.  
  85. }
  86. }
  87. }
  88.  
  89. void Solution::Mutation(std::vector<Item*> * vec, int PM)
  90. {
  91. for (int i = 0; i < vec->size(); i++)
  92. {
  93. if (randomHelper.Random(PM))
  94. {
  95. if (setup[i] == 1)
  96. {
  97. setup[i] = 0;
  98. }
  99. else
  100. {
  101. setup[i] = 1;
  102. }
  103. }
  104. }
  105.  
  106. CalculateScore(vec);
  107. CalculateWeight(vec);
  108. }
  109.  
  110. int Solution::GetScore()
  111. {
  112. return score;
  113. }
  114.  
  115. int Solution::GetWeight()
  116. {
  117. return weight;
  118. }
  119.  
  120. void Solution::SetScore(int _score)
  121. {
  122. score = _score;
  123. }
  124.  
  125. void Solution::SetWeight(int _weight)
  126. {
  127. weight = _weight;
  128. }
  129.  
  130. int * Solution::GetSetup()
  131. {
  132. return setup;
  133. }
  134.  
  135.  
  136. void Solution::Cross(Solution * anotherParent, std::vector<Item*> * vec)
  137. {
  138. int crossPoint = -1;
  139. crossPoint = (rand() % (size-2)) +1;
  140.  
  141. for (int i = 0; i < size; i++)
  142. {
  143. if (i < crossPoint)
  144. {
  145. int temp = setup[i];
  146. setup[i] = anotherParent->setup[i];
  147. anotherParent->setup[i] = temp;
  148. }
  149. }
  150. CalculateScore(vec);
  151. anotherParent->CalculateScore(vec);
  152.  
  153. CalculateWeight(vec);
  154. anotherParent->CalculateWeight(vec);
  155. }
  156.  
  157.  
  158. void Solution::Cross2(Solution * anotherParent, std::vector<Item*> * vec)
  159. {
  160. int crossPoint1 = -1;
  161. int crossPoint2 = -1;
  162. crossPoint1 = (rand() % (size - 2)) + 1;
  163. crossPoint2 = (rand() % ((size - crossPoint1) - 1)) + crossPoint1;
  164.  
  165. for (int i = 0; i < size; i++)
  166. {
  167. if (i > crossPoint1 && i < crossPoint2)
  168. {
  169. int temp = setup[i];
  170. setup[i] = anotherParent->setup[i];
  171. anotherParent->setup[i] = temp;
  172. }
  173. }
  174. CalculateScore(vec);
  175. anotherParent->CalculateScore(vec);
  176.  
  177. CalculateWeight(vec);
  178. anotherParent->CalculateWeight(vec);
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement