View Javadoc
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  }