Package org.apache.commons.math.genetics
Class RandomKey<T>
- java.lang.Object
 - 
- org.apache.commons.math.genetics.Chromosome
 - 
- org.apache.commons.math.genetics.AbstractListChromosome<java.lang.Double>
 - 
- org.apache.commons.math.genetics.RandomKey<T>
 
 
 
 
- 
- Type Parameters:
 T- type of the permuted objects
- All Implemented Interfaces:
 java.lang.Comparable<Chromosome>,Fitness,PermutationChromosome<T>
public 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:
- Bean, J.C.: Genetic algorithms and random keys for sequencing and optimization. ORSA Journal on Computing 6 (1994) 154–160
 - Rothlauf, F.: Representations for Genetic and Evolutionary Algorithms. Volume 104 of Studies in Fuzziness and Soft Computing. Physica-Verlag, Heidelberg (2002)
 
- Since:
 - 2.0
 
 
- 
- 
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method 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 thedatasorted bycomparator.java.util.List<T>decode(java.util.List<T> sequence)Permutes thesequenceof 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 yieldspermutedDatawhen applied tooriginalData.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.StringtoString()- 
Methods inherited from class org.apache.commons.math.genetics.AbstractListChromosome
getLength, newFixedLengthChromosome 
- 
Methods inherited from class org.apache.commons.math.genetics.Chromosome
compareTo, getFitness, searchForFitnessUpdate 
 - 
 
 - 
 
- 
- 
Constructor Detail
- 
RandomKey
public RandomKey(java.util.List<java.lang.Double> representation)
Constructor.- Parameters:
 representation- list of [0,1] values representing the permutation
 
- 
RandomKey
public RandomKey(java.lang.Double[] representation)
Constructor.- Parameters:
 representation- array of [0,1] values representing the permutation
 
 - 
 
- 
Method Detail
- 
decode
public java.util.List<T> decode(java.util.List<T> sequence)
Permutes thesequenceof 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).- Specified by:
 decodein interfacePermutationChromosome<T>- Parameters:
 sequence- the unpermuted (original) sequence of objects- Returns:
 - permutation of 
sequencerepresented by this permutation 
 
- 
randomPermutation
public static final 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.- Parameters:
 l- length of the permutation- Returns:
 - representation of a random permutation
 
 
- 
identityPermutation
public static final 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.- Parameters:
 l- length of the permutation- Returns:
 - representation of an identity permutation
 
 
- 
comparatorPermutation
public 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 thedatasorted bycomparator. Thedatais not modified during the process. This is useful if you want to inject some permutations to the initial population.- Type Parameters:
 S- type of the data- Parameters:
 data- list of data determining the ordercomparator- how the data will be compared- Returns:
 - list representation of the permutation corresponding to the parameters
 
 
- 
inducedPermutation
public static <S> java.util.List<java.lang.Double> inducedPermutation(java.util.List<S> originalData, java.util.List<S> permutedData) throws java.lang.IllegalArgumentExceptionGenerates a representation of a permutation corresponding to a permutation which yieldspermutedDatawhen applied tooriginalData. This method can be viewed as an inverse todecode(List).- Type Parameters:
 S- type of the data- Parameters:
 originalData- the original, unpermuted datapermutedData- the data, somehow permuted- Returns:
 - representation of a permutation corresponding to the permutation 
originalData -> permutedData - Throws:
 java.lang.IllegalArgumentException- iff thepermutedDataandoriginalDatacontains different data
 
- 
toString
public java.lang.String toString()
- Overrides:
 toStringin classAbstractListChromosome<java.lang.Double>
 
 - 
 
 -