public static void main(String[] args) { final Engine<DoubleGene, Double> engine = Engine // Create a new builder with the given fitness // function and chromosome. .builder(RealFunction::eval, DoubleChromosome.of(0.0, 2.0 * PI)) .populationSize(500) .optimize(Optimize.MINIMUM) .alterers(new Mutator<>(0.03), new MeanAlterer<>(0.6)) // Build an evolution engine with the // defined parameters. .build(); // Create evolution statistics consumer. final EvolutionStatistics<Double, ?> statistics = EvolutionStatistics.ofNumber(); final Phenotype<DoubleGene, Double> best = engine .stream() // Truncate the evolution stream after 7 "steady" // generations. .limit(bySteadyFitness(7)) // The evolution will stop after maximal 100 // generations. .limit(100) // Update the evaluation statistics after // each generation .peek(statistics) // Collect (reduce) the evolution stream to // its best phenotype. .collect(toBestPhenotype()); System.out.println(statistics); System.out.println(best); }
@Override void accept(final Phenotype<?, N> pt, final long generation) { super.accept(pt, generation); _fitness.accept(pt.getFitness().doubleValue()); }