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