1 package net.bmahe.genetics4j.neat.mutation;
2
3 import java.util.Objects;
4 import java.util.random.RandomGenerator;
5
6 import net.bmahe.genetics4j.core.chromosomes.Chromosome;
7 import net.bmahe.genetics4j.core.mutation.GenericMutatorImpl;
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.mutation.chromosome.ChromosomeMutationHandler;
12 import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
13 import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
14 import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
15 import net.bmahe.genetics4j.core.util.ChromosomeResolverUtils;
16 import net.bmahe.genetics4j.neat.spec.mutation.DeleteNode;
17
18 public class DeleteNodePolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
19
20 private final RandomGenerator randomGenerator;
21
22 public DeleteNodePolicyHandler(final RandomGenerator _randomGenerator) {
23 Objects.requireNonNull(_randomGenerator);
24
25 this.randomGenerator = _randomGenerator;
26 }
27
28 @Override
29 public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
30 final MutationPolicy mutationPolicy) {
31 Objects.requireNonNull(mutationPolicyHandlerResolver);
32 Objects.requireNonNull(mutationPolicy);
33
34 return mutationPolicy instanceof DeleteNode;
35 }
36
37 @Override
38 public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
39 final AbstractEAConfiguration<T> eaConfiguration,
40 final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, MutationPolicy mutationPolicy) {
41 Objects.requireNonNull(eaExecutionContext);
42 Objects.requireNonNull(eaConfiguration);
43 Objects.requireNonNull(mutationPolicy);
44 Objects.requireNonNull(mutationPolicyHandlerResolver);
45
46 final DeleteNode deleteNodeMutationPolicy = (DeleteNode) mutationPolicy;
47 final double populationMutationProbability = deleteNodeMutationPolicy.populationMutationProbability();
48
49 final ChromosomeMutationHandler<? extends Chromosome>[] chromosomeMutationHandlers = ChromosomeResolverUtils
50 .resolveChromosomeMutationHandlers(eaExecutionContext, eaConfiguration, mutationPolicy);
51
52 return new GenericMutatorImpl(randomGenerator,
53 chromosomeMutationHandlers,
54 mutationPolicy,
55 populationMutationProbability);
56 }
57 }