1 package net.bmahe.genetics4j.samples;
2
3 import java.util.Comparator;
4 import java.util.random.RandomGenerator;
5
6 import org.apache.logging.log4j.LogManager;
7 import org.apache.logging.log4j.Logger;
8
9 import net.bmahe.genetics4j.core.EASystem;
10 import net.bmahe.genetics4j.core.EASystemFactory;
11 import net.bmahe.genetics4j.core.chromosomes.IntChromosome;
12 import net.bmahe.genetics4j.core.evolutionlisteners.EvolutionListeners;
13 import net.bmahe.genetics4j.core.spec.EAConfiguration;
14 import net.bmahe.genetics4j.core.spec.EAConfiguration.Builder;
15 import net.bmahe.genetics4j.core.spec.EAExecutionContext;
16 import net.bmahe.genetics4j.core.spec.EAExecutionContexts;
17 import net.bmahe.genetics4j.core.spec.EvolutionResult;
18 import net.bmahe.genetics4j.core.spec.Optimization;
19 import net.bmahe.genetics4j.core.spec.chromosome.IntChromosomeSpec;
20 import net.bmahe.genetics4j.core.spec.combination.MultiPointCrossover;
21 import net.bmahe.genetics4j.core.spec.mutation.PartialMutation;
22 import net.bmahe.genetics4j.core.spec.mutation.RandomMutation;
23 import net.bmahe.genetics4j.core.spec.selection.RouletteWheel;
24
25 public class SimpleTest {
26 public static final Logger logger = LogManager.getLogger(SimpleTest.class);
27
28 public static void main(String[] args) {
29
30 final RandomGenerator randomGenerator = RandomGenerator.getDefault();
31
32 final Builder<Double> eaConfigurationBuilder = new EAConfiguration.Builder<>();
33 eaConfigurationBuilder.chromosomeSpecs(IntChromosomeSpec.of(10, 0, 10))
34 .parentSelectionPolicy(RouletteWheel.build())
35 .combinationPolicy(MultiPointCrossover.of(2))
36 .mutationPolicies(RandomMutation.of(0.15), PartialMutation.of(0, RandomMutation.of(0.05)))
37 .optimization(Optimization.MINIMIZE)
38 .fitness(genoType -> {
39 final IntChromosome intChromosome = genoType.getChromosome(0, IntChromosome.class);
40 double denominator = 0.0;
41 for (int i = 0; i < intChromosome.getNumAlleles(); i++) {
42 denominator += Math.abs(i - intChromosome.getAllele(i));
43 }
44
45 return denominator;
46 })
47 .termination(
48 (eaConfiguration, generation, population,
49 fitness) -> fitness.stream().min(Comparator.naturalOrder()).orElseThrow() < 0.0001);
50 final EAConfiguration<Double> eaConfiguration = eaConfigurationBuilder.build();
51
52 final EAExecutionContext<Double> eaExecutionContext = EAExecutionContexts.<Double>forScalarFitness()
53 .populationSize(100)
54 .randomGenerator(randomGenerator)
55 .addEvolutionListeners(EvolutionListeners.ofLogTopN(logger, 3, Comparator.<Double>reverseOrder()))
56 .build();
57
58 final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);
59
60 final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
61 logger.info("Best genotype: {}", evolutionResult.bestGenotype());
62
63 System.exit(0);
64 }
65 }