Class RandomKey<T>
java.lang.Object
org.apache.commons.math3.genetics.Chromosome
org.apache.commons.math3.genetics.AbstractListChromosome<Double>
org.apache.commons.math3.genetics.RandomKey<T>
- Type Parameters:
T- type of the permuted objects
- All Implemented Interfaces:
Comparable<Chromosome>,Fitness,PermutationChromosome<T>
public abstract class RandomKey<T>
extends AbstractListChromosome<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
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidcheckValidity(List<Double> chromosomeRepresentation) Asserts thatrepresentationcan represent a valid chromosome.comparatorPermutation(List<S> data, Comparator<S> comparator) Generates a representation of a permutation corresponding to thedatasorted bycomparator.Permutes thesequenceof objects of type T according to the permutation this chromosome represents.identityPermutation(int l) Generates a representation corresponding to an identity permutation of length l which can be passed to the RandomKey constructor.inducedPermutation(List<S> originalData, List<S> permutedData) Generates a representation of a permutation corresponding to a permutation which yieldspermutedDatawhen applied tooriginalData.protected booleanisSame(Chromosome another) Returnstrueiffanotheris a RandomKey and encodes the same permutation.randomPermutation(int l) Generates a representation corresponding to a random permutation of length l which can be passed to the RandomKey constructor.toString()Methods inherited from class org.apache.commons.math3.genetics.AbstractListChromosome
getLength, getRepresentation, newFixedLengthChromosomeMethods inherited from class org.apache.commons.math3.genetics.Chromosome
compareTo, findSameChromosome, getFitness, searchForFitnessUpdate
-
Constructor Details
-
RandomKey
Constructor.- Parameters:
representation- list of [0,1] values representing the permutation- Throws:
InvalidRepresentationException- iff therepresentationcan not represent a valid chromosome
-
RandomKey
Constructor.- Parameters:
representation- array of [0,1] values representing the permutation- Throws:
InvalidRepresentationException- iff therepresentationcan not represent a valid chromosome
-
-
Method Details
-
decode
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
-
isSame
Returnstrueiffanotheris a RandomKey and encodes the same permutation.- Overrides:
isSamein classChromosome- Parameters:
another- chromosome to compare- Returns:
- true iff chromosomes encode the same permutation
-
checkValidity
protected void checkValidity(List<Double> chromosomeRepresentation) throws InvalidRepresentationException Asserts thatrepresentationcan represent a valid chromosome.- Specified by:
checkValidityin classAbstractListChromosome<Double>- Parameters:
chromosomeRepresentation- representation of the chromosome- Throws:
InvalidRepresentationException- iff therepresentationcan not represent a valid chromosome
-
randomPermutation
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
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
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> List<Double> inducedPermutation(List<S> originalData, List<S> permutedData) throws DimensionMismatchException, MathIllegalArgumentException Generates 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:
DimensionMismatchException- iff the length oforiginalDataandpermutedDatalists are not equalMathIllegalArgumentException- iff thepermutedDataandoriginalDatalists contain different data
-
toString
- Overrides:
toStringin classAbstractListChromosome<Double>
-