org.jgap.impl
Class CompositeGene

java.lang.Object
  extended byorg.jgap.impl.CompositeGene
All Implemented Interfaces:
java.lang.Comparable, Gene, java.io.Serializable

public class CompositeGene
extends java.lang.Object
implements Gene

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 (not CompositeGenes!) after construction, an empty CompositeGene without genes makes no sense. Beware that there are two equalities defined for a CompsoiteGene 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 "better" 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
Author:
Klaus Meffert, Audrius Meskauskas
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, so I have changed it to '#'
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 interface org.jgap.Gene
PERSISTENT_FIELD_DELIMITER
 
Constructor Summary
CompositeGene()
           
CompositeGene(Gene a_geneTypeAllowed)
          Allows to specify which Gene implementation is allowed to be added to the CompositeGene.
 
Method Summary
 void addGene(Gene a_gene)
           
 void addGene(Gene a_gene, boolean strict)
          Adds a gene to the CompositeGene's container.
 void applyMutation(int 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 other)
          Compares this CompositeGene with the specified object for order.
 boolean containsGeneByIdentity(Gene gene)
          Checks whether a specific gene is already contained.
 boolean equals(java.lang.Object other)
          Compares this CompositeGene with the given object and returns true if the other object is a IntegerGene and has the same value (allele) as this IntegerGene.
 Gene geneAt(int index)
          Returns the gene at the given index
 java.lang.Object getAllele()
          Retrieves the value represented by this Gene.
 IGeneConstraintChecker getConstraintChecker()
           
 java.lang.String getPersistentRepresentation()
          See interface Gene for description
 boolean isEmpty()
           
 Gene newGene()
          Provides an implementation-independent means for creating new Gene instances.
 boolean removeGene(Gene gene)
          Removes the given gene from the collection of genes.
 boolean removeGeneByIdentity(Gene 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 setConstraintChecker(IGeneConstraintChecker a_constraintChecker)
          Sets the constraint checker to be used for this gene whenever method setAllele(Object a_newValue) is called
 void setToRandomValue(RandomGenerator a_numberGenerator)
          See interface Gene for description
 void setValueFromPersistentRepresentation(java.lang.String a_representation)
          See interface Gene for description
 int size()
           
 java.lang.String toString()
          Retrieves a string representation of this CompositeGene's value that may be useful for display purposes.
 
Methods inherited from class java.lang.Object
getClass, hashCode, notify, notifyAll, wait, wait, wait
 

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, so I have changed it to '#'

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()
Since:
1.1

CompositeGene

public CompositeGene(Gene a_geneTypeAllowed)
Allows to specify which Gene implementation is allowed to be added to the CompositeGene.

Parameters:
a_geneTypeAllowed - the class of Genes to be allowed to be added to the CompositeGene.
Since:
2.0
Method Detail

addGene

public void addGene(Gene a_gene)

addGene

public void addGene(Gene a_gene,
                    boolean 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
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 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 will not be used here intentionally

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

removeGene

public boolean removeGene(Gene 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:
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
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
Parameters:
a_representation - the string representation retrieved from a prior call to the getPersistentRepresentation() method.
Throws:
UnsupportedRepresentationException
Since:
1.1

getPersistentRepresentation

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

Specified by:
getPersistentRepresentation in interface Gene
Returns:
A 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
Returns:
the Boolean 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

setConstraintChecker

public void setConstraintChecker(IGeneConstraintChecker a_constraintChecker)
Sets the constraint checker to be used for this gene whenever method setAllele(Object a_newValue) is called

Parameters:
a_constraintChecker - the constraint checker to be set
Since:
2.0

getConstraintChecker

public IGeneConstraintChecker getConstraintChecker()
Returns:
IGeneConstraintChecker the constraint checker to be used whenever method setAllele(Object a_newValue) is called
Since:
2.0

newGene

public Gene newGene()
Provides an implementation-independent means for creating new Gene instances. The new instance that is created and returned should be setup with any implementation-dependent configuration that this Gene instance is setup with (aside from the actual value, of course). For example, if this Gene were setup with bounds on its value, then the Gene instance returned from this method should also be setup with those same bounds. This is important, as the JGAP core will invoke this method on each Gene in the sample Chromosome in order to create each new Gene in the same respective gene position for a new Chromosome.

It should be noted that nothing is guaranteed about the actual value of the returned Gene and it should therefore be considered to be undefined.

Specified by:
newGene in interface Gene
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 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:
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

equals

public boolean equals(java.lang.Object other)
Compares this CompositeGene with the given object and returns true if the other object is a IntegerGene and has the same value (allele) as this IntegerGene. Otherwise it returns false.

Parameters:
other - the object to compare to this IntegerGene for equality.
Returns:
true if this IntegerGene is equal to the given object, false otherwise.
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
Returns:
a 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 index)
Returns the gene at the given index

Parameters:
index - sic
Returns:
the gene at the given index
Since:
1.1

size

public int size()
Specified by:
size in interface Gene
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 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 cotnained genes and call their applyMutation method.

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