JGAP

org.jgap.impl
Class CompositeGene

java.lang.Object
  extended by org.jgap.BaseGene
      extended by org.jgap.impl.CompositeGene
All Implemented Interfaces:
java.io.Serializable, java.lang.Comparable, Gene, IBusinessKey, ICompositeGene, IPersistentRepresentation, IUniqueKey

public class CompositeGene
extends BaseGene
implements ICompositeGene, IPersistentRepresentation

Ordered container for multiple genes Has the same interface as a single gene and could be used accordingly. Use the addGene(Gene) method to add single genes (possibly CompositeGenes) after construction, an empty CompositeGene without genes makes no sense. Beware that there are two equalities defined for a CompositeGene in respect to its contained genes: a) Two genes are (only) equal if they are identical b) Two genes are (seen as) equal if their equals method returns true This influences several methods such as addGene. Notice that it is safer to use addGene(a_gene, false) than addGene(a_gene, true) because the second variant only allows to add genes not seen as equal to already added genes in respect to their equals function. But: the equals function returns true for two different DoubleGenes (e.g.) just after their creation. If no specific (and hopefully different) allele is set for these DoubleGenes they are seen as equal!

Since:
1.1
See Also:
Serialized Form

Field Summary
static java.lang.String GENE_DELIMITER
          This field separates gene class name from the gene persistent representation string. '*' does not work properly with URLEncoder!
static java.lang.String GENE_DELIMITER_CLOSING
          Represents the closing delimiter that is used to separate genes in the persistent representation of CompositeGene instances.
static java.lang.String GENE_DELIMITER_HEADING
          Represents the heading delimiter that is used to separate genes in the persistent representation of CompositeGene instances.
 
Fields inherited from class org.jgap.BaseGene
DELTA, S_APPLICATION_DATA
 
Fields inherited from interface org.jgap.Gene
PERSISTENT_FIELD_DELIMITER
 
Constructor Summary
CompositeGene()
          Default constructor.
CompositeGene(Configuration a_config)
           
CompositeGene(Configuration a_config, Gene a_geneTypeAllowed)
          Allows to specify which Gene implementation is allowed to be added to the CompositeGene.
 
Method Summary
 void addGene(Gene a_gene)
          Adds a gene to the CompositeGene.
 void addGene(Gene a_gene, boolean a_strict)
          Adds a gene to the CompositeGene's container.
 void applyMutation(int a_index, double a_percentage)
          Don't use this method, is makes no sense here.
 void cleanup()
          Executed by the genetic engine when this Gene instance is no longer needed and should perform any necessary resource cleanup.
 int compareTo(java.lang.Object a_other)
          Compares this CompositeGene with the specified object for order.
 boolean containsGeneByIdentity(Gene gene)
          Checks whether a specific gene is already contained.
protected  Gene createGene(java.lang.String a_geneClassName, java.lang.String a_persistentRepresentation)
          Creates a new instance of gene.
 Gene geneAt(int a_index)
           
 java.lang.Object getAllele()
          Retrieves the value represented by this Gene.
 java.lang.String getBusinessKey()
           
 java.util.List<Gene> getGenes()
           
 Gene getGeneTypeAllowed()
           
protected  java.lang.Object getInternalValue()
          This method is not called internally because BaseGene.getAllele() is overridden here!
 java.lang.String getPersistentRepresentation()
          See interface Gene for description.
 int hashCode()
          Retrieves the hash code value for this Gene.
 boolean isEmpty()
           
protected  Gene newGeneInternal()
          Provides an implementation-independent means for creating new Gene instances.
 boolean removeGene(Gene a_gene)
          Removes the given gene from the collection of genes.
 boolean removeGeneByIdentity(Gene a_gene)
          Removes the given gene from the collection of genes.
 void setAllele(java.lang.Object a_newValue)
          Sets the value of the contained Genes to the new given value.
 void setToRandomValue(RandomGenerator a_numberGenerator)
          See interface Gene for description.
 void setValueFromPersistentRepresentation(java.lang.String a_representation)
          See interface Gene for description.
 int size()
           
protected static java.util.List split(java.lang.String a_string)
          Splits a_string into individual gene representations.
 java.lang.String toString()
          Retrieves a string representation of this CompositeGene's value that may be useful for display purposes.
 
Methods inherited from class org.jgap.BaseGene
compareApplicationData, decode, encode, equals, getApplicationData, getConfiguration, getConstraintChecker, getEnergy, getUniqueID, getUniqueIDTemplate, isCompareApplicationData, newGene, setApplicationData, setCompareApplicationData, setConstraintChecker, setEnergy, setUniqueIDTemplate
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.jgap.Gene
getApplicationData, getConfiguration, getEnergy, isCompareApplicationData, newGene, setApplicationData, setCompareApplicationData, setConstraintChecker, setEnergy
 
Methods inherited from interface org.jgap.IUniqueKey
getUniqueID, getUniqueIDTemplate, setUniqueIDTemplate
 

Field Detail

GENE_DELIMITER

public static final java.lang.String GENE_DELIMITER
This field separates gene class name from the gene persistent representation string. '*' does not work properly with URLEncoder!

See Also:
Constant Field Values

GENE_DELIMITER_HEADING

public static final java.lang.String GENE_DELIMITER_HEADING
Represents the heading delimiter that is used to separate genes in the persistent representation of CompositeGene instances.

See Also:
Constant Field Values

GENE_DELIMITER_CLOSING

public static final java.lang.String GENE_DELIMITER_CLOSING
Represents the closing delimiter that is used to separate genes in the persistent representation of CompositeGene instances.

See Also:
Constant Field Values
Constructor Detail

CompositeGene

public CompositeGene()
              throws InvalidConfigurationException
Default constructor.

Attention: The configuration used is the one set with the static method Genotype.setConfiguration.

Throws:
InvalidConfigurationException
Since:
1.1

CompositeGene

public CompositeGene(Configuration a_config)
              throws InvalidConfigurationException
Parameters:
a_config - the configuration to use
Throws:
InvalidConfigurationException
Since:
3.0

CompositeGene

public CompositeGene(Configuration a_config,
                     Gene a_geneTypeAllowed)
              throws InvalidConfigurationException
Allows to specify which Gene implementation is allowed to be added to the CompositeGene.

Parameters:
a_config - the configuration to use
a_geneTypeAllowed - the class of Genes to be allowed to be added to the CompositeGene
Throws:
InvalidConfigurationException
Since:
2.0
Method Detail

addGene

public void addGene(Gene a_gene)
Adds a gene to the CompositeGene.

Specified by:
addGene in interface ICompositeGene
Parameters:
a_gene - the gene to add

getGeneTypeAllowed

public Gene getGeneTypeAllowed()
Returns:
the gene type allowed, or null if any type allowed
Since:
2.4

addGene

public void addGene(Gene a_gene,
                    boolean a_strict)
Adds a gene to the CompositeGene's container. See comments in class header for additional details about equality (concerning "strict" param.)

Parameters:
a_gene - the gene to be added
a_strict - false: add the given gene except the gene itself already is contained within the CompositeGene's container. true: add the gene if there is no other gene being equal to the given gene in request to the Gene's equals method
Since:
1.1

removeGeneByIdentity

public boolean removeGeneByIdentity(Gene a_gene)
Removes the given gene from the collection of genes. The gene is only removed if an object of the same identity is contained. The equals method is not used here intentionally.

Parameters:
a_gene - the gene to be removed
Returns:
true: given gene found and removed
Since:
1.1

removeGene

public boolean removeGene(Gene a_gene)
Removes the given gene from the collection of genes. The gene is removed if another gene exists that is equal to the given gene in respect to the equals method of the gene.

Parameters:
a_gene - the gene to be removed
Returns:
true: given gene found and removed
Since:
1.1

cleanup

public void cleanup()
Executed by the genetic engine when this Gene instance is no longer needed and should perform any necessary resource cleanup.

Specified by:
cleanup in interface Gene
Overrides:
cleanup in class BaseGene
Since:
1.1

setToRandomValue

public void setToRandomValue(RandomGenerator a_numberGenerator)
See interface Gene for description.

Specified by:
setToRandomValue in interface Gene
Parameters:
a_numberGenerator - the random number generator that should be used to create any random values. It's important to use this generator to maintain the user's flexibility to configure the genetic engine to use the random number generator of their choice
Since:
1.1

setValueFromPersistentRepresentation

public void setValueFromPersistentRepresentation(java.lang.String a_representation)
                                          throws UnsupportedRepresentationException
See interface Gene for description.

Specified by:
setValueFromPersistentRepresentation in interface Gene
Specified by:
setValueFromPersistentRepresentation in interface IPersistentRepresentation
Parameters:
a_representation - the string representation retrieved from a prior call to the getPersistentRepresentation() method
Throws:
UnsupportedRepresentationException
Since:
1.1

createGene

protected Gene createGene(java.lang.String a_geneClassName,
                          java.lang.String a_persistentRepresentation)
                   throws java.lang.Exception
Creates a new instance of gene.

Parameters:
a_geneClassName - name of the gene class
a_persistentRepresentation - persistent representation of the gene to create (could be obtained via getPersistentRepresentation)
Returns:
newly created gene
Throws:
java.lang.Exception

getPersistentRepresentation

public java.lang.String getPersistentRepresentation()
                                             throws java.lang.UnsupportedOperationException
See interface Gene for description.

Specified by:
getPersistentRepresentation in interface Gene
Specified by:
getPersistentRepresentation in interface IPersistentRepresentation
Returns:
string representation of this Gene's current state
Throws:
java.lang.UnsupportedOperationException
Since:
1.1

getAllele

public java.lang.Object getAllele()
Retrieves the value represented by this Gene. All values returned by this class will be Vector instances. Each element of the Vector represents the allele of the corresponding gene in the CompositeGene's container

Specified by:
getAllele in interface Gene
Overrides:
getAllele in class BaseGene
Returns:
the value of this Gene
Since:
1.1

setAllele

public void setAllele(java.lang.Object a_newValue)
Sets the value of the contained Genes to the new given value. This class expects the value to be of a Vector type. Each element of the Vector must conform with the type of the gene in the CompositeGene's container at the corresponding position.

Specified by:
setAllele in interface Gene
Parameters:
a_newValue - the new value of this Gene instance
Since:
1.1

newGeneInternal

protected Gene newGeneInternal()
Provides an implementation-independent means for creating new Gene instances.

Specified by:
newGeneInternal in class BaseGene
Returns:
a new Gene instance of the same type and with the same setup as this concrete Gene
Since:
1.1

compareTo

public int compareTo(java.lang.Object a_other)
Compares this CompositeGene with the specified object for order. A false value is considered to be less than a true value. A null value is considered to be less than any non-null value.

Specified by:
compareTo in interface java.lang.Comparable
Parameters:
a_other - the CompositeGene to be compared
Returns:
a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object
Throws:
java.lang.ClassCastException - if the specified object's type prevents it from being compared to this CompositeGene
Since:
1.1

toString

public java.lang.String toString()
Retrieves a string representation of this CompositeGene's value that may be useful for display purposes.

Specified by:
toString in interface Gene
Overrides:
toString in class BaseGene
Returns:
string representation of this CompositeGene's value. Every contained gene's string representation is delimited by the given delimiter
Since:
1.1

isEmpty

public boolean isEmpty()
Returns:
true: no genes contained, false otherwise
Since:
1.1

geneAt

public Gene geneAt(int a_index)
Specified by:
geneAt in interface ICompositeGene
Parameters:
a_index - index to return the gene at
Returns:
the gene at the given index
Since:
1.1

getGenes

public java.util.List<Gene> getGenes()
Returns:
list of genes contained in the CompositeGene
Since:
3.2.2

size

public int size()
Specified by:
size in interface Gene
Overrides:
size in class BaseGene
Returns:
the number of genes contained
Since:
1.1

containsGeneByIdentity

public boolean containsGeneByIdentity(Gene gene)
Checks whether a specific gene is already contained. The determination will be done by checking for identity and not using the equal method!

Parameters:
gene - the gene under test
Returns:
true: the given gene object is contained
Since:
1.1

applyMutation

public void applyMutation(int a_index,
                          double a_percentage)
Don't use this method, is makes no sense here. It is just there to satisfy the Gene interface. Instead, loop over all contained genes and call their applyMutation method.

Specified by:
applyMutation in interface Gene
Parameters:
a_index - does not matter here
a_percentage - does not matter here
Since:
1.1

split

protected static final java.util.List split(java.lang.String a_string)
                                     throws UnsupportedRepresentationException
Splits a_string into individual gene representations.

Parameters:
a_string - the string to split
Returns:
the elements of the returned array are the persistent representation strings of the gene's components
Throws:
UnsupportedRepresentationException
Since:
2.0

hashCode

public int hashCode()
Retrieves the hash code value for this Gene.

Overrides:
hashCode in class BaseGene
Returns:
this Gene's hash code
Since:
2.2

getInternalValue

protected java.lang.Object getInternalValue()
This method is not called internally because BaseGene.getAllele() is overridden here!

Specified by:
getInternalValue in class BaseGene
Returns:
always null

getBusinessKey

public java.lang.String getBusinessKey()
Specified by:
getBusinessKey in interface IBusinessKey
Overrides:
getBusinessKey in class BaseGene
Returns:
business key

JGAP