Class CyclicEngine<G extends Gene<?,G>,C extends Comparable<? super C>>

java.lang.Object
io.jenetics.ext.engine.CyclicEngine<G,C>
Type Parameters:
G - the gene type
C - the fitness type
All Implemented Interfaces:
EvolutionStreamable<G,C>

public final class CyclicEngine<G extends Gene<?,G>,C extends Comparable<? super C>> extends Object
The CyclicEngine lets you concatenate two (or more) evolution Engine, with different configurations, and let it use as one engine EvolutionStreamable. If the last evolution stream terminates, it's final result is fed back to first engine.
 
                  +----------+               +----------+
                  |       ES |               |       ES |
          +------------+     |       +------------+     |
  (Start) |            |-----+ Start |            |-----+
 ---+---->|  Engine 1  |------------>|  Engine 2  | --------+
    ^     |            | Result      |            |         |
    |     +------------+             +------------+         |
    |                                                       |
    +------------------------------<------------------------+
                              Result
  
The CyclicEngine allows to do a broad search-fine search-cycle as long as you want.
 final Problem<double[], DoubleGene, Double> problem = Problem.of(
     v -> Math.sin(v[0])*Math.cos(v[1]),
     Codecs.ofVector(DoubleRange.of(0, 2*Math.PI), 2)
 );

 final Engine<DoubleGene, Double> engine1 = Engine.builder(problem)
     .minimizing()
     .alterers(new Mutator<>(0.2))
     .selector(new MonteCarloSelector<>())
     .build();

 final Engine<DoubleGene, Double> engine2 = Engine.builder(problem)
     .minimizing()
     .alterers(
         new Mutator<>(0.1),
         new MeanAlterer<>())
     .selector(new RouletteWheelSelector<>())
     .build();

 final Genotype<DoubleGene> result =
     CyclicEngine.of(
         engine1.limit(50),
         engine2.limit(() -> Limits.bySteadyFitness(30)))
     .stream()
     .limit(Limits.bySteadyFitness(1000))
     .collect(EvolutionResult.toBestGenotype());

 System.out.println(result + ": " +
     problem.fitness().apply(problem.codec().decode(result)));
When using a CyclicEnginePool, you have to limit the final evolution stream, additionally to the defined limits on the used partial engines.
Since:
4.1
Version:
4.1
See Also: