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
8 import net.bmahe.genetics4j.core.mutation.MutationPolicyHandler;
9 import net.bmahe.genetics4j.core.mutation.MutationPolicyHandlerResolver;
10 import net.bmahe.genetics4j.core.mutation.Mutator;
11 import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
12 import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
13 import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
14 import net.bmahe.genetics4j.gp.program.ProgramHelper;
15 import net.bmahe.genetics4j.gp.spec.mutation.NodeReplacement;
16
17 public class NodeReplacementPolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
18
19 final RandomGenerator randomGenerator;
20 final ProgramHelper programHelper;
21
22 public NodeReplacementPolicyHandler(final RandomGenerator _randomGenerator, final ProgramHelper _programHelper) {
23 Objects.requireNonNull(_randomGenerator);
24 Objects.requireNonNull(_programHelper);
25
26 this.randomGenerator = _randomGenerator;
27 this.programHelper = _programHelper;
28 }
29
30 @Override
31 public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
32 final MutationPolicy mutationPolicy) {
33 Objects.requireNonNull(mutationPolicyHandlerResolver);
34 Objects.requireNonNull(mutationPolicy);
35
36 return mutationPolicy instanceof NodeReplacement;
37 }
38
39 @Override
40 public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
41 final AbstractEAConfiguration<T> eaConfiguration,
42 final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, final MutationPolicy mutationPolicy) {
43 Objects.requireNonNull(eaExecutionContext);
44 Objects.requireNonNull(eaConfiguration);
45 Objects.requireNonNull(mutationPolicyHandlerResolver);
46 Objects.requireNonNull(mutationPolicy);
47 Validate.isInstanceOf(NodeReplacement.class, mutationPolicy);
48
49 final NodeReplacement nodeReplacementMutate = (NodeReplacement) mutationPolicy;
50 final double populationMutationProbability = nodeReplacementMutate.populationMutationProbability();
51
52 return new NodeReplacementMutator(programHelper, randomGenerator, eaConfiguration, populationMutationProbability);
53 }
54 }