1 package net.bmahe.genetics4j.core.selection;
2
3 import java.util.Objects;
4 import java.util.random.RandomGenerator;
5
6 import org.apache.commons.lang3.Validate;
7
8 import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
9 import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
10 import net.bmahe.genetics4j.core.spec.selection.ProportionalTournament;
11 import net.bmahe.genetics4j.core.spec.selection.SelectionPolicy;
12
13 public class ProportionalTournamentSelectionPolicyHandler<T extends Comparable<T>>
14 implements SelectionPolicyHandler<T>
15 {
16 private final RandomGenerator randomGenerator;
17
18 public ProportionalTournamentSelectionPolicyHandler(final RandomGenerator _randomGenerator) {
19 Objects.requireNonNull(_randomGenerator);
20
21 this.randomGenerator = _randomGenerator;
22 }
23
24 @Override
25 public boolean canHandle(final SelectionPolicy selectionPolicy) {
26 Objects.requireNonNull(selectionPolicy);
27
28 return selectionPolicy instanceof ProportionalTournament;
29 }
30
31 @Override
32 public Selector<T> resolve(final AbstractEAExecutionContext<T> eaExecutionContext,
33 final AbstractEAConfiguration<T> eaConfiguration,
34 final SelectionPolicyHandlerResolver<T> selectionPolicyHandlerResolver,
35 final SelectionPolicy selectionPolicy) {
36
37 Objects.requireNonNull(selectionPolicy);
38 Validate.isInstanceOf(ProportionalTournament.class, selectionPolicy);
39
40 return new ProportionalTournamentSelector<>(selectionPolicy, randomGenerator);
41 }
42 }