Module io.jenetics.ext
Package io.jenetics.ext.engine
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 typeC- the fitness type
- All Implemented Interfaces:
EvolutionStreamable<G,C>
The
When using a
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(new DoubleRange(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)));
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:
-
Constructor Summary
ConstructorsConstructorDescriptionCyclicEngine(List<? extends EvolutionStreamable<G, C>> engines) Create a new cycling evolution engine with the given list ofengines. -
Method Summary
Modifier and TypeMethodDescriptionstatic <G extends Gene<?,G>, C extends Comparable<? super C>>
CyclicEngine<G, C> of(EvolutionStreamable<G, C>... engines) Create a new cycling evolution engine with the given array ofengines.stream(EvolutionInit<G> init) stream(Supplier<EvolutionStart<G, C>> start)
-
Constructor Details
-
CyclicEngine
Create a new cycling evolution engine with the given list ofengines.- Parameters:
engines- the evolution engines which are part of the cycling engine- Throws:
NullPointerException- if theenginesor one of its elements isnull
-
-
Method Details
-
stream
-
stream
-
of
@SafeVarargs public static <G extends Gene<?,G>, CyclicEngine<G,C extends Comparable<? super C>> C> of(EvolutionStreamable<G, C>... engines) Create a new cycling evolution engine with the given array ofengines.- Type Parameters:
G- the gene typeC- the fitness type- Parameters:
engines- the evolution engines which are part of the cycling engine- Returns:
- a new concatenating evolution engine
- Throws:
NullPointerException- if theenginesor one of its elements isnull
-