From 6e047fbe9f38ff41a2ebe63dd71041e565f7a424 Mon Sep 17 00:00:00 2001 From: Jonathan CROUZET <jonathan.crouzet@ensiie.fr> Date: Mon, 10 Oct 2016 16:50:09 +0200 Subject: [PATCH] Implemented binary tournament for Population --- src/ibea/tournament.cpp | 26 +++++++++++++++++++++++++- src/ibea/tournament.h | 5 ++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/ibea/tournament.cpp b/src/ibea/tournament.cpp index 5a42b19..0a3c5d5 100644 --- a/src/ibea/tournament.cpp +++ b/src/ibea/tournament.cpp @@ -1,6 +1,30 @@ +#include "../coco/coco.h" #include "population.h" #include "tournament.h" -void binary_tournament(Population pop_in, Population pop_out){ +void binary_tournament(Population population_in, + &Population population_out, + int mu, + coco_random_state_t *random_generator) +{ + int size_in = population_in.getCurrentSize(); + int size_out = population_out.getCurrentSize(); + int i,j + + for (int k = 0; k<mu; k++){ + i = (int) coco_random_uniform(random_generator)*size_in + j = (int) coco_random_uniform(random_generator)*size_in + + if (population_in.getFit(i) > population_in.getFit(j)) { + for (int m = 0; m<population_out.getDim(); m++){ + population_out.setIndiv(size_out + k, m, population_in.getIndiv(i,m)) + } + } + else { + for (int m = 0; m<population_out.getDim(); m++){ + population_out.setIndiv(size_out + k, m, population_in.getIndiv(j,m)) + } + } + } } diff --git a/src/ibea/tournament.h b/src/ibea/tournament.h index f1b8ffa..76498e1 100644 --- a/src/ibea/tournament.h +++ b/src/ibea/tournament.h @@ -1,6 +1,9 @@ #ifndef TOURNAMENT_H #define TOURNAMENT_H -void binary_tournament(Population pop_in, Population pop_out); +void binary_tournament(Population population_in, + Population population_out, + int mu, + coco_random_state_t *random_generator); #endif -- GitLab