mtg-genetic-deckbuilding

Generating and improving Magic: The Gathering decks using a genetic algorithm
git clone https://kevincorvisier.fr/git/mtg-genetic-deckbuilding.git
Log | Files | Refs | LICENSE

commit dbd1a610fcfc46a891f6a6e9aef61ca791ff28e4
parent 0fa17222c7a0370dc2ea87aea1db8d625735ea55
Author: Kevin Corvisier <git@kevincorvisier.fr>
Date:   Thu, 19 Dec 2024 12:43:40 +0900

Create mutation rate configuration

Diffstat:
Msrc/main/java/fr/kevincorvisier/mtg/gdb/ApplicationConfig.java | 1-
Msrc/main/java/fr/kevincorvisier/mtg/gdb/population/NextGenerationService.java | 12+++++++++---
Msrc/main/packaged-resources/cfg/application.properties | 10++++++++++
Dsrc/main/packaged-resources/cfg/mutation.properties | 2--
4 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/main/java/fr/kevincorvisier/mtg/gdb/ApplicationConfig.java b/src/main/java/fr/kevincorvisier/mtg/gdb/ApplicationConfig.java @@ -24,7 +24,6 @@ import fr.kevincorvisier.mtg.gdb.spring.converters.StringToFileConverter; @Configuration @PropertySource("application.properties") @PropertySource("evaluation.properties") -@PropertySource("mutation.properties") @PropertySource("population.properties") @ComponentScan("fr.kevincorvisier.mtg.gdb") public class ApplicationConfig diff --git a/src/main/java/fr/kevincorvisier/mtg/gdb/population/NextGenerationService.java b/src/main/java/fr/kevincorvisier/mtg/gdb/population/NextGenerationService.java @@ -32,6 +32,8 @@ public class NextGenerationService private final int maximumSize; @Value("${crossover.rate}") private final double crossoverRate; + @Value("${mutation.rate}") + private final double mutationRate; private final Crossover crossover; private final Mutation mutation; @@ -93,14 +95,18 @@ public class NextGenerationService pair = crossover.crossover(pair.getFirst(), pair.getSecond()); } + // Mutation + if (rnd.nextDouble() < mutationRate) + { + mutation.mutate(pair.getFirst(), estimatedFitness); + mutation.mutate(pair.getSecond(), estimatedFitness); + } + for (final Individual individual : new Individual[] { pair.getFirst(), pair.getSecond() }) { if (result.size() >= maximumSize) continue; // Ensure second child will not breach the population limit - // Mutation - mutation.mutate(individual, estimatedFitness); - if (validationService.validate(individual, next)) next.addIndividual(individual); } diff --git a/src/main/packaged-resources/cfg/application.properties b/src/main/packaged-resources/cfg/application.properties @@ -17,3 +17,13 @@ validation.child.max-unique-cards=24 # crossover.rate=0.8 + + +# +# Mutation +# + +mutation.rate=1 + +# Type of mutation to perform, possible values: RANDOM, SWAP_SIDEBOARD +mutation.type=RANDOM diff --git a/src/main/packaged-resources/cfg/mutation.properties b/src/main/packaged-resources/cfg/mutation.properties @@ -1,2 +0,0 @@ -# Type of mutation to perform, possible values: RANDOM, SWAP_SIDEBOARD -mutation.type=RANDOM