Skip to content
Extraits de code Groupes Projets
Valider 6969a2d3 rédigé par Kévin PASINI's avatar Kévin PASINI
Parcourir les fichiers

Update combination.cpp

parent 7372792e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
#include <utility>
#include <cstdlib>
#include <iostream>
#include "../coco/coco.h"
#include "population.h"
#include "combination.h"
std::pair <double,double> simple_combination(double parent1,
double parent2,
const double eta,
coco_random_state_t *random_generator)
void simple_combination(Population & pop_in,
Population & pop_out,
int parent1,
int parent2,
const double eta,
coco_random_state_t *random_generator)
{
double child1;
double child2;
double dimension = pop_in.getDim();
for (int j=0; j<floor(dimension/2.0); j++){
double u = coco_random_uniform(random_generator);
double beta;
std::pair <double,double> result;
if (u <= 0.5){
beta = pow(2*u,1/(1+eta));
}
else {
beta = pow(1/(2*(1-u)),1/(1+eta));
}
child1 = 0.5*((1+beta)*parent1 + (1-beta)*parent2);
child2 = 0.5*((1+beta)*parent1 + (1-beta)*parent2);
result= std::make_pair(child1,child2);
return result;
double child1 = 0.5*((1+beta)*pop_in.getIndiv(parent1,j) + (1-beta)*pop_in.getIndiv(parent2,j));
double child2 = 0.5*((1-beta)*pop_in.getIndiv(parent1,j) + (1+beta)*pop_in.getIndiv(parent2,j));
pop_out.setIndiv(parent1,j,child1);
pop_out.setIndiv(parent2,j,child2);
}
}
/* Recombinaison prédéfini */
......@@ -36,18 +41,11 @@ void combinate(Population & pop_in,
{
double u;
double size = pop_in.getCurrentSize();
double dimension = pop_in.getDim();
std::pair <double,double> childs;
u = coco_random_uniform(random_generator);
for (int i=0; i<floor(size/2.0); i++){
for (int j=0; j<floor(dimension/2.0); j++){
if (u <= p_combination){
childs = simple_combination(pop_in.getIndiv(i,j), pop_in.getIndiv(size-i-1,dimension-j-1), eta, random_generator);
pop_out.setIndiv(i,j,childs.first);
pop_out.setIndiv(size-i-1,dimension-j-1,childs.second);
simple_combination(pop_in,pop_out,i,size-i-1, eta, random_generator);
}
}
}
pop_out.setCurrenSize(size);
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter