1 package net.bmahe.genetics4j.samples;
2
3 import static net.bmahe.genetics4j.core.termination.Terminations.or;
4
5 import org.apache.logging.log4j.LogManager;
6 import org.apache.logging.log4j.Logger;
7
8 import net.bmahe.genetics4j.core.EASystem;
9 import net.bmahe.genetics4j.core.EASystemFactory;
10 import net.bmahe.genetics4j.core.chromosomes.IntChromosome;
11 import net.bmahe.genetics4j.core.evolutionlisteners.EvolutionListeners;
12 import net.bmahe.genetics4j.core.spec.EAConfiguration;
13 import net.bmahe.genetics4j.core.spec.EAConfiguration.Builder;
14 import net.bmahe.genetics4j.core.spec.EAExecutionContext;
15 import net.bmahe.genetics4j.core.spec.EAExecutionContexts;
16 import net.bmahe.genetics4j.core.spec.EvolutionResult;
17 import net.bmahe.genetics4j.core.spec.chromosome.IntChromosomeSpec;
18 import net.bmahe.genetics4j.core.spec.combination.MultiPointCrossover;
19 import net.bmahe.genetics4j.core.spec.mutation.RandomMutation;
20 import net.bmahe.genetics4j.core.spec.selection.Tournament;
21 import net.bmahe.genetics4j.core.termination.Terminations;
22
23 public class QuickStart {
24
25 public static final Logger logger = LogManager.getLogger(QuickStart.class);
26
27 public static void main(String[] args) {
28
29
30 final int numEntries = 10;
31 final int minValue = 0;
32 final int maxValue = 20;
33
34
35
36 final Builder<Integer> eaConfigurationBuilder = new EAConfiguration.Builder<>();
37 eaConfigurationBuilder.chromosomeSpecs(IntChromosomeSpec.of(numEntries, minValue, maxValue))
38 .parentSelectionPolicy(Tournament.of(5))
39 .combinationPolicy(MultiPointCrossover.of(2))
40 .mutationPolicies(RandomMutation.of(0.15))
41 .fitness(genoType -> {
42 final IntChromosome intChromosome = genoType.getChromosome(0, IntChromosome.class);
43 int correctCount = 0;
44 for (int i = 0; i < intChromosome.getNumAlleles(); i++) {
45 if (i == intChromosome.getAllele(i)) {
46 correctCount++;
47 }
48 }
49
50 return correctCount;
51 })
52 .termination(or(Terminations.ofFitnessAtLeast(numEntries), Terminations.ofMaxGeneration(50)));
53 final EAConfiguration<Integer> eaConfiguration = eaConfigurationBuilder.build();
54
55
56
57 final EAExecutionContext<Integer> eaExecutionContext = EAExecutionContexts.<Integer>forScalarFitness()
58 .populationSize(100)
59 .addEvolutionListeners(EvolutionListeners.ofLogTopN(logger, 3))
60 .build();
61
62
63
64 final EASystem<Integer> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);
65
66
67
68 final EvolutionResult<Integer> evolutionResult = eaSystem.evolve();
69 logger.info("Best genotype: {}", evolutionResult.bestGenotype());
70 logger.info(" with fitness: {}", evolutionResult.bestFitness());
71 logger.info(" at generation: {}", evolutionResult.generation());
72
73
74 System.exit(0);
75 }
76 }