View Javadoc
1   package net.bmahe.genetics4j.gp.mutation;
2   
3   import java.util.List;
4   import java.util.Objects;
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.spec.mutation.ProgramApplyRules;
17  import net.bmahe.genetics4j.gp.spec.mutation.Rule;
18  
19  public class ProgramRulesApplicatorPolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
20  	public static final Logger logger = LogManager.getLogger(ProgramRulesApplicatorPolicyHandler.class);
21  
22  	@Override
23  	public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
24  			final MutationPolicy mutationPolicy) {
25  		Objects.requireNonNull(mutationPolicyHandlerResolver);
26  		Objects.requireNonNull(mutationPolicy);
27  
28  		return mutationPolicy instanceof ProgramApplyRules;
29  	}
30  
31  	@Override
32  	public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
33  			final AbstractEAConfiguration<T> eaConfiguration,
34  			final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, final MutationPolicy mutationPolicy) {
35  		Objects.requireNonNull(eaExecutionContext);
36  		Objects.requireNonNull(eaConfiguration);
37  		Objects.requireNonNull(mutationPolicyHandlerResolver);
38  		Objects.requireNonNull(mutationPolicy);
39  		Validate.isInstanceOf(ProgramApplyRules.class, mutationPolicy);
40  
41  		final ProgramApplyRules programApplyRules = (ProgramApplyRules) mutationPolicy;
42  		final List<Rule> rules = programApplyRules.rules();
43  
44  		return new ProgramRulesApplicatorMutator(rules, eaConfiguration);
45  	}
46  }