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

Update combination.cpp

parent 3aa8980c
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 <cstdio>
#include "../coco/coco.h"
#include "population.h"
#include "combination.h"
......@@ -9,6 +8,8 @@
void simple_combination(Population & pop_in,
Population & pop_out,
const double *lower_bounds,
const double *upper_bounds,
int parent1,
int parent2,
const double eta,
......@@ -22,14 +23,25 @@ void simple_combination(Population & pop_in,
if (u <= 0.5){
beta = pow(2*u,1/(1+eta));
}
else {
beta = pow(1/(2*u),1/(1+eta));
beta = pow(1/(2*(1-u)),1/(1+eta));
}
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));
if (child1 > upper_bounds[j]){
child1 = upper_bounds[j];
}
if (child1 < lower_bounds[j]){
child1 = lower_bounds[j];
}
if (child2 > upper_bounds[j]){
child2 = upper_bounds[j];
}
if (child2 < lower_bounds[j]){
child2 = lower_bounds[j];
}
pop_out.setIndiv(parent1,j,child1);
pop_out.setIndiv(parent2,j,child2);
}
......@@ -38,6 +50,8 @@ void simple_combination(Population & pop_in,
/* Recombinaison prédéfini */
void combinate(Population & pop_in,
Population & pop_out,
const double *lower_bounds,
const double *upper_bounds,
double eta,
double p_combination,
coco_random_state_t *random_generator)
......@@ -47,8 +61,9 @@ void combinate(Population & pop_in,
u = coco_random_uniform(random_generator);
for (int i=0; i<floor(size/2.0); i++){
if (u <= p_combination){
simple_combination(pop_in,pop_out,i,size-i-1, eta, random_generator);
simple_combination(pop_in,pop_out,lower_bounds,upper_bounds,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