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
22
23
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 }