View Javadoc
1   package net.bmahe.genetics4j.core.spec.selection;
2   
3   import java.util.Comparator;
4   
5   import org.immutables.value.Value;
6   
7   import net.bmahe.genetics4j.core.Individual;
8   
9   @Value.Immutable
10  public abstract class Tournament<T extends Comparable<T>> implements SelectionPolicy {
11  
12  	@Value.Parameter
13  	public abstract int numCandidates();
14  
15  	@Value.Default
16  	public Comparator<Individual<T>> comparator() {
17  		return Comparator.comparing(Individual::fitness);
18  	}
19  
20  	/*
21  	 * TODO: Enabling this makes immutables create non-compilable code
22  	 * 
23  	 * @Value.Check protected void check() { Validate.isTrue(numCandidates() > 0); }
24  	 */
25  
26  	public static class Builder<T extends Comparable<T>> extends ImmutableTournament.Builder<T> {
27  	}
28  
29  	public static <U extends Comparable<U>> Tournament<U> of(final int numCandidates) {
30  		return ImmutableTournament.of(numCandidates);
31  	}
32  
33  	public static <U extends Comparable<U>> Tournament<U> of(final int numCandidates,
34  			final Comparator<Individual<U>> comparator) {
35  		return new Builder<U>().numCandidates(numCandidates)
36  				.comparator(comparator)
37  				.build();
38  	}
39  
40  }