View Javadoc
1   package net.bmahe.genetics4j.gp.mutation;
2   
3   import java.util.Objects;
4   import java.util.random.RandomGenerator;
5   
6   import org.apache.commons.lang3.Validate;
7   import org.apache.logging.log4j.LogManager;
8   import org.apache.logging.log4j.Logger;
9   
10  import net.bmahe.genetics4j.core.mutation.MutationPolicyHandler;
11  import net.bmahe.genetics4j.core.mutation.MutationPolicyHandlerResolver;
12  import net.bmahe.genetics4j.core.mutation.Mutator;
13  import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
14  import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
15  import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
16  import net.bmahe.genetics4j.gp.program.ProgramGenerator;
17  import net.bmahe.genetics4j.gp.spec.mutation.ProgramRandomMutate;
18  
19  public class ProgramRandomMutatePolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
20  	public static final Logger logger = LogManager.getLogger(ProgramRandomMutatePolicyHandler.class);
21  
22  	final RandomGenerator randomGenerator;
23  	final ProgramGenerator programGenerator;
24  
25  	public ProgramRandomMutatePolicyHandler(final RandomGenerator _randomGenerator,
26  			final ProgramGenerator _programGenerator) {
27  		Objects.requireNonNull(_randomGenerator);
28  		Objects.requireNonNull(_programGenerator);
29  
30  		this.randomGenerator = _randomGenerator;
31  		this.programGenerator = _programGenerator;
32  	}
33  
34  	@Override
35  	public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
36  			final MutationPolicy mutationPolicy) {
37  		Objects.requireNonNull(mutationPolicyHandlerResolver);
38  		Objects.requireNonNull(mutationPolicy);
39  
40  		return mutationPolicy instanceof ProgramRandomMutate;
41  	}
42  
43  	@Override
44  	public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
45  			final AbstractEAConfiguration<T> eaConfiguration,
46  			final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, final MutationPolicy mutationPolicy) {
47  		Objects.requireNonNull(eaExecutionContext);
48  		Objects.requireNonNull(eaConfiguration);
49  		Objects.requireNonNull(mutationPolicyHandlerResolver);
50  		Objects.requireNonNull(mutationPolicy);
51  		Validate.isInstanceOf(ProgramRandomMutate.class, mutationPolicy);
52  
53  		final ProgramRandomMutate programRandomMutate = (ProgramRandomMutate) mutationPolicy;
54  		final double populationMutationProbability = programRandomMutate.populationMutationProbability();
55  
56  		return new ProgramRandomMutateMutator(programGenerator,
57  				randomGenerator,
58  				eaConfiguration,
59  				populationMutationProbability);
60  	}
61  }