@Override
	public ISeq<Phenotype<G, C>> select(
		final Seq<Phenotype<G, C>> population,
		final int count,
		final Optimize opt
	) {
		final CrowdedComparator<Phenotype<G, C>> cc = new CrowdedComparator<>(
			population,
			opt,
			_dominance,
			_comparator,
			_distance,
			_dimension
		);

		final int[] idx = ProxySorter.sort(
			init(new int[population.size()]),
			population.size(),
			(a, i, j) -> cc.compare(a[j], a[i])
		);

		final List<Phenotype<G, C>> result = new ArrayList<>();
		while (result.size() < count) {
			IntStream.of(idx)
				.limit(count - result.size())
				.mapToObj(population)
				.forEach(result::add);
		}

		return ISeq.of(result);
	}
Creates a new {@code NSGA2Selector} with the functions needed for
handling the multi-objective result type {@code C}. For the {@link Vec}
classes, a selector is created like in the following example:
{@snippet lang="java":
new NSGA2Selector<>(
    Vec<T>::dominance,
    Vec<T>::compare,
    Vec<T>::distance,
    Vec<T>::length
);
}

@see #ofVec()

@param dominance the pareto dominance comparator
@param comparator the vector element comparator
@param distance the vector element distance
@param dimension the dimensionality of vector type {@code C}
jenetics.ext/src/main/java/io/jenetics/ext/moea/NSGA2Selector.java