本文整理汇总了C++中SolutionSet类的典型用法代码示例。如果您正苦于以下问题:C++ SolutionSet类的具体用法?C++ SolutionSet怎么用?C++ SolutionSet使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SolutionSet类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: exist
bool PhyloMOCHC::exist(Solution & s1, SolutionSet & set2) {
for (int i = 0; i < set2.size(); i++) {
if (equalsIndividuals(s1,*set2.get(i)))
return true;
}
return false;
}
示例2: if
/**
* Performs the operation
* @param object Object representing a SolutionSet
* @return the selected solution
*/
void * BinaryTournament2::execute(void * object) {
SolutionSet * population = (SolutionSet *)object;
if (index_ == 0) //Create the permutation
{
PermutationUtility * permutationUtility = new PermutationUtility();
delete [] a_;
a_= permutationUtility->intPermutation(population->size());
delete permutationUtility;
}
Solution * solution1;
Solution * solution2;
solution1 = population->get(a_[index_]);
solution2 = population->get(a_[index_+1]);
index_ = (index_ + 2) % population->size();
int flag = dominance_->compare(solution1,solution2);
if (flag == -1)
return solution1;
else if (flag == 1)
return solution2;
else if (solution1->getCrowdingDistance() > solution2->getCrowdingDistance())
return solution1;
else if (solution2->getCrowdingDistance() > solution1->getCrowdingDistance())
return solution2;
else
if (PseudoRandom::randDouble()<0.5)
return solution1;
else
return solution2;
} // execute
示例3: equals
bool PhyloMOCHC::equals(SolutionSet & set1, SolutionSet & set2) {
if (set1.size() != set2.size())
return false;
for (int i = 0; i < set1.size(); i++) {
if (!exist(*set1.get(i),set2))
return false;
}
return true;
} // returns the equal
示例4: SolutionSet
SolutionSet *MOCHC::rankingAndCrowdingSelection(SolutionSet * pop, int size) {
SolutionSet *result = new SolutionSet(size);
// Ranking the union
Ranking * ranking = new Ranking(pop);
Distance * distance = new Distance();
int remain = size;
int index = 0;
SolutionSet * front = NULL;
// Obtain the next front
front = ranking->getSubfront(index);
while ((remain > 0) && (remain >= front->size())) {
//Assign crowding distance to individuals
distance->crowdingDistanceAssignment(front, problem_->getNumberOfObjectives());
//Add the individuals of this front
for (int k = 0; k < front->size(); k++) {
result->add(new Solution(front->get(k)));
} // for
//Decrement remain
remain = remain - front->size();
//Obtain the next front
index++;
if (remain > 0) {
front = ranking->getSubfront(index);
} // if
} // while
// Remain is less than front(index).size, insert only the best one
if (remain > 0) { // front contains individuals to insert
distance->crowdingDistanceAssignment(front, problem_->getNumberOfObjectives());
Comparator * c = new CrowdingComparator();
front->sort(c);
delete c;
for (int k = 0; k < remain; k++) {
result->add(new Solution(front->get(k)));
} // for
remain = 0;
} // if
delete ranking;
delete distance;
return result;
}
示例5: main
int main(int argc, char ** argv) {
clock_t t_ini, t_fin;
Problem * problem ; // The problem to solve
Algorithm * algorithm ; // The algorithm to use
//Operator * mutation ; // "Turbulence" operator
if (argc>=2) {
problem = ProblemFactory::getProblem(argc, argv);
cout << "Selected problem: " << problem->getName() << endl;
} else {
cout << "No problem selected." << endl;
cout << "Default problem will be used: Sphere" << endl;
problem = ProblemFactory::getProblem(const_cast<char *>("Sphere"));
}
algorithm = new StandardPSO2007(problem);
// Algorithm parameters
int swarmSize = 10 + (int) (2 * sqrt(problem->getNumberOfVariables()));
int maxIterations = 80000;
int numberOfParticlesToInform = 3;
algorithm->setInputParameter("swarmSize",&swarmSize);
algorithm->setInputParameter("maxIterations",&maxIterations);
algorithm->setInputParameter("numberOfParticlesToInform", &numberOfParticlesToInform);
// Execute the Algorithm
t_ini = clock();
SolutionSet * population = algorithm->execute();
t_fin = clock();
double secs = (double) (t_fin - t_ini);
secs = secs / CLOCKS_PER_SEC;
// Result messages
cout << "Total execution time: " << secs << "s" << endl;
cout << "Variables values have been written to file VAR" << endl;
population->printVariablesToFile("VAR");
cout << "Objectives values have been written to file FUN" << endl;
population->printObjectivesToFile("FUN");
delete population;
delete algorithm;
} // main
示例6: exit
/**
* Executes the operation
* @param object An object containing the population and the position (index)
* of the current individual
* @return An object containing the three selected parents
*/
void * DifferentialEvolutionSelection::execute(void * object) {
void ** parameters = (void **)object ;
SolutionSet * population = (SolutionSet *) parameters[0];
int index = *(int *) parameters[1] ;
Solution ** parents = new Solution*[3];
int r1, r2, r3;
if (population->size() < 4) {
cerr << "DifferentialEvolutionSelection: the population has less than four solutions" << endl;
exit(-1);
}
do {
r1 = PseudoRandom::randInt(0,population->size()-1);
} while ( r1==index );
do {
r2 = PseudoRandom::randInt(0,population->size()-1);
} while ( r2==index || r2==r1 );
do {
r3 = PseudoRandom::randInt(0,population->size()-1);
} while( r3==index || r3==r1 || r3==r2 );
parents[0] = population->get(r1);
parents[1] = population->get(r2);
parents[2] = population->get(r3);
return parents ;
} // execute
示例7: equals
bool MOCHC::equals(SolutionSet & set1, SolutionSet & set2) {
for (int i = 0; i < set1.size(); i++) {
for (int j = 0; j < set2.size(); j++) {
Solution *s1 = set1.get(i);
Solution *s2 = set2.get(j);
for (int var = 0; var < s1->getNumberOfVariables(); var++) {
Binary *b1, *b2;
b1 = (Binary *)s1->getDecisionVariables()[var];
b2 = (Binary *)s2->getDecisionVariables()[var];
for (int bit = 0; bit < b1->getNumberOfBits(); bit++) {
if (b1->getIth(bit)!=b2->getIth(bit)) {
return false;
}
}
}
}
}
return true;
} // returns the equal
示例8: int
/**
* Performs the operation
* @param object Object representing a SolutionSet
* @return the worst solution found
*/
void * WorstSolutionSelection::execute(void * object) {
SolutionSet * solutionSet = (SolutionSet *)object;
if (solutionSet->size() == 0) {
return NULL;
}
int worstSolution = 0;
for (int i = 1; i < solutionSet->size(); i++) {
if (comparator_->compare(solutionSet->get(i), solutionSet->get(worstSolution)) > 0) {
worstSolution = i;
}
} // for
int * intPtr = new int(worstSolution);
return intPtr;
} // execute
示例9: main
int main(int argc, char ** argv) {
clock_t t_ini, t_fin;
Problem * problem; // The problem to solve
Algorithm * algorithm; // The algorithm to use
Operator * crossover; // Crossover operator
Operator * mutation; // Mutation operator
//QualityIndicator * indicators ; // Object to get quality indicators
map<string, void *> parameters; // Operator parameters
//TODO: QualityIndicator * indicators; // Object to get quality indicators
if (argc>=2) {
problem = ProblemFactory::getProblem(argc, argv);
cout << "Selected problem: " << problem->getName() << endl;
} else {
cout << "No problem selected." << endl;
cout << "Default problem will be used: Kursawe" << endl;
problem = ProblemFactory::getProblem(const_cast<char *>("Kursawe"));
}
algorithm = new MOEAD(problem);
// Algorithm parameters
int populationSizeValue = 300;
int maxEvaluationsValue = 150000;
algorithm->setInputParameter("populationSize",&populationSizeValue);
algorithm->setInputParameter("maxEvaluations",&maxEvaluationsValue);
// Directory with the files containing the weight vectors used in
// Q. Zhang, W. Liu, and H Li, The Performance of a New Version of MOEA/D
// on CEC09 Unconstrained MOP Test Instances Working Report CES-491, School
// of CS & EE, University of Essex, 02/2009.
// http://dces.essex.ac.uk/staff/qzhang/MOEAcompetition/CEC09final/code/ZhangMOEADcode/moead0305.rar
string dataDirectoryValue =
"../../data/Weight";
algorithm->setInputParameter("dataDirectory", &dataDirectoryValue);
// Crossover operator
double crParameter = 1.0;
double fParameter = 0.5;
parameters["CR"] = &crParameter;
parameters["F"] = &fParameter;
crossover = new DifferentialEvolutionCrossover(parameters);
// Mutation operator
parameters.clear();
double probabilityParameter = 1.0/(problem->getNumberOfVariables());
double distributionIndexParameter = 20.0;
parameters["probability"] = &probabilityParameter;
parameters["distributionIndex"] = &distributionIndexParameter;
mutation = new PolynomialMutation(parameters);
// Add the operators to the algorithm
algorithm->addOperator("crossover",crossover);
algorithm->addOperator("mutation",mutation);
// Add the indicator object to the algorithm
//algorithm->setInputParameter("indicators", indicators) ;
// Execute the Algorithm
t_ini = clock();
SolutionSet * population = algorithm->execute();
t_fin = clock();
double secs = (double) (t_fin - t_ini);
secs = secs / CLOCKS_PER_SEC;
// Result messages
cout << "Total execution time: " << secs << "s" << endl;
cout << "Variables values have been written to file VAR" << endl;
population->printVariablesToFile("VAR");
cout << "Objectives values have been written to file FUN" << endl;
population->printObjectivesToFile("FUN");
delete mutation;
delete crossover;
delete population;
delete algorithm;
} // main
示例10: SolutionSet
/**
* Assigns crowding distances to all solutions in a <code>SolutionSet</code>.
* @param solutionSet The <code>SolutionSet</code>.
* @param nObjs Number of objectives.
*/
void Distance::crowdingDistanceAssignment(SolutionSet * solutionSet, int nObjs) {
int size = solutionSet->size();
if (size == 0)
return;
if (size == 1) {
solutionSet->get(0)->setCrowdingDistance(std::numeric_limits<double>::max());
return;
} // if
if (size == 2) {
solutionSet->get(0)->setCrowdingDistance(std::numeric_limits<double>::max());
solutionSet->get(1)->setCrowdingDistance(std::numeric_limits<double>::max());
return;
} // if
//Use a new SolutionSet to evite alter original solutionSet
SolutionSet * front = new SolutionSet(size);
for (int i = 0; i < size; i++){
front->add(solutionSet->get(i));
}
for (int i = 0; i < size; i++)
front->get(i)->setCrowdingDistance(0.0);
double objetiveMaxn;
double objetiveMinn;
double distance;
for (int i = 0; i<nObjs; i++) {
// Sort the population by Obj n
Comparator * c = new ObjectiveComparator(i);
front->sort(c);
delete c;
objetiveMinn = front->get(0)->getObjective(i);
objetiveMaxn = front->get(front->size()-1)->getObjective(i);
//Set de crowding distance
front->get(0)->setCrowdingDistance(std::numeric_limits<double>::max());
front->get(size-1)->setCrowdingDistance(std::numeric_limits<double>::max());
for (int j = 1; j < size-1; j++) {
distance = front->get(j+1)->getObjective(i) - front->get(j-1)->getObjective(i);
distance = distance / (objetiveMaxn - objetiveMinn);
distance += front->get(j)->getCrowdingDistance();
front->get(j)->setCrowdingDistance(distance);
} // for
} // for
front->clear();
delete front;
} // crowdingDistanceAssignment
示例11: CrowdingComparator
SolutionSet *MOCHC::execute() {
int populationSize;
int iterations;
int maxEvaluations;
int convergenceValue;
int minimumDistance;
int evaluations;
double preservedPopulation;
double initialConvergenceCount;
bool condition = false;
SolutionSet *solutionSet, *offSpringPopulation, *newPopulation;
Comparator * crowdingComparator = new CrowdingComparator();
SolutionSet * population;
SolutionSet * offspringPopulation;
SolutionSet * unionSolution;
Operator * cataclysmicMutation;
Operator * crossover;
Operator * parentSelection;
//Read the parameters
populationSize = *(int *) getInputParameter("populationSize");
maxEvaluations = *(int *) getInputParameter("maxEvaluations");
convergenceValue = *(int *) getInputParameter("convergenceValue");
initialConvergenceCount = *(double *)getInputParameter("initialConvergenceCount");
preservedPopulation = *(double *)getInputParameter("preservedPopulation");
//Read the operators
cataclysmicMutation = operators_["mutation"];
crossover = operators_["crossover"];
parentSelection = operators_["parentSelection"];
iterations = 0;
evaluations = 0;
// calculating the maximum problem sizes ....
Solution * sol = new Solution(problem_);
int size = 0;
for (int var = 0; var < problem_->getNumberOfVariables(); var++) {
Binary *binaryVar;
binaryVar = (Binary *)sol->getDecisionVariables()[var];
size += binaryVar->getNumberOfBits();
}
minimumDistance = (int) std::floor(initialConvergenceCount*size);
// Create the initial solutionSet
Solution * newSolution;
population = new SolutionSet(populationSize);
for (int i = 0; i < populationSize; i++) {
newSolution = new Solution(problem_);
problem_->evaluate(newSolution);
problem_->evaluateConstraints(newSolution);
evaluations++;
population->add(newSolution);
} //for
while (!condition) {
offSpringPopulation = new SolutionSet(populationSize);
Solution **parents = new Solution*[2];
for (int i = 0; i < population->size()/2; i++) {
parents[0] = (Solution *) (parentSelection->execute(population));
parents[1] = (Solution *) (parentSelection->execute(population));
if (hammingDistance(*parents[0],*parents[1])>= minimumDistance) {
Solution ** offSpring = (Solution **) (crossover->execute(parents));
problem_->evaluate(offSpring[0]);
problem_->evaluateConstraints(offSpring[0]);
problem_->evaluate(offSpring[1]);
problem_->evaluateConstraints(offSpring[1]);
evaluations+=2;
offSpringPopulation->add(offSpring[0]);
offSpringPopulation->add(offSpring[1]);
}
}
SolutionSet *join = population->join(offSpringPopulation);
delete offSpringPopulation;
newPopulation = rankingAndCrowdingSelection(join,populationSize);
delete join;
if (equals(*population,*newPopulation)) {
minimumDistance--;
}
if (minimumDistance <= -convergenceValue) {
minimumDistance = (int) (1.0/size * (1-1.0/size) * size);
int preserve = (int) std::floor(preservedPopulation*populationSize);
newPopulation->clear(); //do the new in c++ really hurts me(juanjo)
population->sort(crowdingComparator);
for (int i = 0; i < preserve; i++) {
newPopulation->add(new Solution(population->get(i)));
}
for (int i = preserve; i < populationSize; i++) {
//.........这里部分代码省略.........
示例12: CrowdingComparator
SolutionSet *PhyloMOCHC::execute() {
int populationSize;
int iterations;
int maxEvaluations;
int convergenceValue;
int minimumDistance;
int evaluations;
int IntervalOptSubsModel;
double preservedPopulation;
double initialConvergenceCount;
bool condition = false;
SolutionSet *solutionSet, *offSpringPopulation, *newPopulation;
Comparator * crowdingComparator = new CrowdingComparator();
SolutionSet * population;
SolutionSet * offspringPopulation;
SolutionSet * unionSolution;
Operator * cataclysmicMutation;
Operator * crossover;
Operator * parentSelection;
//Read the parameters
populationSize = *(int *) getInputParameter("populationSize");
maxEvaluations = *(int *) getInputParameter("maxEvaluations");
IntervalOptSubsModel = *(int *) getInputParameter("intervalupdateparameters");
convergenceValue = *(int *) getInputParameter("convergenceValue");
initialConvergenceCount = *(double *)getInputParameter("initialConvergenceCount");
preservedPopulation = *(double *)getInputParameter("preservedPopulation");
//Read the operators
cataclysmicMutation = operators_["mutation"];
crossover = operators_["crossover"];
parentSelection = operators_["selection"];
iterations = 0;
evaluations = 0;
// calculating the maximum problem sizes ....
int size = 0;
Solution * sol = new Solution(problem_);
PhyloTree *Pt1 = (PhyloTree *)sol->getDecisionVariables()[0];
TreeTemplate<Node> * tree1 = Pt1->getTree();
BipartitionList* bipL1 = new BipartitionList(*tree1, true);
bipL1->removeTrivialBipartitions();
size = bipL1->getNumberOfBipartitions() * 2;
delete bipL1;
delete sol;
minimumDistance = (int) std::floor(initialConvergenceCount*size);
cout << "Minimun Distance " << minimumDistance << endl;
// Create the initial solutionSet
Solution * newSolution;
ApplicationTools::displayTask("Initial Population", true);
population = new SolutionSet(populationSize);
Phylogeny * p = (Phylogeny *) problem_;
for (int i = 0; i < populationSize; i++) {
newSolution = new Solution(problem_);
if(p->StartingOptRamas){
p->BranchLengthOptimization(newSolution,p->StartingMetodoOptRamas,p->StartingNumIterOptRamas,p->StartingTolerenciaOptRamas);
}
if(p->OptimizacionSubstModel){
p->OptimizarParamModeloSust(newSolution);
}
problem_->evaluate(newSolution);
problem_->evaluateConstraints(newSolution);
evaluations++;
population->add(newSolution);
} //for
ApplicationTools::displayTaskDone();
while (!condition) {
cout << "Evaluating " << evaluations << endl;
offSpringPopulation = new SolutionSet(populationSize);
Solution **parents = new Solution*[2];
//.........这里部分代码省略.........
示例13: Distance
/*
* Runs the ssNSGA-II algorithm.
* @return a <code>SolutionSet</code> that is a set of non dominated solutions
* as a result of the algorithm execution
*/
SolutionSet * ssNSGAII::execute() {
int populationSize;
int maxEvaluations;
int evaluations;
int IntervalOptSubsModel;
// TODO: QualityIndicator indicators; // QualityIndicator object
int requiredEvaluations; // Use in the example of use of the
// indicators object (see below)
SolutionSet * population;
SolutionSet * offspringPopulation;
SolutionSet * unionSolution;
Operator * mutationOperator;
Operator * crossoverOperator;
Operator * selectionOperator;
Distance * distance = new Distance();
//Read the parameters
populationSize = *(int *) getInputParameter("populationSize");
maxEvaluations = *(int *) getInputParameter("maxEvaluations");
IntervalOptSubsModel = *(int *) getInputParameter("intervalupdateparameters");
// TODO: indicators = (QualityIndicator) getInputParameter("indicators");
//Initialize the variables
population = new SolutionSet(populationSize);
evaluations = 0;
requiredEvaluations = 0;
//Read the operators
mutationOperator = operators_["mutation"];
crossoverOperator = operators_["crossover"];
selectionOperator = operators_["selection"];
ApplicationTools::displayTask("Initial Population", true);
// Create the initial solutionSet
Solution * newSolution;
Phylogeny * p = (Phylogeny *) problem_;
for (int i = 0; i < populationSize; i++) {
newSolution = new Solution(problem_);
if(p->StartingOptRamas){
p->BranchLengthOptimization(newSolution,p->StartingMetodoOptRamas,p->StartingNumIterOptRamas,p->StartingTolerenciaOptRamas);
}
if(p->OptimizacionSubstModel)
p->OptimizarParamModeloSust(newSolution);
problem_->evaluate(newSolution);
problem_->evaluateConstraints(newSolution);
evaluations++;
population->add(newSolution);
} //for
ApplicationTools::displayTaskDone();
// Generations
while (evaluations < maxEvaluations) {
// Create the offSpring solutionSet
offspringPopulation = new SolutionSet(populationSize);
Solution ** parents = new Solution*[2];
if(evaluations%100==0){
cout << "Evaluating " << evaluations << endl;
}
//obtain parents
parents[0] = (Solution *) (selectionOperator->execute(population));
parents[1] = (Solution *) (selectionOperator->execute(population));
// crossover
Solution ** offSpring = (Solution **) (crossoverOperator->execute(parents));
// mutation
mutationOperator->execute(offSpring[0]);
((Phylogeny *)problem_)->Optimization(offSpring[0]); //Optimize and update the scores (Evaluate OffSpring)
// evaluation
//problem_->evaluate(offSpring[0]);
//problem_->evaluateConstraints(offSpring[0]);
// insert child into the offspring population
offspringPopulation->add(offSpring[0]);
//.........这里部分代码省略.........
示例14: Distance
/*
* Runs the ssNSGA-II algorithm.
* @return a <code>SolutionSet</code> that is a set of non dominated solutions
* as a result of the algorithm execution
*/
SolutionSet * ssNSGAII::execute() {
int populationSize;
int maxEvaluations;
int evaluations;
// TODO: QualityIndicator indicators; // QualityIndicator object
int requiredEvaluations; // Use in the example of use of the
// indicators object (see below)
SolutionSet * population;
SolutionSet * offspringPopulation;
SolutionSet * unionSolution;
Operator * mutationOperator;
Operator * crossoverOperator;
Operator * selectionOperator;
Distance * distance = new Distance();
//Read the parameters
populationSize = *(int *) getInputParameter("populationSize");
maxEvaluations = *(int *) getInputParameter("maxEvaluations");
// TODO: indicators = (QualityIndicator) getInputParameter("indicators");
//Initialize the variables
population = new SolutionSet(populationSize);
evaluations = 0;
requiredEvaluations = 0;
//Read the operators
mutationOperator = operators_["mutation"];
crossoverOperator = operators_["crossover"];
selectionOperator = operators_["selection"];
// Create the initial solutionSet
Solution * newSolution;
for (int i = 0; i < populationSize; i++) {
newSolution = new Solution(problem_);
problem_->evaluate(newSolution);
problem_->evaluateConstraints(newSolution);
evaluations++;
population->add(newSolution);
} //for
// Generations
while (evaluations < maxEvaluations) {
// Create the offSpring solutionSet
offspringPopulation = new SolutionSet(populationSize);
Solution ** parents = new Solution*[2];
//obtain parents
parents[0] = (Solution *) (selectionOperator->execute(population));
parents[1] = (Solution *) (selectionOperator->execute(population));
// crossover
Solution ** offSpring = (Solution **) (crossoverOperator->execute(parents));
// mutation
mutationOperator->execute(offSpring[0]);
// evaluation
problem_->evaluate(offSpring[0]);
problem_->evaluateConstraints(offSpring[0]);
// insert child into the offspring population
offspringPopulation->add(offSpring[0]);
evaluations ++;
delete[] offSpring;
delete[] parents;
// Create the solutionSet union of solutionSet and offSpring
unionSolution = population->join(offspringPopulation);
delete offspringPopulation;
// Ranking the union
Ranking * ranking = new Ranking(unionSolution);
int remain = populationSize;
int index = 0;
SolutionSet * front = NULL;
for (int i=0;i<population->size();i++) {
delete population->get(i);
}
population->clear();
// Obtain the next front
front = ranking->getSubfront(index);
while ((remain > 0) && (remain >= front->size())) {
//Assign crowding distance to individuals
distance->crowdingDistanceAssignment(front, problem_->getNumberOfObjectives());
//.........这里部分代码省略.........
示例15: initParams
/**
* Runs of the SMPSO algorithm.
* @return a <code>SolutionSet</code> that is a set of non dominated solutions
* as a result of the algorithm execution
*/
SolutionSet * PSO::execute() {
initParams();
success_ = false;
globalBest_ = NULL;
//->Step 1 (and 3) Create the initial population and evaluate
for (int i = 0; i < particlesSize_; i++) {
Solution * particle = new Solution(problem_);
problem_->evaluate(particle);
evaluations_ ++;
particles_->add(particle);
if ((globalBest_ == NULL) || (particle->getObjective(0) < globalBest_->getObjective(0))) {
if (globalBest_!= NULL) {
delete globalBest_;
}
globalBest_ = new Solution(particle);
}
}
//-> Step2. Initialize the speed_ of each particle to 0
for (int i = 0; i < particlesSize_; i++) {
speed_[i] = new double[problem_->getNumberOfVariables()];
for (int j = 0; j < problem_->getNumberOfVariables(); j++) {
speed_[i][j] = 0.0;
}
}
//-> Step 6. Initialize the memory of each particle
for (int i = 0; i < particles_->size(); i++) {
Solution * particle = new Solution(particles_->get(i));
localBest_[i] = particle;
}
//-> Step 7. Iterations ..
while (iteration_ < maxIterations_) {
int * bestIndividualPtr = (int*)findBestSolution_->execute(particles_);
int bestIndividual = *bestIndividualPtr;
delete bestIndividualPtr;
computeSpeed(iteration_, maxIterations_);
//Compute the new positions for the particles_
computeNewPositions();
//Mutate the particles_
//mopsoMutation(iteration_, maxIterations_);
//Evaluate the new particles_ in new positions
for (int i = 0; i < particles_->size(); i++) {
Solution * particle = particles_->get(i);
problem_->evaluate(particle);
evaluations_ ++;
}
//Actualize the memory of this particle
for (int i = 0; i < particles_->size(); i++) {
//int flag = comparator_.compare(particles_.get(i), localBest_[i]);
//if (flag < 0) { // the new particle is best_ than the older remember
if ((particles_->get(i)->getObjective(0) < localBest_[i]->getObjective(0))) {
Solution * particle = new Solution(particles_->get(i));
delete localBest_[i];
localBest_[i] = particle;
} // if
if ((particles_->get(i)->getObjective(0) < globalBest_->getObjective(0))) {
Solution * particle = new Solution(particles_->get(i));
delete globalBest_;
globalBest_ = particle;
} // if
}
iteration_++;
}
// Return a population with the best individual
SolutionSet * resultPopulation = new SolutionSet(1);
int * bestIndexPtr = (int *)findBestSolution_->execute(particles_);
int bestIndex = *bestIndexPtr;
delete bestIndexPtr;
cout << "Best index = " << bestIndex << endl;
Solution * s = particles_->get(bestIndex);
resultPopulation->add(new Solution(s));
// Free memory
deleteParams();
return resultPopulation;
} // execute