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(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)));
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
ConstructorDescriptionCyclicEngine
(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) Create a new, possibly infinite, evolution stream with the given initial value.stream
(Supplier<EvolutionStart<G, C>> start) Create a new, possibly infinite, evolution stream with the given evolution 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 theengines
or one of its elements isnull
-
-
Method Details
-
stream
Description copied from interface:EvolutionStreamable
Create a new, possibly infinite, evolution stream with the given evolution start. If an emptyPopulation
is given, the engine's genotype factory is used for creating the population. The given population might be the result of another engine, and this method allows to start the evolution with the outcome of a different engine. The fitness function is replaced by the one defined for this engine.- Parameters:
start
- the data the evolution stream starts with- Returns:
- a new infinite evolution stream
-
stream
Description copied from interface:EvolutionStreamable
Create a new, possibly infinite, evolution stream with the given initial value. If an emptyPopulation
is given, the engines genotype factory is used for creating the population. The given population might be the result of another engine, and this method allows to start the evolution with the outcome of a different engine. The fitness function is replaced by the one defined for this engine.- Parameters:
init
- the data the evolution stream is initialized with- Returns:
- a new infinite evolution 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 theengines
or one of its elements isnull
-