Skip to content
Extraits de code Groupes Projets
Valider 74f9bf69 rédigé par Jonathan CROUZET's avatar Jonathan CROUZET
Parcourir les fichiers

Optimized mutation's code

parent 447bae16
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -6,9 +6,12 @@ ...@@ -6,9 +6,12 @@
#include "population.h" #include "population.h"
#include "mutation.h" #include "mutation.h"
double polynomiale_mutation(double parent, const double eta, double polynomiale_mutation(double parent,
const double lower_bound, const double upper_bound, coco_random_state_t *random_generator){ const double eta,
const double lower_bound,
const double upper_bound,
coco_random_state_t *random_generator)
{
double child; double child;
double u = coco_random_uniform(random_generator); double u = coco_random_uniform(random_generator);
double delta = std::min((parent - lower_bound)/(upper_bound - lower_bound), double delta = std::min((parent - lower_bound)/(upper_bound - lower_bound),
...@@ -26,20 +29,21 @@ double polynomiale_mutation(double parent, const double eta, ...@@ -26,20 +29,21 @@ double polynomiale_mutation(double parent, const double eta,
return child; return child;
} }
void mutate(Population population, const double *lower_bounds, const double *upper_bounds, void mutate(&Population population,
const double eta, coco_random_state_t *random_generator){ const double *lower_bounds,
const double *upper_bounds,
double lb, ub, u; const double eta,
coco_random_state_t *random_generator)
{
double u;
double size = population.getSize(); double size = population.getSize();
double dimension = population.getDim(); double dimension = population.getDim();
for (int i; i<size; i++){ for (int i; i<size; i++){
for (int j; j<dimension; j++){ for (int j; j<dimension; j++){
lb = lower_bounds[j];
ub = upper_bounds[j];
u = coco_random_uniform(random_generator); u = coco_random_uniform(random_generator);
if (u <= 0.01){ if (u <= 0.01){
population.setIndiv(i,j,polynomiale_mutation(population.getIndiv(i,j), eta, lb, ub, random_generator)); population.setIndiv(i,j,polynomiale_mutation(population.getIndiv(i,j), eta, lower_bounds[j], upper_bounds[j], random_generator));
} }
} }
} }
......
#ifndef MUTATION_H #ifndef MUTATION_H
#define MUTATION_H #define MUTATION_H
double polynomiale_mutation(double parent, const double eta, double polynomiale_mutation(double parent,
const double lower_bound, const double upper_bound, coco_random_state_t *random_generator); const double eta,
const double lower_bound,
const double upper_bound,
coco_random_state_t *random_generator);
void mutate(Population population, const double *lower_bounds, const double *upper_bounds, void mutate(&Population population,
const double eta, coco_random_state_t *random_generator); const double *lower_bounds,
const double *upper_bounds,
const double eta,
coco_random_state_t *random_generator);
#endif #endif
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