1 package net.bmahe.genetics4j.core.spec.selection; 2 3 import java.util.Comparator; 4 5 import org.apache.commons.lang3.Validate; 6 import org.immutables.value.Value; 7 8 import net.bmahe.genetics4j.core.Individual; 9 10 @Value.Style(overshadowImplementation = true) 11 @Value.Immutable 12 public interface ProportionalTournament<T extends Comparable<T>> extends SelectionPolicy { 13 14 @Value.Parameter 15 int numCandidates(); 16 17 @Value.Parameter 18 double proportionFirst(); 19 20 @Value.Parameter 21 Comparator<Individual<T>> firstComparator(); 22 23 @Value.Parameter 24 Comparator<Individual<T>> secondComparator(); 25 26 @Value.Check 27 default void check() { 28 Validate.inclusiveBetween(0.0, 1.0, proportionFirst()); 29 } 30 31 public static <T extends Comparable<T>> ProportionalTournament<T> of(int numCandidates, double proportionFirst, 32 Comparator<Individual<T>> firstComparator, Comparator<Individual<T>> secondComparator) { 33 return ImmutableProportionalTournament.of(numCandidates, proportionFirst, firstComparator, secondComparator); 34 } 35 36 }