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 }