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

Reworked and implemented fitness

parent f0c86a9a
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
#include "population.h"
#include "indicator.h"
#include "fitness.h"
void fitness(Population pop){
}
#ifndef FITNESS_H
#define FITNESS_H
void fitness(Population pop);
#endif
...@@ -22,8 +22,8 @@ void ibea(void* evaluate, ...@@ -22,8 +22,8 @@ void ibea(void* evaluate,
int mu = 10; /* number of tournament */ int mu = 10; /* number of tournament */
int eta = 100; /* polynomiale mutation degree */ int eta = 100; /* polynomiale mutation degree */
Population pop = Population(n_individus, dimension); Population pop = Population(n_individus, dimension, number_of_objectives);
Population new_pop = Population(n_individus, dimension); Population new_pop = Population(n_individus, dimension, number_of_objectives);
random_init(&pop, random_generator); random_init(&pop, random_generator);
......
#include <cstdlib> #include <cstdlib>
#include <cmath>
#include "indicator.h"
#include "population.h" #include "population.h"
Population::Population(int size, int dimension, int mu) : Population::Population(int size, int dimension, int n_objectives) :
size_(size), current_size_(0), dimension_(dimension), mu_(mu){ size_(size), current_size_(0), dimension_(dimension), n_objectives_(n_objectives)
{
population_ = (double **) malloc(size_*sizeof(double *)); population_ = (double **) malloc(size_*sizeof(double *));
for (int i=0; i<size_; i++){ for (int i=0; i<size_; i++){
population_[i] = (double *) malloc(dimension_*sizeof(double)); population_[i] = (double *) malloc(dimension_*sizeof(double));
} }
values_ = (double **) malloc(size_*sizeof(double *));
for (int i=0; i<size_; i++){
values_[i] = (double *) malloc(n_objectives_*sizeof(double));
}
indicator_values_ = (double **) malloc(size_*sizeof(double *));
indicator_values_[0] = NULL;
for (int i=1; i<size_; i++){
indicator_values_[i] = (double *) malloc((size_-i)*sizeof(double));
}
fitnesses_ = (double *) malloc(dimension_*sizeof(double)); fitnesses_ = (double *) malloc(dimension_*sizeof(double));
} }
...@@ -20,6 +33,18 @@ Population::~Population(){ ...@@ -20,6 +33,18 @@ Population::~Population(){
} }
free(population_); free(population_);
/* Free values */
for (int i=0; i<size_; i++){
free(values_[i]);
}
free(values);
/* Free indicator values */
for (int i=1; i<size_; i++){
free(indicator_values_[i]);
}
free(indicator_values_);
/* Free fitnesses */ /* Free fitnesses */
free(fitnesses_); free(fitnesses_);
} }
...@@ -63,3 +88,32 @@ void Population::setMin(int i){ ...@@ -63,3 +88,32 @@ void Population::setMin(int i){
int Population::getMin(){ int Population::getMin(){
return ind_min_; return ind_min_;
} }
void Population::evaluate(void* evaluate_function){
for (int i=0; i<current_size_; i++){
evaluate_function(population_[i], values_[i]);
}
}
void Population::compute_indicators(){
c_ = 0;
for (int i=0; i<current_size_; i++){
for (int j=i+1; j<current_size_; j++){
indicator_values_[i][j] = indicator(values_[i], values_[j], n_objectives_);
if (indicator_values_[i][j] > c_){
c_ = indicator_values_[i][j];
}
}
}
}
void Population::compute_fitnesses(double kappa){
int d = c_ * kappa;
for (int i=0; i<current_size_; i++){
fitness = 0
for (int j=i+1; j<current_size_; j++){
fitness += -exp(-indicator_values_[i][j]/d);
}
fitnesses_[i] = fitness
}
}
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
class Population { class Population {
public: public:
Population(int size_max, int dimension, int mu); Population(int size_max, int dimension, int n_objectives);
~Population(); ~Population();
int getSize(); int getSize();
int getCurrentSize(); int getCurrentSize();
...@@ -18,14 +18,22 @@ public: ...@@ -18,14 +18,22 @@ public:
void setMin(int i); void setMin(int i);
int getMin(); int getMin();
void evaluate(void* evaluate_function);
void compute_indicators();
void compute_fitnesses(double kappa)
private: private:
int size_; int size_;
int current_size_; int current_size_;
int dimension_; int dimension_;
int n_objectives_;
double ** population_; double ** population_;
double ** values_;
double ** indicator_values_;
double * fitnesses_; double * fitnesses_;
int ind_min_; int ind_min_;
double c_;
}; };
#endif #endif
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter