All Implemented Interfaces:
Chromosome <AnyGene <A>>
, BaseSeq <AnyGene <A>>
, Factory <Chromosome <AnyGene <A>>>
, Verifiable
, Iterable <AnyGene <A>>
, RandomAccess
Chromosome
implementation, which allows creating genes without
explicit implementing the
Chromosome
interface.
Copy
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 Summary
Constructors
protected
Create a new AnyChromosome
from the given genes
array.
Method Summary
All Methods Static Methods Instance Methods Concrete Methods
boolean
int
boolean
Check if this object is valid.
Return the allowed length range of the chromosome.
Create a new instance of type T.
A factory method which creates a new
Chromosome
of specific type
and the given
genes
.
Create a new chromosome of type A
with the given parameters and
length one.
Create a new chromosome of type A
with the given parameters.
Create a new chromosome of type A
with the given parameters.
Create a new chromosome of type A
with the given parameters and
length one.
Create a new chromosome of type A
with the given parameters.
Create a new chromosome of type A
with the given parameters.
Create a new chromosome of type A
with the given parameters.
Create a new chromosome of type A
with the given parameters.
Constructor Details
AnyChromosome
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
newInstance
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
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
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
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
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
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
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
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
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
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