1 package net.bmahe.genetics4j.gp.mutation;
2
3 import java.util.Objects;
4 import java.util.random.RandomGenerator;
5
6 import org.apache.commons.lang3.Validate;
7 import org.apache.logging.log4j.LogManager;
8 import org.apache.logging.log4j.Logger;
9
10 import net.bmahe.genetics4j.core.mutation.MutationPolicyHandler;
11 import net.bmahe.genetics4j.core.mutation.MutationPolicyHandlerResolver;
12 import net.bmahe.genetics4j.core.mutation.Mutator;
13 import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
14 import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
15 import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
16 import net.bmahe.genetics4j.gp.program.ProgramGenerator;
17 import net.bmahe.genetics4j.gp.spec.mutation.TrimTree;
18
19 public class TrimTreePolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
20 public static final Logger logger = LogManager.getLogger(TrimTreePolicyHandler.class);
21
22 final RandomGenerator randomGenerator;
23 final ProgramGenerator programGenerator;
24
25 public TrimTreePolicyHandler(final RandomGenerator _randomGenerator, final ProgramGenerator _programGenerator) {
26 Objects.requireNonNull(_randomGenerator);
27 Objects.requireNonNull(_programGenerator);
28
29 this.randomGenerator = _randomGenerator;
30 this.programGenerator = _programGenerator;
31 }
32
33 @Override
34 public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
35 final MutationPolicy mutationPolicy) {
36 Objects.requireNonNull(mutationPolicyHandlerResolver);
37 Objects.requireNonNull(mutationPolicy);
38
39 return mutationPolicy instanceof TrimTree;
40 }
41
42 @Override
43 public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
44 final AbstractEAConfiguration<T> eaConfiguration,
45 final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, final MutationPolicy mutationPolicy) {
46 Objects.requireNonNull(eaExecutionContext);
47 Objects.requireNonNull(eaConfiguration);
48 Objects.requireNonNull(mutationPolicyHandlerResolver);
49 Objects.requireNonNull(mutationPolicy);
50 Validate.isInstanceOf(TrimTree.class, mutationPolicy);
51
52 final TrimTree trimTree = (TrimTree) mutationPolicy;
53
54 return new TrimTreeMutator(programGenerator, randomGenerator, eaConfiguration, trimTree);
55 }
56 }