From 0a899a7e09d9da3a307aeaf7a500908bb50d0eca Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 14 Oct 2026 22:59:26 +0200 Subject: [PATCH] Fix 64-bits bug --- src/main/java/Main.java | 2 +- src/main/java/domain/binary/Individual.java | 13 +++++++++---- src/main/java/domain/binary/Population.java | 4 ++-- .../binary/algorithm/SimpleGeneticAlgorithm.java | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index c1917f5..25f520c 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -20,7 +20,7 @@ public class Main { break; case 2: SimpleGeneticAlgorithm ga = new SimpleGeneticAlgorithm( - 50, + 15, 0.5, 0.025, 5, diff --git a/src/main/java/domain/binary/Individual.java b/src/main/java/domain/binary/Individual.java index 9626f49..1a74b23 100644 --- a/src/main/java/domain/binary/Individual.java +++ b/src/main/java/domain/binary/Individual.java @@ -6,12 +6,13 @@ import lombok.Data; @Data public class Individual { - protected int defaultGeneLength = 64; - private byte[] genes = new byte[defaultGeneLength]; + private byte[] genes; private int fitness = 0; public Individual(byte[] solution) { - for (int i = 0; i < genes.length; i++) { + + genes = new byte[solution.length]; + for (int i = 0; i < solution.length; i++) { byte gene = (byte) Math.round(Math.random()); genes[i] = gene; } @@ -28,13 +29,17 @@ public class Individual { fitness = 0; } + public int getGenesCount(){ + return genes.length; + } + public void recomputeFitness(byte[] solution) { this.fitness = computeFitness(solution); } private int computeFitness(byte[] solution) { int fitness = 0; - for (int i = 0; i < this.getDefaultGeneLength() && i < solution.length; i++) { + for (int i = 0; i < this.genes.length && i < solution.length; i++) { if (this.getSingleGene(i) != solution[i]) continue; fitness++; } diff --git a/src/main/java/domain/binary/Population.java b/src/main/java/domain/binary/Population.java index e13c0e6..e703092 100644 --- a/src/main/java/domain/binary/Population.java +++ b/src/main/java/domain/binary/Population.java @@ -86,7 +86,7 @@ public class Population { private Individual crossover(Individual indiv1, Individual indiv2, byte[] solution) { Individual newSol = new Individual(solution); - for (int i = 0; i < newSol.getDefaultGeneLength(); i++) { + for (int i = 0; i < newSol.getGenesCount(); i++) { newSol.setSingleGene(i, Math.random() <= uniformRate ? indiv1.getSingleGene(i) : indiv2.getSingleGene(i)); @@ -96,7 +96,7 @@ public class Population { } private void mutate(Individual indiv) { - for (int i = 0; i < indiv.getDefaultGeneLength(); i++) { + for (int i = 0; i < indiv.getGenesCount(); i++) { if (Math.random() <= mutationRate) { byte gene = (byte) Math.round(Math.random()); indiv.setSingleGene(i, gene); diff --git a/src/main/java/domain/binary/algorithm/SimpleGeneticAlgorithm.java b/src/main/java/domain/binary/algorithm/SimpleGeneticAlgorithm.java index c00eed9..b36bfd9 100644 --- a/src/main/java/domain/binary/algorithm/SimpleGeneticAlgorithm.java +++ b/src/main/java/domain/binary/algorithm/SimpleGeneticAlgorithm.java @@ -28,8 +28,8 @@ public class SimpleGeneticAlgorithm extends AbstractGeneticAlgorithm{ @Override protected void run() { - System.out.println("Generation: " + getGenerationCount() + " Correct genes found: " + population.getFittest().getFitness()); population = population.evolve(elitism, getSolution()); + System.out.println("Generation: " + getGenerationCount() + " Correct genes found: " + population.getFittest().getFitness()); } @Override