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.TrimTree;
18  
19  public class TrimTreePolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
20  	public static final Logger logger = LogManager.getLogger(TrimTreePolicyHandler.class);
21  
22  	final RandomGenerator randomGenerator;
23  	final ProgramGenerator programGenerator;
24  
25  	public TrimTreePolicyHandler(final RandomGenerator _randomGenerator, final ProgramGenerator _programGenerator) {
26  		Objects.requireNonNull(_randomGenerator);
27  		Objects.requireNonNull(_programGenerator);
28  
29  		this.randomGenerator = _randomGenerator;
30  		this.programGenerator = _programGenerator;
31  	}
32  
33  	@Override
34  	public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
35  			final MutationPolicy mutationPolicy) {
36  		Objects.requireNonNull(mutationPolicyHandlerResolver);
37  		Objects.requireNonNull(mutationPolicy);
38  
39  		return mutationPolicy instanceof TrimTree;
40  	}
41  
42  	@Override
43  	public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
44  			final AbstractEAConfiguration<T> eaConfiguration,
45  			final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, final MutationPolicy mutationPolicy) {
46  		Objects.requireNonNull(eaExecutionContext);
47  		Objects.requireNonNull(eaConfiguration);
48  		Objects.requireNonNull(mutationPolicyHandlerResolver);
49  		Objects.requireNonNull(mutationPolicy);
50  		Validate.isInstanceOf(TrimTree.class, mutationPolicy);
51  
52  		final TrimTree trimTree = (TrimTree) mutationPolicy;
53  
54  		return new TrimTreeMutator(programGenerator, randomGenerator, eaConfiguration, trimTree);
55  	}
56  }