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 f52631ce6b4276258e253f870067c248d7f0955b
parent ea98cd1f9631b7d5d27de969637e471df07dba79
Author: Kevin Corvisier <git@kevincorvisier.fr>
Date:   Sun, 29 Sep 2024 21:57:22 +0900

Add example opponents decklists, initial population and card pool
Diffstat:
Msrc/main/java/fr/kevincorvisier/mtg/gdb/ai/GeneticAlgorithm.java | 3++-
Msrc/main/java/fr/kevincorvisier/mtg/gdb/population/PopulationFactory.java | 45++++++++++++++++++++++++---------------------
Msrc/main/java/fr/kevincorvisier/mtg/gdb/utils/PropertiesUtils.java | 32--------------------------------
Msrc/main/packaged-resources/cfg/evaluation.properties | 2+-
Asrc/main/packaged-resources/cfg/example1/card-pool.txt | 27+++++++++++++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2020-02-16_MarcoBrina_Burn.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2020-08-22_RolandChang_Burn.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2021-01-16_IsmaelGarzon_Burn.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2021-01-16_PabloSuarez_Burn.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2021-02-28_JesseLaidlaw_Burn.txt | 14++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2021-05-31_ThomasCorradoMetelsky_Burn.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2022-07-23_HasegawaYuudai_Burn.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2023-02-25_watanaberyo_Burn.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2023-03-25_SetoMasakazu_Burn.txt | 12++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2023-09-30_MartinBerlin_Burn.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-05-04_LukasKovarik_Burn.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-05-04_MichalCerny_Burn.txt | 17+++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-06-15_JoeGallego_Burn.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-09-20_ColinSmith_Burn.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-09-20_DanielHall_Burn.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-09-20_NathanShue_Burn.txt | 14++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-09-21_DanielPalme_Burn.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-09-21_GabrielMiklik_Burn.txt | 17+++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-09-21_JiriMoravec_Burn.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/initial-population/2024-09-21_SvenLutz_Burn.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2021-11-27_OnodaHirhoshi_Stompy.txt | 14++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2021-12-31_AkaiSatoshi_BGAggro.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2022-04-29_AkaiSatoshi_TurboCycling.txt | 18++++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2022-12-30_WatanabeDaiki_BlueOrbMiddleSchool.txt | 18++++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2023-03-25_SetoMasakazu_Burn.txt | 12++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2023-06-17_OkauchiRyota_Rogue.txt | 14++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2024-01-20_OkauchiRyota_SnakeTongueMiddleSchool.txt | 19+++++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2024-02-25_YaitaDaisuke_URcontrolMiddleSchool.txt | 24++++++++++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2024-06-15_SugiuraYuki_Survival.txt | 22++++++++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2024-08-18_TsujiNaoto_CanadianThresholdMiddleSchool.txt | 19+++++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2024-09-14_SuzukiRyo_GoblinMiddleSchool.txt | 15+++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2024-09-14_TsujiNaoto_Steroid.txt | 16++++++++++++++++
Asrc/main/packaged-resources/cfg/example1/opponents/2024-09-23_TamaruDaisuke_DeadguyAle.txt | 16++++++++++++++++
Msrc/main/packaged-resources/cfg/mutation.properties | 2+-
Msrc/main/packaged-resources/cfg/population.properties | 4++--
40 files changed, 586 insertions(+), 58 deletions(-)

diff --git a/src/main/java/fr/kevincorvisier/mtg/gdb/ai/GeneticAlgorithm.java b/src/main/java/fr/kevincorvisier/mtg/gdb/ai/GeneticAlgorithm.java @@ -40,6 +40,7 @@ public class GeneticAlgorithm implements Reloadable private final List<Evaluation> evaluators; private final ChildValidator childValidator; private final EvaluationStopCondition evaluationStoppingCondition; + private final PopulationFactory populationFactory; private Population population = null; @@ -103,7 +104,7 @@ public class GeneticAlgorithm implements Reloadable // Initialize the population if (generationCount == 0) - population = PopulationFactory.create(); + population = populationFactory.create(); else toNextGeneration(); diff --git a/src/main/java/fr/kevincorvisier/mtg/gdb/population/PopulationFactory.java b/src/main/java/fr/kevincorvisier/mtg/gdb/population/PopulationFactory.java @@ -5,41 +5,46 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Properties; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; import forge.deck.Deck; import forge.deck.DeckgenUtil; import forge.item.PaperCard; import fr.kevincorvisier.mtg.gdb.utils.ForgeUtils; -import fr.kevincorvisier.mtg.gdb.utils.PropertiesUtils; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @Slf4j -@NoArgsConstructor(access = AccessLevel.PRIVATE) // static class +@Service +@RequiredArgsConstructor public class PopulationFactory { - public static Population create() + @Value("${population.elitism-rate}") + private final double elitismRate; + @Value("${population.maximum-size}") + private final int maximumSize; + @Value("${population.initialization.disk.directories}") + private final File[] directories; + @Value("${population.initialization.type}") + private final String initializationType; + @Value("${population.initialization.random.card-pool}") + private final File cardPool; + + public Population create() { try { - final Properties properties = new Properties(); - properties.load(PopulationFactory.class.getClassLoader().getResourceAsStream("population.properties")); - - final double elitismRate = PropertiesUtils.getDouble(properties, "population.elitism-rate"); - final int maximumSize = PropertiesUtils.getInt(properties, "population.maximum-size"); - final ElitistPopulation population = new ElitistPopulation(elitismRate, maximumSize); - final String initializationType = PropertiesUtils.getString(properties, "population.initialization.type"); switch (initializationType) { case "DISK": - loadFromDisk(population, properties); + loadFromDisk(population); break; case "RANDOM": - initializeWithRandomIndividuals(population, properties); + initializeWithRandomIndividuals(population); break; default: throw new RuntimeException("Invalid initialization type: " + initializationType + ", expected: DISK, RANDOM"); @@ -58,11 +63,11 @@ public class PopulationFactory /** * Initialize the population by loading decks from disk */ - private static void loadFromDisk(final ElitistPopulation population, final Properties properties) + private void loadFromDisk(final ElitistPopulation population) { - final Map<Long, String> loaded = new HashMap<Long, String>(); + final Map<Long, String> loaded = new HashMap<>(); - for (final File dir : PropertiesUtils.getFileArray(properties, "population.initialization.disk.directories")) + for (final File dir : directories) { for (final Deck deck : ForgeUtils.loadDecks(dir)) { @@ -77,10 +82,8 @@ public class PopulationFactory } } - private static void initializeWithRandomIndividuals(final Population population, final Properties properties) + private void initializeWithRandomIndividuals(final Population population) { - final File cardPool = PropertiesUtils.getFile(properties, "population.initialization.random.card-pool"); - final Collection<String> cardNames = new HashSet<>(); for (final PaperCard card : ForgeUtils.loadCardsList(cardPool)) cardNames.add(card.getName()); diff --git a/src/main/java/fr/kevincorvisier/mtg/gdb/utils/PropertiesUtils.java b/src/main/java/fr/kevincorvisier/mtg/gdb/utils/PropertiesUtils.java @@ -1,7 +1,5 @@ package fr.kevincorvisier.mtg.gdb.utils; -import java.io.File; -import java.util.Arrays; import java.util.Properties; import org.apache.commons.lang3.StringUtils; @@ -19,34 +17,4 @@ public class PropertiesUtils throw new RuntimeException("Missing or empty property: " + key); return value; } - - public static String getStringOrDefault(final Properties properties, final String key, final String defaultValue) - { - final String value = properties.getProperty(key); - if (StringUtils.isBlank(value)) - return defaultValue; - return value; - } - - public static double getDouble(final Properties properties, final String key) - { - return Double.parseDouble(getString(properties, key)); - } - - public static int getInt(final Properties properties, final String key) - { - return Integer.parseInt(getString(properties, key)); - } - - public static File[] getFileArray(final Properties properties, final String key) - { - return Arrays.stream(getString(properties, key).split(",")) // - .map(File::new) // - .toArray(File[]::new); - } - - public static File getFile(final Properties properties, final String key) - { - return new File(getString(properties, key)); - } } diff --git a/src/main/packaged-resources/cfg/evaluation.properties b/src/main/packaged-resources/cfg/evaluation.properties @@ -48,7 +48,7 @@ evaluation.win-ratio.subsequent.min-games=93 evaluation.win-ratio.timeout.seconds=120 evaluation.win-ratio.timeout.player-turns=12 -evaluation.win-ratio.opponents-directory=/home/kebi/Documents/mtg/middleschool/meta +evaluation.win-ratio.opponents-directory=example1/opponents evaluation.win-ratio.player.ai-profile=Default evaluation.win-ratio.opponent.ai-profile=Default diff --git a/src/main/packaged-resources/cfg/example1/card-pool.txt b/src/main/packaged-resources/cfg/example1/card-pool.txt @@ -0,0 +1,27 @@ +Ball Lightning +Barbarian Ring +Blistering Firecat +Bloodstained Mire +Browbeat +Cursed Scroll +Fireblast +Firebolt +Flame Rift +Goblin Patrol +Grim Lavamancer +Hammer of Bogardan +Incinerate +Jackal Pup +Lava Dart +Lightning Bolt +Mogg Fanatic +Mountain +Price of Progress +Pyrostatic Pillar +Seal of Fire +Shock +Snow-Covered Mountain +Sulfuric Vortex +Volcanic Hammer +Wasteland +Wooded Foothills diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2020-02-16_MarcoBrina_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2020-02-16_MarcoBrina_Burn.txt @@ -0,0 +1,16 @@ +4 Ball Lightning +2 Flame Rift +4 Wooded Foothills +4 Bloodstained Mire +4 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +2 Firebolt +2 Wasteland +2 Sulfuric Vortex +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2020-08-22_RolandChang_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2020-08-22_RolandChang_Burn.txt @@ -0,0 +1,15 @@ +2 Shock +4 Ball Lightning +4 Bloodstained Mire +4 Wooded Foothills +4 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +3 Volcanic Hammer +4 Fireblast +3 Sulfuric Vortex +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2021-01-16_IsmaelGarzon_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2021-01-16_IsmaelGarzon_Burn.txt @@ -0,0 +1,15 @@ +3 Shock +4 Bloodstained Mire +4 Wooded Foothills +4 Cursed Scroll +4 Grim Lavamancer +4 Goblin Patrol +2 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +2 Firebolt +2 Sulfuric Vortex +11 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2021-01-16_PabloSuarez_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2021-01-16_PabloSuarez_Burn.txt @@ -0,0 +1,15 @@ +4 Shock +4 Ball Lightning +4 Bloodstained Mire +4 Wooded Foothills +3 Cursed Scroll +4 Grim Lavamancer +4 Goblin Patrol +2 Barbarian Ring +4 Jackal Pup +3 Mogg Fanatic +4 Fireblast +4 Volcanic Hammer +4 Incinerate +8 Snow-Covered Mountain +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2021-02-28_JesseLaidlaw_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2021-02-28_JesseLaidlaw_Burn.txt @@ -0,0 +1,14 @@ +2 Price of Progress +4 Ball Lightning +3 Cursed Scroll +3 Grim Lavamancer +4 Jackal Pup +4 Pyrostatic Pillar +4 Mogg Fanatic +4 Fireblast +1 Volcanic Hammer +1 Hammer of Bogardan +2 Sulfuric Vortex +20 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2021-05-31_ThomasCorradoMetelsky_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2021-05-31_ThomasCorradoMetelsky_Burn.txt @@ -0,0 +1,15 @@ +4 Ball Lightning +2 Flame Rift +4 Bloodstained Mire +4 Wooded Foothills +4 Cursed Scroll +3 Grim Lavamancer +3 Goblin Patrol +4 Barbarian Ring +4 Jackal Pup +4 Fireblast +4 Firebolt +2 Sulfuric Vortex +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2022-07-23_HasegawaYuudai_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2022-07-23_HasegawaYuudai_Burn.txt @@ -0,0 +1,15 @@ +2 Shock +4 Ball Lightning +1 Cursed Scroll +4 Grim Lavamancer +3 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +3 Fireblast +2 Firebolt +3 Seal of Fire +3 Sulfuric Vortex +18 Mountain +2 Browbeat +3 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2023-02-25_watanaberyo_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2023-02-25_watanaberyo_Burn.txt @@ -0,0 +1,16 @@ +4 Wooded Foothills +4 Bloodstained Mire +3 Ball Lightning +4 Flame Rift +3 Cursed Scroll +4 Grim Lavamancer +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +1 Blistering Firecat +4 Seal of Fire +3 Wasteland +2 Sulfuric Vortex +8 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2023-03-25_SetoMasakazu_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2023-03-25_SetoMasakazu_Burn.txt @@ -0,0 +1,12 @@ +4 Sulfuric Vortex +4 Ball Lightning +2 Cursed Scroll +4 Grim Lavamancer +20 Mountain +4 Incinerate +4 Jackal Pup +4 Mogg Fanatic +2 Fireblast +4 Seal of Fire +4 Firebolt +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2023-09-30_MartinBerlin_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2023-09-30_MartinBerlin_Burn.txt @@ -0,0 +1,15 @@ +4 Ball Lightning +4 Bloodstained Mire +4 Wooded Foothills +3 Cursed Scroll +4 Grim Lavamancer +2 Goblin Patrol +3 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +4 Firebolt +1 Lava Dart +11 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-05-04_LukasKovarik_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-05-04_LukasKovarik_Burn.txt @@ -0,0 +1,16 @@ +4 Shock +4 Ball Lightning +2 Price of Progress +2 Flame Rift +4 Bloodstained Mire +4 Wooded Foothills +2 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Fireblast +4 Mogg Fanatic +2 Sulfuric Vortex +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-05-04_MichalCerny_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-05-04_MichalCerny_Burn.txt @@ -0,0 +1,17 @@ +4 Shock +4 Ball Lightning +4 Bloodstained Mire +4 Wooded Foothills +3 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +1 Firebolt +1 Seal of Fire +2 Sulfuric Vortex +1 Lava Dart +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-06-15_JoeGallego_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-06-15_JoeGallego_Burn.txt @@ -0,0 +1,16 @@ +4 Shock +4 Ball Lightning +2 Price of Progress +4 Bloodstained Mire +4 Wooded Foothills +3 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +2 Sulfuric Vortex +1 Lava Dart +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-09-20_ColinSmith_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-09-20_ColinSmith_Burn.txt @@ -0,0 +1,15 @@ +4 Bloodstained Mire +4 Wooded Foothills +4 Ball Lightning +2 Cursed Scroll +4 Grim Lavamancer +4 Barbarian Ring +4 Jackal Pup +4 Fireblast +4 Mogg Fanatic +4 Seal of Fire +2 Sulfuric Vortex +10 Mountain +2 Lava Dart +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-09-20_DanielHall_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-09-20_DanielHall_Burn.txt @@ -0,0 +1,16 @@ +4 Shock +3 Ball Lightning +4 Bloodstained Mire +1 Price of Progress +4 Wooded Foothills +2 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Fireblast +4 Mogg Fanatic +3 Sulfuric Vortex +4 Lava Dart +9 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-09-20_NathanShue_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-09-20_NathanShue_Burn.txt @@ -0,0 +1,14 @@ +4 Shock +4 Ball Lightning +4 Wooded Foothills +4 Bloodstained Mire +2 Cursed Scroll +4 Grim Lavamancer +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +4 Seal of Fire +2 Sulfuric Vortex +12 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-09-21_DanielPalme_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-09-21_DanielPalme_Burn.txt @@ -0,0 +1,16 @@ +4 Shock +4 Ball Lightning +4 Wooded Foothills +4 Bloodstained Mire +2 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +3 Seal of Fire +2 Sulfuric Vortex +1 Lava Dart +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-09-21_GabrielMiklik_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-09-21_GabrielMiklik_Burn.txt @@ -0,0 +1,17 @@ +4 Shock +4 Ball Lightning +1 Price of Progress +4 Bloodstained Mire +4 Wooded Foothills +2 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Fireblast +4 Mogg Fanatic +1 Firebolt +3 Sulfuric Vortex +1 Lava Dart +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-09-21_JiriMoravec_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-09-21_JiriMoravec_Burn.txt @@ -0,0 +1,16 @@ +3 Ball Lightning +2 Price of Progress +4 Wooded Foothills +4 Bloodstained Mire +2 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +4 Seal of Fire +3 Sulfuric Vortex +2 Lava Dart +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/initial-population/2024-09-21_SvenLutz_Burn.txt b/src/main/packaged-resources/cfg/example1/initial-population/2024-09-21_SvenLutz_Burn.txt @@ -0,0 +1,15 @@ +4 Ball Lightning +4 Bloodstained Mire +4 Wooded Foothills +2 Cursed Scroll +4 Grim Lavamancer +3 Barbarian Ring +4 Jackal Pup +4 Fireblast +4 Mogg Fanatic +4 Seal of Fire +3 Sulfuric Vortex +2 Lava Dart +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2021-11-27_OnodaHirhoshi_Stompy.txt b/src/main/packaged-resources/cfg/example1/opponents/2021-11-27_OnodaHirhoshi_Stompy.txt @@ -0,0 +1,14 @@ +4 Treetop Village +4 Wooded Foothills +4 Cursed Scroll +4 Grim Lavamancer +4 Mogg Fanatic +4 Rancor +7 Mountain +4 River Boa +4 Incinerate +4 Skyshroud Elite +4 Wild Mongrel +5 Forest +4 Karplusan Forest +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2021-12-31_AkaiSatoshi_BGAggro.txt b/src/main/packaged-resources/cfg/example1/opponents/2021-12-31_AkaiSatoshi_BGAggro.txt @@ -0,0 +1,16 @@ +2 City of Brass +2 Smother +2 Treetop Village +4 Hypnotic Specter +4 Call of the Herd +4 Tangle Wire +2 Cursed Scroll +4 Llanowar Wastes +7 Swamp +4 Duress +4 Braids, Cabal Minion +2 Diabolic Edict +4 Llanowar Elves +4 Birds of Paradise +4 Wild Mongrel +7 Forest diff --git a/src/main/packaged-resources/cfg/example1/opponents/2022-04-29_AkaiSatoshi_TurboCycling.txt b/src/main/packaged-resources/cfg/example1/opponents/2022-04-29_AkaiSatoshi_TurboCycling.txt @@ -0,0 +1,18 @@ +2 Barren Moor +1 Tendrils of Agony +4 Remote Isle +4 Polluted Mire +2 Unearth +1 Drain Life +4 Cloud of Faeries +4 Cabal Ritual +4 Blasted Landscape +2 Underground River +4 Reaping the Graves +4 Drifting Djinn +4 Songs of the Damned +4 Keeneye Aven +4 Sandbar Merfolk +4 Sandbar Serpent +4 Fluctuator +4 Lotus Petal diff --git a/src/main/packaged-resources/cfg/example1/opponents/2022-12-30_WatanabeDaiki_BlueOrbMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/opponents/2022-12-30_WatanabeDaiki_BlueOrbMiddleSchool.txt @@ -0,0 +1,18 @@ +4 City of Brass +4 Accumulated Knowledge +3 Swords to Plowshares +4 Counterspell +2 Gemstone Mine +4 Nimble Mongoose +4 Daze +3 Careful Study +4 Mental Note +4 Force of Will +4 Island +4 Undiscovered Paradise +2 Winter Orb +4 Werebear +1 Fire +4 Polluted Delta +4 Wild Mongrel +1 Wonder diff --git a/src/main/packaged-resources/cfg/example1/opponents/2023-03-25_SetoMasakazu_Burn.txt b/src/main/packaged-resources/cfg/example1/opponents/2023-03-25_SetoMasakazu_Burn.txt @@ -0,0 +1,12 @@ +4 Sulfuric Vortex +4 Ball Lightning +2 Cursed Scroll +4 Grim Lavamancer +20 Mountain +4 Incinerate +4 Jackal Pup +4 Mogg Fanatic +2 Fireblast +4 Seal of Fire +4 Firebolt +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2023-06-17_OkauchiRyota_Rogue.txt b/src/main/packaged-resources/cfg/example1/opponents/2023-06-17_OkauchiRyota_Rogue.txt @@ -0,0 +1,14 @@ +2 Swords to Plowshares +4 Tainted Field +4 Rotlung Reanimator +4 Hymn to Tourach +4 Sarcomancy +4 Ravenous Rats +12 Swamp +4 Caves of Koilos +4 Duress +4 Braids, Cabal Minion +4 Vindicate +4 Nantuko Shade +2 Wasteland +4 Withered Wretch diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-01-20_OkauchiRyota_SnakeTongueMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/opponents/2024-01-20_OkauchiRyota_SnakeTongueMiddleSchool.txt @@ -0,0 +1,19 @@ +4 Yavimaya Coast +2 Fact or Fiction +4 Wooded Foothills +2 Counterspell +4 Call of the Herd +4 Gaea's Skyfolk +4 Force of Will +4 Mystic Snake +6 Island +4 Portent +2 Mountain +3 Shivan Reef +4 Fire +2 Forest +1 Karplusan Forest +2 Impulse +2 Mana Leak +4 Lightning Bolt +2 Repulse diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-02-25_YaitaDaisuke_URcontrolMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/opponents/2024-02-25_YaitaDaisuke_URcontrolMiddleSchool.txt @@ -0,0 +1,24 @@ +1 Rolling Earthquake +3 Fact or Fiction +4 Accumulated Knowledge +1 Phyrexian Furnace +1 Bloodstained Mire +4 Counterspell +4 Mishra's Factory +1 Cunning Wish +2 Faerie Conclave +1 Rescind +1 Dust Bowl +4 Force of Will +2 Intuition +7 Island +1 Reflecting Pool +4 Mountain +4 Shivan Reef +1 Incinerate +4 Fire +2 Prophetic Bolt +2 Mana Leak +4 Lightning Bolt +1 Grand Coliseum +1 Annul diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-06-15_SugiuraYuki_Survival.txt b/src/main/packaged-resources/cfg/example1/opponents/2024-06-15_SugiuraYuki_Survival.txt @@ -0,0 +1,22 @@ +4 Yavimaya Coast +4 City of Brass +4 Volrath's Shapeshifter +1 Dust Bowl +1 Phantom Warrior +4 Force of Will +4 Survival of the Fittest +3 Island +2 Merfolk Looter +1 Squee, Goblin Nabob +1 Flowstone Hellion +1 Bottle Gnomes +4 Birds of Paradise +4 Wall of Roots +1 Seedborn Muse +1 Phage the Untouchable +1 Morphling +10 Forest +3 Tradewind Rider +1 Gilded Drake +4 Wall of Blossoms +1 Phyrexian Dreadnought diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-08-18_TsujiNaoto_CanadianThresholdMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/opponents/2024-08-18_TsujiNaoto_CanadianThresholdMiddleSchool.txt @@ -0,0 +1,19 @@ +4 City of Brass +2 Gush +4 Swords to Plowshares +3 Counterspell +2 Gemstone Mine +4 Nimble Mongoose +4 Daze +4 Careful Study +1 Deep Analysis +4 Force of Will +2 Flooded Strand +4 Island +4 Undiscovered Paradise +3 Winter Orb +4 Portent +4 Werebear +2 Polluted Delta +4 Wild Mongrel +1 Wonder diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-09-14_SuzukiRyo_GoblinMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/opponents/2024-09-14_SuzukiRyo_GoblinMiddleSchool.txt @@ -0,0 +1,15 @@ +4 Mogg Flunkies +2 Goblin King +4 Bloodstained Mire +3 Siege-Gang Commander +4 Goblin Matron +4 Goblin Piledriver +4 Mogg Fanatic +1 Goblin Sharpshooter +4 Goblin Lackey +1 Hearth Charm +16 Mountain +4 Goblin Ringleader +1 Goblin Tinkerer +4 Goblin Warchief +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-09-14_TsujiNaoto_Steroid.txt b/src/main/packaged-resources/cfg/example1/opponents/2024-09-14_TsujiNaoto_Steroid.txt @@ -0,0 +1,16 @@ +4 Treetop Village +1 Pendelhaven +4 Wooded Foothills +4 Cursed Scroll +4 Mishra's Factory +4 Grim Lavamancer +4 Mogg Fanatic +4 Seal of Fire +4 Rancor +4 Mountain +4 River Boa +4 Skyshroud Elite +4 Wild Mongrel +3 Forest +4 Karplusan Forest +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-09-23_TamaruDaisuke_DeadguyAle.txt b/src/main/packaged-resources/cfg/example1/opponents/2024-09-23_TamaruDaisuke_DeadguyAle.txt @@ -0,0 +1,16 @@ +3 Hypnotic Specter +4 Swords to Plowshares +4 Tainted Field +4 Hymn to Tourach +1 Chainer's Edict +4 Funeral Charm +10 Swamp +4 Gerrard's Verdict +4 Caves of Koilos +3 Graveborn Muse +4 Vindicate +1 Reflecting Pool +4 Nantuko Shade +4 Choking Sands +4 Wasteland +2 Exalted Angel diff --git a/src/main/packaged-resources/cfg/mutation.properties b/src/main/packaged-resources/cfg/mutation.properties @@ -2,4 +2,4 @@ mutation.type=RANDOM # For mutation.type=RANDOM, file containing the card pool to pick from -mutation.random.card-pool=/home/kebi/Documents/mtg/CardsList.txt +mutation.random.card-pool=example1/card-pool.txt diff --git a/src/main/packaged-resources/cfg/population.properties b/src/main/packaged-resources/cfg/population.properties @@ -8,7 +8,7 @@ population.maximum-size=300 population.initialization.type=DISK # For population.initialization.type=DISK, the directory the individuals will be loaded from -population.initialization.disk.directories=/home/kebi/Documents/mtg/middleschool/meta +population.initialization.disk.directories=example1/initial-population # For population.initialization.type=RANDOM, file containing the card pool to pick from -population.initialization.random.card-pool=/home/kebi/Documents/mtg/CardsList.txt +population.initialization.random.card-pool=example1/card-pool.txt