T
- type of the permuted objectspublic abstract class RandomKey<T> extends AbstractListChromosome<java.lang.Double> implements PermutationChromosome<T>
Random Key chromosome is used for permutation representation. It is a vector of a fixed length of real numbers in [0,1] interval. The index of the i-th smallest value in the vector represents an i-th member of the permutation.
For example, the random key [0.2, 0.3, 0.8, 0.1] corresponds to the permutation of indices (3,0,1,2). If the original (unpermuted) sequence would be (a,b,c,d), this would mean the sequence (d,a,b,c).
With this representation, common operators like n-point crossover can be used, because any such chromosome represents a valid permutation.
Since the chromosome (and thus its arrayRepresentation) is immutable, the array representation is sorted only once in the constructor.
For details, see:
Constructor and Description |
---|
RandomKey(java.lang.Double[] representation)
Constructor.
|
RandomKey(java.util.List<java.lang.Double> representation)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
static <S> java.util.List<java.lang.Double> |
comparatorPermutation(java.util.List<S> data,
java.util.Comparator<S> comparator)
Generates a representation of a permutation corresponding to the
data sorted by comparator . |
java.util.List<T> |
decode(java.util.List<T> sequence)
Permutes the
sequence of objects of type T according to the
permutation this chromosome represents. |
static java.util.List<java.lang.Double> |
identityPermutation(int l)
Generates a representation corresponding to an identity permutation of
length l which can be passed to the RandomKey constructor.
|
static <S> java.util.List<java.lang.Double> |
inducedPermutation(java.util.List<S> originalData,
java.util.List<S> permutedData)
Generates a representation of a permutation corresponding to a
permutation which yields
permutedData when applied to
originalData . |
static java.util.List<java.lang.Double> |
randomPermutation(int l)
Generates a representation corresponding to a random permutation of
length l which can be passed to the RandomKey constructor.
|
java.lang.String |
toString() |
getLength, newFixedLengthChromosome
compareTo, getFitness, searchForFitnessUpdate
public RandomKey(java.util.List<java.lang.Double> representation)
representation
- list of [0,1] values representing the permutationpublic RandomKey(java.lang.Double[] representation)
representation
- array of [0,1] values representing the permutationpublic java.util.List<T> decode(java.util.List<T> sequence)
sequence
of objects of type T according to the
permutation this chromosome represents. For example, if this chromosome
represents a permutation (3,0,1,2), and the unpermuted sequence is
(a,b,c,d), this yields (d,a,b,c).decode
in interface PermutationChromosome<T>
sequence
- the unpermuted (original) sequence of objectssequence
represented by this
permutationpublic static final java.util.List<java.lang.Double> randomPermutation(int l)
l
- length of the permutationpublic static final java.util.List<java.lang.Double> identityPermutation(int l)
l
- length of the permutationpublic static <S> java.util.List<java.lang.Double> comparatorPermutation(java.util.List<S> data, java.util.Comparator<S> comparator)
data
sorted by comparator
. The
data
is not modified during the process.
This is useful if you want to inject some permutations to the initial
population.S
- type of the datadata
- list of data determining the ordercomparator
- how the data will be comparedpublic static <S> java.util.List<java.lang.Double> inducedPermutation(java.util.List<S> originalData, java.util.List<S> permutedData) throws java.lang.IllegalArgumentException
permutedData
when applied to
originalData
.
This method can be viewed as an inverse to decode(List)
.S
- type of the dataoriginalData
- the original, unpermuted datapermutedData
- the data, somehow permutedoriginalData -> permutedData
java.lang.IllegalArgumentException
- iff the permutedData
and originalData
contains different datapublic java.lang.String toString()
toString
in class AbstractListChromosome<java.lang.Double>
"Copyright © 2010 - 2020 Adobe Systems Incorporated. All Rights Reserved"