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 }