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.getGene().getAllele()
);
// 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 for an allele-type with no predefined gene- and chromosome type.AnyGene
,
Serialized Form_genes
Modifier | Constructor and Description |
---|---|
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. |
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object obj) |
int |
hashCode() |
boolean |
isValid()
Check if this object is valid.
|
IntRange |
lengthRange()
Return the allowed length range of the chromosome.
|
Chromosome<AnyGene<A>> |
newInstance()
Create a new instance of type T.
|
Chromosome<AnyGene<A>> |
newInstance(ISeq<AnyGene<A>> genes)
A factory method which creates a new
Chromosome of specific type
and the given genes . |
static <A> AnyChromosome<A> |
of(Supplier<? extends A> supplier)
Create a new chromosome of type
A with the given parameters and
length one. |
static <A> AnyChromosome<A> |
of(Supplier<? extends A> supplier,
int length)
Create a new chromosome of type
A with the given parameters. |
static <A> AnyChromosome<A> |
of(Supplier<? extends A> supplier,
IntRange lengthRange)
Create a new chromosome of type
A with the given parameters. |
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. |
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. |
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. |
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. |
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. |
getGene, iterator, length, toSeq, toString
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
as, getGene, stream
forEach, spliterator
protected AnyChromosome(ISeq<AnyGene<A>> genes, Supplier<? extends A> supplier, Predicate<? super A> alleleValidator, Predicate<? super ISeq<A>> alleleSeqValidator, IntRange lengthRange)
AnyChromosome
from the given genes
array. An chromosome is valid if both, the alleleValidator
and
the alleleSeqValidator
return true
.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 the AnyGene.isValid()
method.alleleSeqValidator
- the validator used for validating the created
chromosome. This predicate is used in the
isValid()
method.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.public boolean isValid()
Verifiable
isValid
in interface Verifiable
isValid
in class AbstractChromosome<AnyGene<A>>
public Chromosome<AnyGene<A>> newInstance(ISeq<AnyGene<A>> genes)
Chromosome
Chromosome
of specific type
and the given genes
.genes
- the genes of the new chromosome. The given genes array is
not copied.Chromosome
of the same type with the given genes.public Chromosome<AnyGene<A>> newInstance()
Factory
public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> alleleValidator, Predicate<? super ISeq<A>> alleleSeqValidator, IntRange lengthRange)
A
with the given parameters.A
- the allele typesupplier
- the allele-supplier which is used for creating new,
random allelesalleleValidator
- 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 chromosomeA
NullPointerException
- if the given arguments is null
IllegalArgumentException
- if chromosome length is smaller than one.public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> alleleValidator, Predicate<? super ISeq<A>> alleleSeqValidator, int length)
A
with the given parameters.A
- the allele typesupplier
- the allele-supplier which is used for creating new,
random allelesalleleValidator
- 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 chromosomeA
NullPointerException
- if the given arguments is null
IllegalArgumentException
- if chromosome length is smaller than one.public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> validator, IntRange lengthRange)
A
with the given parameters.A
- the allele typesupplier
- the allele-supplier which is used for creating new,
random allelesvalidator
- the validator used for validating the created gene. This
predicate is used in the AnyGene.isValid()
method.lengthRange
- the allowed length range of the chromosomeA
NullPointerException
- if the supplier
or validator
is null
IllegalArgumentException
- if chromosome length is smaller than one.public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> validator, int length)
A
with the given parameters.A
- the allele typesupplier
- the allele-supplier which is used for creating new,
random allelesvalidator
- the validator used for validating the created gene. This
predicate is used in the AnyGene.isValid()
method.length
- the length of the chromosomeA
NullPointerException
- if the supplier
or validator
is null
IllegalArgumentException
- if chromosome length is smaller than one.public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, Predicate<? super A> validator)
A
with the given parameters and
length one.A
- the allele typesupplier
- the allele-supplier which is used for creating new,
random allelesvalidator
- the validator used for validating the created gene. This
predicate is used in the isValid()
method.A
NullPointerException
- if the supplier
or validator
is null
public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, IntRange lengthRange)
A
with the given parameters. The
validator
predicate of the generated gene will always return
true
.A
- the allele typesupplier
- the allele-supplier which is used for creating new,
random alleleslengthRange
- the allowed length range of the chromosomeA
NullPointerException
- if the supplier
is null
IllegalArgumentException
- if chromosome length is smaller than one.public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier, int length)
A
with the given parameters. The
validator
predicate of the generated gene will always return
true
.A
- the allele typesupplier
- the allele-supplier which is used for creating new,
random alleleslength
- the length of the created chromosomeA
NullPointerException
- if the supplier
is null
IllegalArgumentException
- if chromosome length is smaller than one.public static <A> AnyChromosome<A> of(Supplier<? extends A> supplier)
A
with the given parameters and
length one. The validator
predicate of the generated gene will
always return true
.A
- the allele typesupplier
- the allele-supplier which is used for creating new,
random allelesA
NullPointerException
- if the supplier
is null
public IntRange lengthRange()
public int hashCode()
hashCode
in class AbstractChromosome<G extends Gene<?,G>>
public boolean equals(Object obj)
equals
in class AbstractChromosome<G extends Gene<?,G>>
© 2007-2017 Franz Wilhelmstötter (2017-11-16 19:35)