Search code examples
javajenetics

Jenetics counting fitness on the whole population


by the nature of my problem, I would like to count the fitness of all invididuals in the population at the same time for perfomance reasons. Is there a good way of doing that in jenetics?

Thanks


Solution

  • You can use the Evaluator interface instead of the classical fitness function.

    final var gtf = Genotype.of(DoubleChromosome.of(0, 1));
    
    // Use 'Evaluator' instead of classical fitness function.
    final Evaluator<DoubleGene, Double> evaluator = population -> {
        final MSeq<Phenotype<DoubleGene, Double>> result = MSeq.ofLength(population.length());
        for (int i = 0; i < result.length(); ++i) {
            final var pt = population.get(i);
            if (pt.nonEvaluated()) {
                // Do your fitness calculation.
                result.set(i, pt.withFitness(0.1));
            } else {
                result.set(i, pt);
            }
        }
        return result.toISeq();
    };
    
    final Engine<DoubleGene, Double> engine = new Engine.Builder<>(evaluator, gtf)
        .build();