/*
* This file is part of JGAP.
*
* JGAP offers a dual license model containing the LGPL as well as the MPL.
*
* For licensing information please see the file license.txt included with JGAP
* or have a look at the top of class org.jgap.Chromosome which representatively
* includes the JGAP license policy applicable for any file delivered with JGAP.
*/
package examples.math.ga;
import org.jgap.*;
/**
*
*
* @author Michael Grove
* @since 3.4.2
*/
public class MyIntegerGene
extends BaseGene implements Gene {
/** String containing the CVS revision. Read out via reflection!*/
private final static String CVS_REVISION = "$Revision: 1.1 $";
private Integer mValue;
private int mMin = Integer.MIN_VALUE;
private int mMax = Integer.MAX_VALUE;
public MyIntegerGene(Configuration theConfiguration)
throws InvalidConfigurationException {
this(theConfiguration, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
public MyIntegerGene(Configuration theConfiguration, int theMin, int theMax)
throws InvalidConfigurationException {
super(theConfiguration);
mValue = 0;
mMin = theMin;
mMax = theMax;
}
protected Object getInternalValue() {
return mValue;
}
protected Gene newGeneInternal() {
try {
return new MyIntegerGene(getConfiguration(), mMin, mMax);
} catch (InvalidConfigurationException e) {
throw new IllegalStateException(e);
}
}
public void setAllele(Object o) {
if (o instanceof Integer) {
Integer aInt = (Integer) o;
// keep it within bounds
aInt = Math.min(aInt, mMax);
aInt = Math.max(aInt, mMin);
mValue = aInt;
}
}
public String getPersistentRepresentation()
throws UnsupportedOperationException {
throw new RuntimeException("NYI");
}
public void setValueFromPersistentRepresentation(String s)
throws UnsupportedOperationException, UnsupportedRepresentationException {
throw new RuntimeException("NYI");
}
public void setToRandomValue(RandomGenerator theRandomGenerator) {
double randomValue = (mMax - mMin) * theRandomGenerator.nextDouble() + mMin;
setAllele(new Integer( (int) Math.round(randomValue)));
}
public void applyMutation(int i, double v) {
double range = (mMax - mMin) * v;
if (getAllele() == null) {
setAllele(new Integer( (int) range + mMin));
}
else {
int newValue = (int) Math.round(mValue + range);
setAllele(new Integer(newValue));
}
}
public int compareTo(Object o) {
return mValue.compareTo( (Integer) ( (MyIntegerGene) o).getAllele());
}
}