1 package net.bmahe.genetics4j.core.replacement;
2
3 import java.util.Objects;
4
5 import org.apache.commons.lang3.Validate;
6
7 import net.bmahe.genetics4j.core.selection.SelectionPolicyHandler;
8 import net.bmahe.genetics4j.core.selection.SelectionPolicyHandlerResolver;
9 import net.bmahe.genetics4j.core.selection.Selector;
10 import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
11 import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
12 import net.bmahe.genetics4j.core.spec.replacement.DeleteNLast;
13 import net.bmahe.genetics4j.core.spec.replacement.ReplacementStrategy;
14 import net.bmahe.genetics4j.core.spec.selection.SelectionPolicy;
15
16 public class DeleteNLastReplacementStrategyHandler<T extends Comparable<T>> implements ReplacementStrategyHandler<T> {
17
18 @Override
19 public boolean canHandle(final ReplacementStrategy replacementStrategy) {
20 Objects.requireNonNull(replacementStrategy);
21
22 return replacementStrategy instanceof DeleteNLast;
23 }
24
25 @Override
26 public ReplacementStrategyImplementor<T> resolve(final AbstractEAExecutionContext<T> eaExecutionContext,
27 final AbstractEAConfiguration<T> eaConfiguration,
28 final SelectionPolicyHandlerResolver<T> selectionPolicyHandlerResolver,
29 final ReplacementStrategy replacementStrategy) {
30 Objects.requireNonNull(eaExecutionContext);
31 Objects.requireNonNull(eaConfiguration);
32 Objects.requireNonNull(selectionPolicyHandlerResolver);
33 Objects.requireNonNull(replacementStrategy);
34 Validate.isInstanceOf(DeleteNLast.class, replacementStrategy);
35
36 final DeleteNLast deleteNLast = (DeleteNLast) replacementStrategy;
37
38 final SelectionPolicy offspringSelectionPolicy = deleteNLast.offspringSelectionPolicy();
39 final SelectionPolicyHandler<T> offspringSelectionPolicyHandler = selectionPolicyHandlerResolver
40 .resolve(offspringSelectionPolicy);
41 final Selector<T> offspringSelector = offspringSelectionPolicyHandler
42 .resolve(eaExecutionContext, eaConfiguration, selectionPolicyHandlerResolver, offspringSelectionPolicy);
43
44 return new DeleteNLastImpl<>(deleteNLast, offspringSelector);
45 }
46 }