RepeatedMutationPolicyHandler.java
package net.bmahe.genetics4j.core.mutation;
import java.util.Objects;
import java.util.random.RandomGenerator;
import org.apache.commons.lang3.Validate;
import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
import net.bmahe.genetics4j.core.spec.mutation.RepeatedMutation;
public class RepeatedMutationPolicyHandler<T extends Comparable<T>> implements MutationPolicyHandler<T> {
private final RandomGenerator randomGenerator;
public RepeatedMutationPolicyHandler(final RandomGenerator _randomGenerator) {
this.randomGenerator = Objects.requireNonNull(_randomGenerator);
}
@Override
public boolean canHandle(final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver,
final MutationPolicy mutationPolicy) {
Objects.requireNonNull(mutationPolicyHandlerResolver);
Objects.requireNonNull(mutationPolicy);
if ((mutationPolicy instanceof RepeatedMutation) == false) {
return false;
}
final RepeatedMutation repeatedMutation = (RepeatedMutation) mutationPolicy;
return mutationPolicyHandlerResolver.canHandle(repeatedMutation.mutationPolicy());
}
@Override
public Mutator createMutator(final AbstractEAExecutionContext<T> eaExecutionContext,
final AbstractEAConfiguration<T> eaConfiguration,
final MutationPolicyHandlerResolver<T> mutationPolicyHandlerResolver, final MutationPolicy mutationPolicy) {
Objects.requireNonNull(eaExecutionContext);
Objects.requireNonNull(eaConfiguration);
Objects.requireNonNull(mutationPolicyHandlerResolver);
Objects.requireNonNull(mutationPolicy);
Validate.isInstanceOf(RepeatedMutation.class, mutationPolicy);
final RepeatedMutation repeatedMutation = (RepeatedMutation) mutationPolicy;
final MutationPolicy childMutationPolicy = repeatedMutation.mutationPolicy();
final MutationPolicyHandler<T> childMutationPolicyHandler = mutationPolicyHandlerResolver
.resolve(childMutationPolicy);
final Mutator childMutator = childMutationPolicyHandler
.createMutator(eaExecutionContext, eaConfiguration, mutationPolicyHandlerResolver, childMutationPolicy);
return new RepeatedMutator(randomGenerator, repeatedMutation, childMutator);
}
}