renaming doEvaluation got complicated...

This commit is contained in:
Marcel Kronfeld 2008-02-27 14:01:13 +00:00
parent e5fc50703b
commit c794bf44a0
15 changed files with 41 additions and 73 deletions

View File

@ -35,19 +35,28 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
}
}
protected double[] getEvalArray(AbstractEAIndividual individual){
double[] x = new double[((InterfaceDataTypeDouble) individual).getDoubleData().length];
System.arraycopy(((InterfaceDataTypeDouble) individual).getDoubleData(), 0, x, 0, x.length);
return x;
}
@Override
public void evaluate(AbstractEAIndividual individual) {
double[] x;
double[] fitness;
x = new double[((InterfaceDataTypeDouble) individual).getDoubleData().length];
System.arraycopy(((InterfaceDataTypeDouble) individual).getDoubleData(), 0, x, 0, x.length);
x = getEvalArray(individual);
// evaluate the vector
fitness = this.eval(x);
// if indicated, add Gaussian noise
if (m_Noise != 0) RandomNumberGenerator.addNoise(fitness, m_Noise);
// set the fitness
individual.SetFitness(fitness);
// set the fitness
setEvalFitness(individual, x, fitness);
}
protected void setEvalFitness(AbstractEAIndividual individual, double[] x, double[] fit) {
individual.SetFitness(fit);
}
/**
@ -63,9 +72,8 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
public void initPopulation(Population population) {
AbstractEAIndividual tmpIndy;
population.clear();
((InterfaceDataTypeDouble)this.m_Template).setDoubleDataLength(this.getProblemDimension());
((InterfaceDataTypeDouble)this.m_Template).SetDoubleRange(makeRange());
initTemplate();
for (int i = 0; i < population.getPopulationSize(); i++) {
tmpIndy = (AbstractEAIndividual)((AbstractEAIndividual)this.m_Template).clone();
tmpIndy.init(this);

View File

@ -47,7 +47,7 @@ public class F10Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
double c1 = this.calculateC(1);
result[0] = 0.;

View File

@ -48,7 +48,7 @@ public class F11Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
double tmpProd = 1;
result[0] = 0;

View File

@ -70,7 +70,7 @@ public class F12Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
double tmp = -5;
result[0] = 0;

View File

@ -48,7 +48,7 @@ public class F13Problem extends F1Problem {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
result[0] = 0;

View File

@ -43,7 +43,7 @@ public class F14Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
double x0 = x[0]-2;
double x1 = x[1]-2;

View File

@ -1,11 +1,9 @@
package javaeva.server.go.problems;
import javaeva.server.go.individuals.AbstractEAIndividual;
import javaeva.server.go.individuals.ESIndividualDoubleData;
import javaeva.server.go.individuals.InterfaceDataTypeDouble;
import javaeva.server.go.populations.Population;
import javaeva.server.go.strategies.InterfaceOptimizer;
import javaeva.server.go.tools.RandomNumberGenerator;
/**
* Created by IntelliJ IDEA.
@ -27,9 +25,7 @@ public class F1Problem extends AbstractProblemDouble implements Interface2DBorde
protected boolean m_UseTestConstraint = false;
public F1Problem() {
this.m_Template = new ESIndividualDoubleData();
((ESIndividualDoubleData)this.m_Template).setDoubleDataLength(m_ProblemDimension);
((ESIndividualDoubleData)this.m_Template).SetDoubleRange(makeRange());
super();
}
public F1Problem(F1Problem b) {
@ -64,62 +60,26 @@ public class F1Problem extends AbstractProblemDouble implements Interface2DBorde
* @param population The populations that is to be inited
*/
public void initPopulation(Population population) {
AbstractEAIndividual tmpIndy;
super.initPopulation(population);
this.m_OverallBest = null;
population.clear();
((InterfaceDataTypeDouble)this.m_Template).setDoubleDataLength(this.m_ProblemDimension);
((InterfaceDataTypeDouble)this.m_Template).SetDoubleRange(makeRange());
for (int i = 0; i < population.getPopulationSize(); i++) {
tmpIndy = (AbstractEAIndividual)((AbstractEAIndividual)this.m_Template).clone();
tmpIndy.init(this);
population.add(tmpIndy);
}
// population init must be last
// it set's fitcalls and generation to zero
population.init();
}
protected double[][] getDoubleRange() {
return ((InterfaceDataTypeDouble)this.m_Template).getDoubleRange();
}
/** This method evaluate a single individual and sets the fitness values
* @param individual The individual that is to be evalutated
*/
public void evaluate(AbstractEAIndividual individual) {
double[] x;
double[] fitness;
// retrieve the individual data
x = new double[((InterfaceDataTypeDouble) individual).getDoubleData().length];
System.arraycopy(((InterfaceDataTypeDouble) individual).getDoubleData(), 0, x, 0, x.length);
protected double[] getEvalArray(AbstractEAIndividual individual){
double[] x = super.getEvalArray(individual);
// add an offset in solution space
for (int i = 0; i < x.length; i++) x[i] = x[i] - this.m_XOffSet;
// evaluate the vector
fitness = this.eval(x);
// add noise to the fitness
if (m_Noise != 0) RandomNumberGenerator.addNoise(fitness, m_Noise);
// add an offset in fitness space
for (int i = 0; i < fitness.length; i++) fitness[i] += this.m_YOffSet;
// finally set the fitness
individual.SetFitness(fitness);
return x;
}
protected void setEvalFitness(AbstractEAIndividual individual, double[] x, double[] fit) {
super.setEvalFitness(individual, x, fit);
if (this.m_UseTestConstraint) {
if (x[0] < 1) individual.addConstraintViolation(1-x[0]);
}
if ((this.m_OverallBest == null) || (this.m_OverallBest.getFitness(0) > individual.getFitness(0))) {
this.m_OverallBest = (AbstractEAIndividual)individual.clone();
}
}
}
}
/** Ths method allows you to evaluate a simple bit string to determine the fitness
* @param x The n-dimensional input vector
@ -228,6 +188,6 @@ public class F1Problem extends AbstractProblemDouble implements Interface2DBorde
}
public double[][] get2DBorder() {
return getDoubleRange();
return ((InterfaceDataTypeDouble)this.m_Template).getDoubleRange();
}
}

View File

@ -41,7 +41,7 @@ public class F2Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
result[0] = 0;
for (int i = 0; i < x.length-1; i++) {

View File

@ -40,7 +40,7 @@ public class F3Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
result[0] = 6*x.length;
for (int i = 0; i < x.length-1; i++) {

View File

@ -71,7 +71,7 @@ public class F4Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
result[0] = 0;
for (int i = 0; i < x.length-1; i++) {

View File

@ -71,7 +71,7 @@ public class F5Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
double tmp;
result[0] = 0;

View File

@ -59,7 +59,7 @@ public class F6Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
if (doRotation) {
Matrix resVec = rotation.times(new Matrix(x, x.length));

View File

@ -83,7 +83,7 @@ public class F7Problem extends F1Problem implements java.io.Serializable {
System.arraycopy(((InterfaceDataTypeDouble) individual).getDoubleData(), 0, x, 0, x.length);
for (int i = 0; i < x.length; i++) x[i] = x[i] - this.m_XOffSet;
fitness = this.doEvaluation(x);
fitness = this.eval(x);
for (int i = 0; i < fitness.length; i++) {
// add noise to the fitness
fitness[i] += RandomNumberGenerator.gaussianDouble(this.m_Noise);
@ -103,7 +103,7 @@ public class F7Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
result[0] = 0;
if ((Math.floor(this.m_CurrentTimeStamp / this.m_t)%2) == 0) {

View File

@ -75,7 +75,7 @@ public class F8Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
double sum1 = 0, sum2 = 0, exp1, exp2;

View File

@ -40,7 +40,7 @@ public class F9Problem extends F1Problem implements java.io.Serializable {
* @param x The n-dimensional input vector
* @return The m-dimensional output vector.
*/
public double[] doEvaluation(double[] x) {
public double[] eval(double[] x) {
double[] result = new double[1];
result[0] = 0;
for (int i = 0; i < x.length; i++) {