View Javadoc
1   package net.bmahe.genetics4j.core.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.spec.AbstractEAConfiguration;
9   import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
10  import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
11  import net.bmahe.genetics4j.core.spec.mutation.RepeatedMutation;
12  
13  public class RepeatedMutationPolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
14  
15  	private final RandomGenerator randomGenerator;
16  
17  	public RepeatedMutationPolicyHandler(final RandomGenerator _randomGenerator) {
18  		this.randomGenerator = Objects.requireNonNull(_randomGenerator);
19  	}
20  
21  	@Override
22  	public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
23  			final MutationPolicy mutationPolicy) {
24  		Objects.requireNonNull(mutationPolicyHandlerResolver);
25  		Objects.requireNonNull(mutationPolicy);
26  
27  		if ((mutationPolicy instanceof RepeatedMutation) == false) {
28  			return false;
29  		}
30  
31  		final RepeatedMutation repeatedMutation = (RepeatedMutation) mutationPolicy;
32  		return mutationPolicyHandlerResolver.canHandle(repeatedMutation.mutationPolicy());
33  	}
34  
35  	@Override
36  	public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
37  			final AbstractEAConfiguration<T> eaConfiguration,
38  			final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, final MutationPolicy mutationPolicy) {
39  		Objects.requireNonNull(eaExecutionContext);
40  		Objects.requireNonNull(eaConfiguration);
41  		Objects.requireNonNull(mutationPolicyHandlerResolver);
42  		Objects.requireNonNull(mutationPolicy);
43  		Validate.isInstanceOf(RepeatedMutation.class, mutationPolicy);
44  
45  		final RepeatedMutation repeatedMutation = (RepeatedMutation) mutationPolicy;
46  		final MutationPolicy childMutationPolicy = repeatedMutation.mutationPolicy();
47  		final MutationPolicyHandler<T> childMutationPolicyHandler = mutationPolicyHandlerResolver
48  				.resolve(childMutationPolicy);
49  		final Mutator childMutator = childMutationPolicyHandler
50  				.createMutator(eaExecutionContext, eaConfiguration, mutationPolicyHandlerResolver, childMutationPolicy);
51  
52  		return new RepeatedMutator(randomGenerator, repeatedMutation, childMutator);
53  	}
54  }