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