View Javadoc
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.GenerationalReplacement;
13  import net.bmahe.genetics4j.core.spec.replacement.ReplacementStrategy;
14  import net.bmahe.genetics4j.core.spec.selection.SelectionPolicy;
15  
16  public class GenerationalReplacementStrategyHandler<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 GenerationalReplacement;
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(GenerationalReplacement.class, replacementStrategy);
35  
36  		final GenerationalReplacement generationalReplacement = (GenerationalReplacement) replacementStrategy;
37  
38  		final SelectionPolicy offspringSelectionPolicy = generationalReplacement.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 GenerationalReplacementImpl<>(generationalReplacement, offspringSelector);
45  	}
46  }