From c59d40efbc25a7ca1d9b6935217329d0a55bbf66 Mon Sep 17 00:00:00 2001 From: Lennart Eichhorn <lennart@madmanfred.com> Date: Fri, 29 May 2020 19:55:45 +0200 Subject: [PATCH] Moved mutation and crossover logic from Candidate to Mutator. --- src/main/java/MainClasses/Candidate.java | 28 ++---------------------- src/main/java/Mutators/Crossover.java | 16 +++++++++++++- src/main/java/Mutators/SinglePoint.java | 6 +++-- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/main/java/MainClasses/Candidate.java b/src/main/java/MainClasses/Candidate.java index db5e6ec..985f542 100644 --- a/src/main/java/MainClasses/Candidate.java +++ b/src/main/java/MainClasses/Candidate.java @@ -6,7 +6,7 @@ import java.util.Arrays; public class Candidate { int[] isHydrophobic; // 0 = no | 1 = yes - int[] outgoingDirection; // 0 = North | 1 = East | 2 = South | 3 = West + public int[] outgoingDirection; // 0 = North | 1 = East | 2 = South | 3 = West public ArrayList<Vertex> vertexList; public double fitness; @@ -18,7 +18,7 @@ public class Candidate { this.fitness = -1d; // Not calculated yet } - private ArrayList<Vertex> constructVertexes() { + public ArrayList<Vertex> constructVertexes() { ArrayList<Vertex> vertexList = new ArrayList<>(); int currentX = 0; int currentY = 0; @@ -46,30 +46,6 @@ public class Candidate { return vertexList; } - public void mutateDir(int mutationPlace, int mutation) { - outgoingDirection[mutationPlace] = mutation; - this.vertexList = constructVertexes(); - } - - public void crossover(Candidate partner, int crossoverPlace) { - // Save this gene for a moment while skipping the part that stays - int[] originalDirections = new int[outgoingDirection.length]; - for (int i = crossoverPlace; i < outgoingDirection.length; i++) { - originalDirections[i] = outgoingDirection[i]; - } - - // Edit these directions - for (int i = crossoverPlace; i < outgoingDirection.length; i++) { - outgoingDirection[i] = partner.outgoingDirection[i]; - } - - // Edit partners directions - for (int i = crossoverPlace; i < outgoingDirection.length; i++) { - partner.outgoingDirection[i] = originalDirections[i]; - } - - } - @Override public String toString() { return "Canidate{" + diff --git a/src/main/java/Mutators/Crossover.java b/src/main/java/Mutators/Crossover.java index 085efce..594adb1 100644 --- a/src/main/java/Mutators/Crossover.java +++ b/src/main/java/Mutators/Crossover.java @@ -35,7 +35,21 @@ public class Crossover<T extends Enum<?>> implements Mutator { if (this.crossoverChance > this.rand.nextDouble()) { int crossoverPartner = this.rand.nextInt(populationSize); int crossoverPlace = this.rand.nextInt(proteinLength); - candidate.crossover(population[crossoverPartner], crossoverPlace); + + int[] originalDirections = new int[candidate.outgoingDirection.length]; + for (int i = crossoverPlace; i < candidate.outgoingDirection.length; i++) { + originalDirections[i] = candidate.outgoingDirection[i]; + } + + // Edit these directions + for (int i = crossoverPlace; i < candidate.outgoingDirection.length; i++) { + candidate.outgoingDirection[i] = population[crossoverPartner].outgoingDirection[i]; + } + + // Edit partners directions + for (int i = crossoverPlace; i < candidate.outgoingDirection.length; i++) { + population[crossoverPartner].outgoingDirection[i] = originalDirections[i]; + } } } } diff --git a/src/main/java/Mutators/SinglePoint.java b/src/main/java/Mutators/SinglePoint.java index e4f313d..90e4205 100644 --- a/src/main/java/Mutators/SinglePoint.java +++ b/src/main/java/Mutators/SinglePoint.java @@ -35,9 +35,11 @@ public class SinglePoint<T extends Enum<?>> implements Mutator { int mutationPlace = this.rand.nextInt(proteinLength); // TODO: Use the enums or get rid of this hard coded 3 and 4... if (this.isFRL) { - candidate.mutateDir(mutationPlace, this.rand.nextInt(3)); + candidate.outgoingDirection[mutationPlace] = this.rand.nextInt(3); + candidate.vertexList = candidate.constructVertexes(); } else { - candidate.mutateDir(mutationPlace, this.rand.nextInt(4)); + candidate.outgoingDirection[mutationPlace] = this.rand.nextInt(4); + candidate.vertexList = candidate.constructVertexes(); } } } -- GitLab