Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Solution.h"
- #include <stdio.h> /* printf, scanf, puts, NULL */
- #include <stdlib.h> /* srand, rand */
- Solution::Solution(int _size)
- {
- setup = new int[size];
- size = _size;
- weight = 0;
- score = 0;
- //CalculateScore(vec);
- //CalculateWeight(vec);
- }
- Solution::Solution(std::vector<Item*> * vec)
- {
- size = vec->size();
- setup = new int[size];
- for (int i = 0; i < size; i++)
- {
- if(randomHelper.Random(50))
- {
- setup[i] = 1;
- }
- else
- {
- setup[i] = 0;
- }
- }
- weight = 0;
- score = 0;
- CalculateScore(vec);
- CalculateWeight(vec);
- }
- Solution::~Solution()
- {
- //delete setup;
- }
- void Solution::CalculateScore(std::vector<Item*> * vec)
- {
- if (weight > vec->at(0)->GetCriticalWeight())
- {
- score = 0;
- return;
- }
- score = 0;
- for (int i = 0; i < size; i++)
- {
- if (setup[i] == 1)
- {
- score += vec->at(i)->GetValue();
- }
- }
- }
- void Solution::CalculateWeight(std::vector<Item*> * vec)
- {
- weight = 0;
- for (int i = 0; i < vec->size(); i++)
- {
- if (setup[i] == 1)
- {
- weight += vec->at(i)->GetWeight();
- }
- }
- }
- void Solution::Mutation(std::vector<Item*> * vec, int PM)
- {
- for (int i = 0; i < vec->size(); i++)
- {
- if (randomHelper.Random(PM))
- {
- if (setup[i] == 1)
- {
- setup[i] = 0;
- }
- else
- {
- setup[i] = 1;
- }
- }
- }
- CalculateScore(vec);
- CalculateWeight(vec);
- }
- int Solution::GetScore()
- {
- return score;
- }
- int Solution::GetWeight()
- {
- return weight;
- }
- void Solution::SetScore(int _score)
- {
- score = _score;
- }
- void Solution::SetWeight(int _weight)
- {
- weight = _weight;
- }
- int * Solution::GetSetup()
- {
- return setup;
- }
- void Solution::Cross(Solution * anotherParent, std::vector<Item*> * vec)
- {
- int crossPoint = -1;
- crossPoint = (rand() % (size-2)) +1;
- for (int i = 0; i < size; i++)
- {
- if (i < crossPoint)
- {
- int temp = setup[i];
- setup[i] = anotherParent->setup[i];
- anotherParent->setup[i] = temp;
- }
- }
- CalculateScore(vec);
- anotherParent->CalculateScore(vec);
- CalculateWeight(vec);
- anotherParent->CalculateWeight(vec);
- }
- void Solution::Cross2(Solution * anotherParent, std::vector<Item*> * vec)
- {
- int crossPoint1 = -1;
- int crossPoint2 = -1;
- crossPoint1 = (rand() % (size - 2)) + 1;
- crossPoint2 = (rand() % ((size - crossPoint1) - 1)) + crossPoint1;
- for (int i = 0; i < size; i++)
- {
- if (i > crossPoint1 && i < crossPoint2)
- {
- int temp = setup[i];
- setup[i] = anotherParent->setup[i];
- anotherParent->setup[i] = temp;
- }
- }
- CalculateScore(vec);
- anotherParent->CalculateScore(vec);
- CalculateWeight(vec);
- anotherParent->CalculateWeight(vec);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement