View Javadoc
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.Immutable
11  public abstract class Tournament<T extends Comparable<T>> implements SelectionPolicy {
12  
13  	@Value.Parameter
14  	public abstract int numCandidates();
15  
16  	@Value.Default
17  	public Comparator<Individual<T>> comparator() {
18  		return Comparator.comparing(Individual::fitness);
19  	}
20  
21  	public static class Builder<T extends Comparable<T>> extends ImmutableTournament.Builder<T> {
22  		@Override
23  		public Tournament<T> build() {
24  			final Tournament<T> instance = super.build();
25  			Validate.isTrue(instance.numCandidates() > 0, "Number of candidates must be positive");
26  			return instance;
27  		}
28  	}
29  
30  	public static <U extends Comparable<U>> Tournament<U> of(final int numCandidates) {
31  		Validate.isTrue(numCandidates > 0, "Number of candidates must be positive");
32  		return ImmutableTournament.of(numCandidates);
33  	}
34  
35  	public static <U extends Comparable<U>> Tournament<U> of(final int numCandidates,
36  			final Comparator<Individual<U>> comparator) {
37  		Validate.isTrue(numCandidates > 0, "Number of candidates must be positive");
38  		return new Builder<U>().numCandidates(numCandidates).comparator(comparator).build();
39  	}
40  
41  }