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.ProgramRandomMutate;
18
19 public class ProgramRandomMutatePolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
20 public static final Logger logger = LogManager.getLogger(ProgramRandomMutatePolicyHandler.class);
21
22 final RandomGenerator randomGenerator;
23 final ProgramGenerator programGenerator;
24
25 public ProgramRandomMutatePolicyHandler(final RandomGenerator _randomGenerator,
26 final ProgramGenerator _programGenerator) {
27 Objects.requireNonNull(_randomGenerator);
28 Objects.requireNonNull(_programGenerator);
29
30 this.randomGenerator = _randomGenerator;
31 this.programGenerator = _programGenerator;
32 }
33
34 @Override
35 public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
36 final MutationPolicy mutationPolicy) {
37 Objects.requireNonNull(mutationPolicyHandlerResolver);
38 Objects.requireNonNull(mutationPolicy);
39
40 return mutationPolicy instanceof ProgramRandomMutate;
41 }
42
43 @Override
44 public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
45 final AbstractEAConfiguration<T> eaConfiguration,
46 final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, final MutationPolicy mutationPolicy) {
47 Objects.requireNonNull(eaExecutionContext);
48 Objects.requireNonNull(eaConfiguration);
49 Objects.requireNonNull(mutationPolicyHandlerResolver);
50 Objects.requireNonNull(mutationPolicy);
51 Validate.isInstanceOf(ProgramRandomMutate.class, mutationPolicy);
52
53 final ProgramRandomMutate programRandomMutate = (ProgramRandomMutate) mutationPolicy;
54 final double populationMutationProbability = programRandomMutate.populationMutationProbability();
55
56 return new ProgramRandomMutateMutator(programGenerator,
57 randomGenerator,
58 eaConfiguration,
59 populationMutationProbability);
60 }
61 }