Package io.jenetics

Class AnyChromosome<A>

java.lang.Object
io.jenetics.AbstractChromosome<AnyGene<A>>
io.jenetics.AnyChromosome<A>
All Implemented Interfaces:
Chromosome<AnyGene<A>>, BaseSeq<AnyGene<A>>, Factory<Chromosome<AnyGene<A>>>, Verifiable, Iterable<AnyGene<A>>, RandomAccess

public class AnyChromosome<A> extends AbstractChromosome<AnyGene<A>>
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);
    }

}
The full example above shows how the 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.
  • 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 new AnyChromosome from the given genes array. A chromosome is valid if both, the alleleValidator and the alleleSeqValidator return true.
      Parameters:
      genes - the genes that form the chromosome.
      supplier - the allele-supplier which is used for creating new, random alleles
      alleleValidator - the validator used for validating the created gene. This predicate is used in the AnyGene.isValid() method.
      alleleSeqValidator - the validator used for validating the created chromosome. This predicate is used in the isValid() method.
      lengthRange - the allowed length range of the chromosome
      Throws:
      NullPointerException - if the given arguments is null
      IllegalArgumentException - 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

      public boolean isValid()
      Description copied from interface: Verifiable
      Check if this object is valid.
      Specified by:
      isValid in interface Chromosome<A>
      Specified by:
      isValid in interface Verifiable
      Overrides:
      isValid in class AbstractChromosome<AnyGene<A>>
      Returns:
      true if this object is valid, false otherwise.
    • newInstance

      Description copied from interface: Chromosome
      A factory method which creates a new Chromosome of specific type and the given genes.
      Parameters:
      genes - the genes of the new chromosome. The given genes array is not copied.
      Returns:
      A new Chromosome of the same type with the given genes.
    • newInstance

      Description copied from interface: Factory
      Create 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 type A with the given parameters.
      Type Parameters:
      A - the allele type
      Parameters:
      supplier - the allele-supplier which is used for creating new, random alleles
      alleleValidator - the validator used for validating the created gene. This predicate is used in the AnyGene.isValid() method.
      alleleSeqValidator - the validator used for validating the created chromosome. This predicate is used in the isValid() method.
      lengthRange - the allowed length range of the chromosome
      Returns:
      a new chromosome of allele type A
      Throws:
      NullPointerException - if the given arguments is null
      IllegalArgumentException - 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 type A with the given parameters.
      Type Parameters:
      A - the allele type
      Parameters:
      supplier - the allele-supplier which is used for creating new, random alleles
      alleleValidator - the validator used for validating the created gene. This predicate is used in the AnyGene.isValid() method.
      alleleSeqValidator - the validator used for validating the created chromosome. This predicate is used in the isValid() method.
      length - the length of the chromosome
      Returns:
      a new chromosome of allele type A
      Throws:
      NullPointerException - if the given arguments is null
      IllegalArgumentException - 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 type A with the given parameters.
      Type Parameters:
      A - the allele type
      Parameters:
      supplier - the allele-supplier which is used for creating new, random alleles
      validator - the validator used for validating the created gene. This predicate is used in the AnyGene.isValid() method.
      lengthRange - the allowed length range of the chromosome
      Returns:
      a new chromosome of allele type A
      Throws:
      NullPointerException - if the supplier or validator is null
      IllegalArgumentException - 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 type A with the given parameters.
      Type Parameters:
      A - the allele type
      Parameters:
      supplier - the allele-supplier which is used for creating new, random alleles
      validator - the validator used for validating the created gene. This predicate is used in the AnyGene.isValid() method.
      length - the length of the chromosome
      Returns:
      a new chromosome of allele type A
      Throws:
      NullPointerException - if the supplier or validator is null
      IllegalArgumentException - 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 type A with the given parameters and length one.
      Type Parameters:
      A - the allele type
      Parameters:
      supplier - the allele-supplier which is used for creating new, random alleles
      validator - the validator used for validating the created gene. This predicate is used in the isValid() method.
      Returns:
      a new chromosome of allele type A
      Throws:
      NullPointerException - if the supplier or validator is null
    • of

      public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, IntRange lengthRange)
      Create a new chromosome of type A with the given parameters. The validator predicate of the generated gene will always return true.
      Type Parameters:
      A - the allele type
      Parameters:
      supplier - the allele-supplier which is used for creating new, random alleles
      lengthRange - the allowed length range of the chromosome
      Returns:
      a new chromosome of allele type A
      Throws:
      NullPointerException - if the supplier is null
      IllegalArgumentException - if chromosome length is smaller than one.
      Since:
      4.0
    • of

      public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, int length)
      Create a new chromosome of type A with the given parameters. The validator predicate of the generated gene will always return true.
      Type Parameters:
      A - the allele type
      Parameters:
      supplier - the allele-supplier which is used for creating new, random alleles
      length - the length of the created chromosome
      Returns:
      a new chromosome of allele type A
      Throws:
      NullPointerException - if the supplier is null
      IllegalArgumentException - if chromosome length is smaller than one.
    • of

      public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier)
      Create a new chromosome of type A with the given parameters and length one. The validator predicate of the generated gene will always return true.
      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 the supplier is null
    • lengthRange

      public IntRange 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:
      hashCode in class AbstractChromosome<G extends Gene<?,G>>
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class AbstractChromosome<G extends Gene<?,G>>