Package io.jenetics.engine
Class RetryConstraint<G extends Gene<?,G>,C extends Comparable<? super C>>
- java.lang.Object
-
- io.jenetics.engine.RetryConstraint<G,C>
-
- All Implemented Interfaces:
Constraint<G,C>
public final class RetryConstraint<G extends Gene<?,G>,C extends Comparable<? super C>> extends Object implements Constraint<G,C>
This simpleConstraintimplementation repairs an invalid phenotype by creating new individuals until a valid one has been created. If the probability of creating invalid individuals isn't to high, this is the preferred constraint implementation. E.g. if the probability of creating an invalid individual is 0.1, then the probability of creating an invalid phenotype after n retries, is 0.1n.The following example constraint checks a 2-dimensional point for validity. In this example, a point is considered as valid, if it lies within the unit circle.
The probability that a randomly created point lies outside the unit circle is 1 - π/4 ≈ 0.2146. This leads to a failure probability after 10 tries of 0.214610 ≈ 0.000000207173567. Since we are using anInvertibleCodec<double[], DoubleGene> codec = Codecs.ofVector(DoubleRange.of(-1, 1), 2); Constraint<DoubleGene, Double> constraint = RetryConstraint.of( codec, p -> p[0]*p[0] + p[1]*p[1] <= 1 );InvertibleCodec, it is much easier to implement our constraint. Otherwise we would need to check the validity on thePhenotypedirectly- Since:
- 5.0
- Version:
- 5.2
- API Note:
- This class is part of the more advanced API and is not needed for default use cases.
-
-
Field Summary
Fields Modifier and Type Field Description static intDEFAULT_RETRY_COUNTThe default retry-count for creating new, valid phenotypes.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <T,G extends Gene<?,G>,C extends Comparable<? super C>>
Constraint<G,C>of(InvertibleCodec<T,G> codec, Predicate<? super T> validator)Return a new constraint with the givenvalidatorand theDEFAULT_RETRY_COUNT.static <T,G extends Gene<?,G>,C extends Comparable<? super C>>
Constraint<G,C>of(InvertibleCodec<T,G> codec, Predicate<? super T> validator, int retryLimit)Return a new constraint with the givenvalidatorandretryLimit.static <G extends Gene<?,G>,C extends Comparable<? super C>>
RetryConstraint<G,C>of(Factory<Genotype<G>> genotypeFactory)Return a new constraint with the given genotype factory.static <G extends Gene<?,G>,C extends Comparable<? super C>>
RetryConstraint<G,C>of(Predicate<? super Phenotype<G,C>> validator)Return a new constraint with the givenvalidatorand theDEFAULT_RETRY_COUNT.static <G extends Gene<?,G>,C extends Comparable<? super C>>
RetryConstraint<G,C>of(Predicate<? super Phenotype<G,C>> validator, int retryLimit)Return a new constraint with the givenvalidatorandretryLimit.Phenotype<G,C>repair(Phenotype<G,C> individual, long generation)Tries to repair the given phenotype.booleantest(Phenotype<G,C> individual)Checks the validity of the givenindividual.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.jenetics.engine.Constraint
constrain, constrain, constrain
-
-
-
-
Field Detail
-
DEFAULT_RETRY_COUNT
public static final int DEFAULT_RETRY_COUNT
The default retry-count for creating new, valid phenotypes.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
RetryConstraint
public RetryConstraint(Predicate<? super Phenotype<G,C>> validator, Factory<Genotype<G>> genotypeFactory, int retryLimit)
Create a new retry-constraint with the given parameters.- Parameters:
validator- the phenotype validatorgenotypeFactory- the genotype factory used for creating new phenotypes. The genotype factory may benull. In this case, the phenotype to be repaired is used as template.retryLimit- the limit of the phenotype creation retries. If more re-creation tries are necessary, an invalid phenotype is returned. This limit guarantees the termination of therepair(Phenotype,long)method.- Throws:
NullPointerException- if thevalidatorisnull
-
-
Method Detail
-
test
public boolean test(Phenotype<G,C> individual)
Description copied from interface:ConstraintChecks the validity of the givenindividual.- Specified by:
testin interfaceConstraint<G extends Gene<?,G>,C extends Comparable<? super C>>- Parameters:
individual- the phenotype to check- Returns:
trueif the givenindividualis valid,falseotherwise
-
repair
public Phenotype<G,C> repair(Phenotype<G,C> individual, long generation)
Description copied from interface:ConstraintTries to repair the given phenotype. This method is called by the evolutionEngineif theConstraint.test(Phenotype)method returnedfalse.- Specified by:
repairin interfaceConstraint<G extends Gene<?,G>,C extends Comparable<? super C>>- Parameters:
individual- the phenotype to repairgeneration- the actual generation, where this method is called by the evolution engine- Returns:
- a newly created, valid phenotype. The implementation is free to
use the given invalid
individualas a starting point for the created phenotype.
-
of
public static <G extends Gene<?,G>,C extends Comparable<? super C>> RetryConstraint<G,C> of(Factory<Genotype<G>> genotypeFactory)
Return a new constraint with the given genotype factory. The phenotype validator is set toPhenotype.isValid()and the retry count toDEFAULT_RETRY_COUNT.- Type Parameters:
G- the gene typeC- the fitness value type- Parameters:
genotypeFactory- the genotype factory used for creating new phenotypes- Returns:
- a new constraint strategy
-
of
public static <G extends Gene<?,G>,C extends Comparable<? super C>> RetryConstraint<G,C> of(Predicate<? super Phenotype<G,C>> validator)
Return a new constraint with the givenvalidatorand theDEFAULT_RETRY_COUNT.- Type Parameters:
G- the gene typeC- the fitness value type- Parameters:
validator- the phenotype validator- Returns:
- a new constraint strategy
- Throws:
NullPointerException- if thevalidatorisnull- See Also:
of(Predicate)
-
of
public static <T,G extends Gene<?,G>,C extends Comparable<? super C>> Constraint<G,C> of(InvertibleCodec<T,G> codec, Predicate<? super T> validator)
Return a new constraint with the givenvalidatorand theDEFAULT_RETRY_COUNT.- Type Parameters:
T- the type of the native problem domainG- the gene typeC- the fitness value type- Parameters:
codec- the invertible codec used for simplify the needed validatorvalidator- the phenotype validator- Returns:
- a new constraint strategy
- Throws:
NullPointerException- if thecodecorvalidatorisnull- Since:
- 5.2
-
of
public static <G extends Gene<?,G>,C extends Comparable<? super C>> RetryConstraint<G,C> of(Predicate<? super Phenotype<G,C>> validator, int retryLimit)
Return a new constraint with the givenvalidatorandretryLimit.- Type Parameters:
G- the gene typeC- the fitness value type- Parameters:
validator- the phenotype validatorretryLimit- the limit of the phenotype creation retries. If more re-creation tries are necessary, an invalid phenotype is returned. This limit guarantees the termination of therepair(Phenotype, long)method.- Returns:
- a new constraint strategy
-
of
public static <T,G extends Gene<?,G>,C extends Comparable<? super C>> Constraint<G,C> of(InvertibleCodec<T,G> codec, Predicate<? super T> validator, int retryLimit)
Return a new constraint with the givenvalidatorandretryLimit.- Type Parameters:
T- the type of the native problem domainG- the gene typeC- the fitness value type- Parameters:
codec- the invertible codec used for simplify the needed validatorvalidator- the phenotype validatorretryLimit- the limit of the phenotype creation retries. If more re-creation tries are necessary, an invalid phenotype is returned. This limit guarantees the termination of therepair(Phenotype, long)method.- Returns:
- a new constraint strategy
- Throws:
NullPointerException- if thecodecorvalidatorisnull- Since:
- 5.2
-
-