Package io.jenetics

Class AnyChromosome<A>

  • All Implemented Interfaces:
    Chromosome<AnyGene<A>>, BaseSeq<AnyGene<A>>, Factory<Chromosome<AnyGene<A>>>, Verifiable, Serializable, Iterable<AnyGene<A>>, RandomAccess

    public class AnyChromosome<A>
    extends AbstractChromosome<G>
    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 for an allele-type with no predefined gene- and chromosome type.
    Since:
    3.3
    Version:
    5.2
    Author:
    Franz Wilhelmstötter
    See Also:
    AnyGene, Serialized Form
    Implementation Requirements:
    This class is immutable and thread-safe.
    • Constructor Detail

      • 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. An chromosome is valid if both, the alleleValidator and the alleleSeqValidator return true.
        Parameters:
        genes - the genes that form the chromosome.
        lengthRange - the allowed length range of 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.
        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 Detail

      • newInstance

        public Chromosome<AnyGene<A>> newInstance​(ISeq<AnyGene<A>> genes)
        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.
      • 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