java.lang.Object
io.jenetics.AbstractChromosome<G>
io.jenetics.AnyChromosome<A>
- All Implemented Interfaces:
Chromosome<AnyGene<A>>,BaseSeq<AnyGene<A>>,Factory<Chromosome<AnyGene<A>>>,Verifiable,Iterable<AnyGene<A>>,RandomAccess
Chromosome implementation, which allows to create genes without
explicit implementing the Chromosome interface.
public class LastMonday {
// First monday of 2015.
private static final LocalDate MIN_MONDAY = LocalDate.of(2015, 1, 5);
// The used Codec.
private static final Codec<LocalDate, AnyGene<LocalDate>> CODEC = Codec.of(
Genotype.of(AnyChromosome.of(LastMonday::nextRandomMonday)),
gt -> gt.gene().allele()
);
// Supplier of random 'LocalDate' objects. The implementation is responsible
// for guaranteeing the desired allele restriction. In this case we will
// generate only mondays.
private static LocalDate nextRandomMonday() {
return MIN_MONDAY.plusWeeks(RandomRegistry.getRandom().nextInt(1000));
}
// The fitness function: find a monday at the end of the month.
private static double fitness(final LocalDate date) {
return date.getDayOfMonth();
}
public static void main(final String[] args) {
final Engine<AnyGene<LocalDate>, Double> engine = Engine
.builder(LastMonday::fitness, CODEC)
.offspringSelector(new RouletteWheelSelector<>())
.build();
final Phenotype<AnyGene<LocalDate>, Double> best = engine.stream()
.limit(50)
.collect(EvolutionResult.toBestPhenotype());
System.out.println(best);
}
}AnyChromosome is used
to use it for an allele-type with no predefined gene- and chromosome type.- Since:
- 3.3
- Version:
- 5.2
- See Also:
- Implementation Requirements:
- This class is immutable and thread-safe.
-
Field Summary
Fields inherited from class io.jenetics.AbstractChromosome
_genes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleaninthashCode()booleanisValid()Check if this object is valid.Return the allowed length range of the chromosome.Create a new instance of type T.newInstance(ISeq<AnyGene<A>> genes) A factory method which creates a newChromosomeof specific type and the givengenes.static <A> AnyChromosome<A>Create a new chromosome of typeAwith the given parameters and length one.static <A> AnyChromosome<A>Create a new chromosome of typeAwith the given parameters.static <A> AnyChromosome<A>Create a new chromosome of typeAwith the given parameters.static <A> AnyChromosome<A>Create a new chromosome of typeAwith the given parameters and length one.static <A> AnyChromosome<A>Create a new chromosome of typeAwith the given parameters.static <A> AnyChromosome<A>Create a new chromosome of typeAwith the given parameters.static <A> AnyChromosome<A>of(Supplier<? extends A> supplier, Predicate<? super A> alleleValidator, Predicate<? super ISeq<A>> alleleSeqValidator, int length) Create a new chromosome of typeAwith the given parameters.static <A> AnyChromosome<A>of(Supplier<? extends A> supplier, Predicate<? super A> alleleValidator, Predicate<? super ISeq<A>> alleleSeqValidator, IntRange lengthRange) Create a new chromosome of typeAwith the given parameters.Methods inherited from class io.jenetics.AbstractChromosome
get, length, toStringMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface io.jenetics.util.BaseSeq
forEach, isEmpty, iterator, listIterator, nonEmpty, spliterator, streamMethods inherited from interface io.jenetics.Chromosome
as, gene
-
Constructor Details
-
AnyChromosome
protected AnyChromosome(ISeq<AnyGene<A>> genes, Supplier<? extends A> supplier, Predicate<? super A> alleleValidator, Predicate<? super ISeq<A>> alleleSeqValidator, IntRange lengthRange) Create a newAnyChromosomefrom the givengenesarray. A chromosome is valid if both, thealleleValidatorand thealleleSeqValidatorreturntrue.- Parameters:
genes- the genes that form the chromosome.lengthRange- the allowed length range of the chromosomesupplier- the allele-supplier which is used for creating new, random allelesalleleValidator- the validator used for validating the created gene. This predicate is used in theAnyGene.isValid()method.alleleSeqValidator- the validator used for validating the created chromosome. This predicate is used in theisValid()method.- Throws:
NullPointerException- if the given arguments isnullIllegalArgumentException- if the length of the gene sequence is empty, doesn't match with the allowed length range, the minimum or maximum of the range is smaller or equal zero, or the given range size is zero.
-
-
Method Details
-
isValid
Description copied from interface:VerifiableCheck if this object is valid.- Specified by:
isValidin interfaceChromosome<A>- Specified by:
isValidin interfaceVerifiable- Overrides:
isValidin classAbstractChromosome<AnyGene<A>>- Returns:
- true if this object is valid, false otherwise.
-
newInstance
Description copied from interface:ChromosomeA factory method which creates a newChromosomeof specific type and the givengenes.- Parameters:
genes- the genes of the new chromosome. The given genes array is not copied.- Returns:
- A new
Chromosomeof the same type with the given genes.
-
newInstance
Description copied from interface:FactoryCreate a new instance of type T.- Returns:
- a new instance of type T
-
of
public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> alleleValidator, Predicate<? super ISeq<A>> alleleSeqValidator, IntRange lengthRange) Create a new chromosome of typeAwith the given parameters.- Type Parameters:
A- the allele type- Parameters:
supplier- the allele-supplier which is used for creating new, random allelesalleleValidator- the validator used for validating the created gene. This predicate is used in theAnyGene.isValid()method.alleleSeqValidator- the validator used for validating the created chromosome. This predicate is used in theisValid()method.lengthRange- the allowed length range of the chromosome- Returns:
- a new chromosome of allele type
A - Throws:
NullPointerException- if the given arguments isnullIllegalArgumentException- if chromosome length is smaller than one.- Since:
- 4.0
-
of
public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> alleleValidator, Predicate<? super ISeq<A>> alleleSeqValidator, int length) Create a new chromosome of typeAwith the given parameters.- Type Parameters:
A- the allele type- Parameters:
supplier- the allele-supplier which is used for creating new, random allelesalleleValidator- the validator used for validating the created gene. This predicate is used in theAnyGene.isValid()method.alleleSeqValidator- the validator used for validating the created chromosome. This predicate is used in theisValid()method.length- the length of the chromosome- Returns:
- a new chromosome of allele type
A - Throws:
NullPointerException- if the given arguments isnullIllegalArgumentException- if chromosome length is smaller than one.
-
of
public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> validator, IntRange lengthRange) Create a new chromosome of typeAwith the given parameters.- Type Parameters:
A- the allele type- Parameters:
supplier- the allele-supplier which is used for creating new, random allelesvalidator- the validator used for validating the created gene. This predicate is used in theAnyGene.isValid()method.lengthRange- the allowed length range of the chromosome- Returns:
- a new chromosome of allele type
A - Throws:
NullPointerException- if thesupplierorvalidatorisnullIllegalArgumentException- if chromosome length is smaller than one.- Since:
- 4.0
-
of
public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> validator, int length) Create a new chromosome of typeAwith the given parameters.- Type Parameters:
A- the allele type- Parameters:
supplier- the allele-supplier which is used for creating new, random allelesvalidator- the validator used for validating the created gene. This predicate is used in theAnyGene.isValid()method.length- the length of the chromosome- Returns:
- a new chromosome of allele type
A - Throws:
NullPointerException- if thesupplierorvalidatorisnullIllegalArgumentException- if chromosome length is smaller than one.
-
of
public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> validator) Create a new chromosome of typeAwith the given parameters and length one.- Type Parameters:
A- the allele type- Parameters:
supplier- the allele-supplier which is used for creating new, random allelesvalidator- the validator used for validating the created gene. This predicate is used in theisValid()method.- Returns:
- a new chromosome of allele type
A - Throws:
NullPointerException- if thesupplierorvalidatorisnull
-
of
Create a new chromosome of typeAwith the given parameters. Thevalidatorpredicate of the generated gene will always returntrue.- Type Parameters:
A- the allele type- Parameters:
supplier- the allele-supplier which is used for creating new, random alleleslengthRange- the allowed length range of the chromosome- Returns:
- a new chromosome of allele type
A - Throws:
NullPointerException- if thesupplierisnullIllegalArgumentException- if chromosome length is smaller than one.- Since:
- 4.0
-
of
Create a new chromosome of typeAwith the given parameters. Thevalidatorpredicate of the generated gene will always returntrue.- Type Parameters:
A- the allele type- Parameters:
supplier- the allele-supplier which is used for creating new, random alleleslength- the length of the created chromosome- Returns:
- a new chromosome of allele type
A - Throws:
NullPointerException- if thesupplierisnullIllegalArgumentException- if chromosome length is smaller than one.
-
of
Create a new chromosome of typeAwith the given parameters and length one. Thevalidatorpredicate of the generated gene will always returntrue.- Type Parameters:
A- the allele type- Parameters:
supplier- the allele-supplier which is used for creating new, random alleles- Returns:
- a new chromosome of allele type
A - Throws:
NullPointerException- if thesupplierisnull
-
lengthRange
Return the allowed length range of the chromosome. The minimum value of the range is included and the maximum value is excluded.- Returns:
- the allowed length range of the chromosome
-
hashCode
public int hashCode()- Overrides:
hashCodein classAbstractChromosome<G extends Gene<?,G>>
-
equals
- Overrides:
equalsin classAbstractChromosome<G extends Gene<?,G>>
-