commit a29bade4b15a1d458cdcb784b0ed95f3e0da9626
parent a112a9cec219ecddb31bad9a581001543369294b
Author: Kevin Corvisier <git@kevincorvisier.fr>
Date: Thu, 9 Jan 2025 18:46:03 +0900
Use previously computed fitness as estimated fitness when no crossover
is done
Diffstat:
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/main/java/fr/kevincorvisier/mtg/gdb/population/NextGenerationService.java b/src/main/java/fr/kevincorvisier/mtg/gdb/population/NextGenerationService.java
@@ -108,15 +108,20 @@ public class NextGenerationService
{
// Selection
Pair<Individual, Individual> pair = selection.select(population);
- final double estimatedFitness = (pair.getFirst().getFitness() + pair.getSecond().getFitness()) / 2d;
+ final Pair<Double, Double> estimatedFitness;
// Crossover
if (rnd.nextDouble() < crossoverRate)
{
+ final double averageParentFitness = (pair.getFirst().getFitness() + pair.getSecond().getFitness()) / 2d;
+ estimatedFitness = Pair.create(averageParentFitness, averageParentFitness);
+
pair = crossover.crossover(pair.getFirst(), pair.getSecond());
}
else
{
+ estimatedFitness = Pair.create(pair.getFirst().getFitness(), pair.getSecond().getFitness());
+
pair = Pair.create(new Individual(individualNameGenerator.createName() + "_" + pair.getFirst().getName(), pair.getFirst().getDeck()),
new Individual(individualNameGenerator.createName() + "_" + pair.getSecond().getName(), pair.getSecond().getDeck()));
}
@@ -124,8 +129,8 @@ public class NextGenerationService
// Mutation
if (rnd.nextDouble() < mutationRate)
{
- mutation.mutate(pair.getFirst(), estimatedFitness);
- mutation.mutate(pair.getSecond(), estimatedFitness);
+ mutation.mutate(pair.getFirst(), estimatedFitness.getFirst());
+ mutation.mutate(pair.getSecond(), estimatedFitness.getSecond());
}
for (final Individual individual : new Individual[] { pair.getFirst(), pair.getSecond() })