From 0b61c5e8938e0bc7c2b56e4e81da624a8e598205 Mon Sep 17 00:00:00 2001
From: Lennart Eichhorn <lennart@madmanfred.com>
Date: Sun, 31 May 2020 17:12:24 +0200
Subject: [PATCH] Refactored the OnlyBest selector

---
 .../java/MainClasses/GeneticAlgorithm.java    |  2 +-
 src/main/java/Selectors/OnlyBest.java         | 28 ++++++-------------
 2 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/src/main/java/MainClasses/GeneticAlgorithm.java b/src/main/java/MainClasses/GeneticAlgorithm.java
index fb2725b..16f6c3d 100644
--- a/src/main/java/MainClasses/GeneticAlgorithm.java
+++ b/src/main/java/MainClasses/GeneticAlgorithm.java
@@ -126,7 +126,7 @@ public class GeneticAlgorithm {
         } else if (config.getSelectionMethod().equals(SelectionMethods.Tournament)) {
             this.selector = new Tournament(this.config, this.rand);
         } else if (config.getSelectionMethod().equals(SelectionMethods.OnlyBest)) {
-            this.selector = new OnlyBest(this.isHydrophobic);
+            this.selector = new OnlyBest();
         }
     }
 
diff --git a/src/main/java/Selectors/OnlyBest.java b/src/main/java/Selectors/OnlyBest.java
index 4f0980b..721dd55 100644
--- a/src/main/java/Selectors/OnlyBest.java
+++ b/src/main/java/Selectors/OnlyBest.java
@@ -7,31 +7,21 @@ import java.util.Random;
 
 public class OnlyBest implements Selector {
 
-    int[] isHydrophobic;
-
-    public OnlyBest(int[] isHydrophobic) {
-        this.isHydrophobic = isHydrophobic;
+    public OnlyBest() {
     }
 
     @Override
-    public Candidate[] selectNewPopulation(Candidate[] population, double[] fitness, double totalFitness) {
-        int populationSize = population.length;
-
-        int bestIndex = 0;
-        double bestFitness = 0;
-
-        for (int i = 0; i < populationSize; i++) {
-            if (fitness[i] >= bestFitness) {
-                bestFitness = fitness[i];
-                bestIndex = i;
+    public Candidate[] selectNewPopulation(Candidate[] generation) {
+        Candidate bestCandidate = generation[0];
+        for (Candidate candidate: generation) {
+            if (candidate.getFitness() >= bestCandidate.getFitness()) {
+                bestCandidate = candidate;
             }
         }
 
-        Candidate[] newPopulation = new Candidate[populationSize];
-        int[] bestFolding = population[bestIndex].getFolding();
-
-        for (int i = 0; i < populationSize; i++) {
-            newPopulation[i] = new Candidate(bestFolding);
+        Candidate[] newPopulation = new Candidate[generation.length];
+        for (int i = 0; i < generation.length; i++) {
+            newPopulation[i] = new Candidate(bestCandidate.getFolding());
         }
 
         return newPopulation;
-- 
GitLab