From 6969a2d37484a617ab7dc70b3550f7c457d425fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20PASINI?= <kevin.pasini@ensiie.fr> Date: Mon, 17 Oct 2016 12:26:50 +0200 Subject: [PATCH] Update combination.cpp --- src/ibea/combination.cpp | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/ibea/combination.cpp b/src/ibea/combination.cpp index 28b3b6d..f4a0056 100644 --- a/src/ibea/combination.cpp +++ b/src/ibea/combination.cpp @@ -1,30 +1,35 @@ #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); } -- GitLab