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) 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 theengines
or 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 theengines
or one of its elements isnull
-