code: public static <G extends Gene<?, G>, C extends Comparable<? super C>>
  	Collector<EvolutionResult<G, C>, ?, Phenotype<G, C>>
  	toBestPhenotype() {
  		return Collector.of(
  			MinMax::<EvolutionResult<G, C>>of,
  			MinMax::accept,
  			MinMax::combine,
  			mm -> mm.getMax() != null
  				? mm.getMax().getBestPhenotype()
  				: null
  		);
  	}
docs: Return a collector which collects the best phenotype of an evolution
  stream.
  
  <pre>{@code
  final Problem<ISeq<Point>, EnumGene<Point>, Double> tsm = ...;
  final Phenotype<EnumGene<Point>, Double> result = Engine.builder(tsm)
  .optimize(Optimize.MINIMUM).build()
  .stream()
  .limit(100)
  .collect(EvolutionResult.toBestPhenotype());
  }</pre>
  
  If the collected {@link EvolutionStream} is empty, the collector returns
  <b>{@code null}</b>.
  
  @param <G> the gene type
  @param <C> the fitness type
  @return a collector which collects the best phenotype of an evolution
  stream