1 package net.bmahe.genetics4j.gp.spec;
2
3 import java.util.Objects;
4 import java.util.random.RandomGenerator;
5
6 import net.bmahe.genetics4j.core.chromosomes.factory.ImmutableChromosomeFactoryProvider;
7 import net.bmahe.genetics4j.core.spec.ImmutableEAExecutionContext;
8 import net.bmahe.genetics4j.core.spec.ImmutableEAExecutionContext.Builder;
9 import net.bmahe.genetics4j.gp.chromosomes.factory.ProgramTreeChromosomeFactory;
10 import net.bmahe.genetics4j.gp.combination.ProgramRandomCombineHandler;
11 import net.bmahe.genetics4j.gp.mutation.NodeReplacementPolicyHandler;
12 import net.bmahe.genetics4j.gp.mutation.ProgramRandomMutatePolicyHandler;
13 import net.bmahe.genetics4j.gp.mutation.ProgramRandomPrunePolicyHandler;
14 import net.bmahe.genetics4j.gp.mutation.ProgramRulesApplicatorPolicyHandler;
15 import net.bmahe.genetics4j.gp.mutation.TrimTreePolicyHandler;
16 import net.bmahe.genetics4j.gp.program.ProgramGenerator;
17 import net.bmahe.genetics4j.gp.program.ProgramHelper;
18 import net.bmahe.genetics4j.gp.program.RampedHalfAndHalfProgramGenerator;
19
20
21
22
23
24 public class GPEAExecutionContexts {
25
26 private GPEAExecutionContexts() {
27 }
28
29
30
31
32
33
34
35
36
37
38
39 public static <T extends Comparable<T>> Builder<T> forGP(final RandomGenerator randomGenerator,
40 final ProgramHelper programHelper, final ProgramGenerator programGenerator) {
41 Objects.requireNonNull(randomGenerator);
42 Objects.requireNonNull(programHelper);
43 Objects.requireNonNull(programGenerator);
44
45 final var builder = ImmutableEAExecutionContext.<T>builder();
46 builder.randomGenerator(randomGenerator);
47
48 builder.addMutationPolicyHandlerFactories(
49 gsd -> new ProgramRandomPrunePolicyHandler<>(gsd.randomGenerator(), programHelper),
50 gsd -> new ProgramRandomMutatePolicyHandler<>(gsd.randomGenerator(), programGenerator),
51 gsd -> new NodeReplacementPolicyHandler<>(randomGenerator, programHelper),
52 gsd -> new ProgramRulesApplicatorPolicyHandler<>(),
53 gsd -> new TrimTreePolicyHandler<>(randomGenerator, programGenerator));
54
55 builder.addChromosomeCombinatorHandlerFactories(gsd -> new ProgramRandomCombineHandler<T>(gsd.randomGenerator()));
56
57 final var chromosomeFactoryProviderBuilder = ImmutableChromosomeFactoryProvider.builder();
58 chromosomeFactoryProviderBuilder.randomGenerator(randomGenerator);
59 chromosomeFactoryProviderBuilder
60 .addChromosomeFactoriesGenerator(cdp -> new ProgramTreeChromosomeFactory(programGenerator));
61 builder.chromosomeFactoryProvider(chromosomeFactoryProviderBuilder.build());
62
63 return builder;
64 }
65
66
67
68
69
70
71
72
73
74
75 public static <T extends Comparable<T>> Builder<T> forGP(final RandomGenerator randomGenerator) {
76 Objects.requireNonNull(randomGenerator);
77
78 final var programHelper = new ProgramHelper(randomGenerator);
79 final var programGenerator = new RampedHalfAndHalfProgramGenerator(randomGenerator, programHelper);
80
81 return forGP(randomGenerator, programHelper, programGenerator);
82 }
83 }