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.Elitism;
13 import net.bmahe.genetics4j.core.spec.replacement.ReplacementStrategy;
14 import net.bmahe.genetics4j.core.spec.selection.SelectionPolicy;
15
16 public class ElitismReplacementStrategyHandler<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 Elitism;
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(Elitism.class, replacementStrategy);
35
36 final Elitism elitism = (Elitism) replacementStrategy;
37
38 final SelectionPolicy offspringSelectionPolicy = elitism.offspringSelectionPolicy();
39 final SelectionPolicyHandler<T> offspringSelectionPolicyHandler = selectionPolicyHandlerResolver
40 .resolve(offspringSelectionPolicy);
41 final Selector<T> offspringSelector = offspringSelectionPolicyHandler
42 .resolve(eaExecutionContext, eaConfiguration, selectionPolicyHandlerResolver, offspringSelectionPolicy);
43
44 final SelectionPolicy survivorSelectionPolicy = elitism.survivorSelectionPolicy();
45 final SelectionPolicyHandler<T> survivorSelectionPolicyHandler = selectionPolicyHandlerResolver
46 .resolve(survivorSelectionPolicy);
47 final Selector<T> survivorSelector = survivorSelectionPolicyHandler
48 .resolve(eaExecutionContext, eaConfiguration, selectionPolicyHandlerResolver, survivorSelectionPolicy);
49
50 return new ElitismImpl<>(elitism, offspringSelector, survivorSelector);
51 }
52 }