renaming doEvaluation got complicated...
This commit is contained in:
parent
e5fc50703b
commit
c794bf44a0
@ -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
|
@Override
|
||||||
public void evaluate(AbstractEAIndividual individual) {
|
public void evaluate(AbstractEAIndividual individual) {
|
||||||
double[] x;
|
double[] x;
|
||||||
double[] fitness;
|
double[] fitness;
|
||||||
|
|
||||||
x = new double[((InterfaceDataTypeDouble) individual).getDoubleData().length];
|
x = getEvalArray(individual);
|
||||||
System.arraycopy(((InterfaceDataTypeDouble) individual).getDoubleData(), 0, x, 0, x.length);
|
|
||||||
// evaluate the vector
|
// evaluate the vector
|
||||||
fitness = this.eval(x);
|
fitness = this.eval(x);
|
||||||
// if indicated, add Gaussian noise
|
// if indicated, add Gaussian noise
|
||||||
if (m_Noise != 0) RandomNumberGenerator.addNoise(fitness, m_Noise);
|
if (m_Noise != 0) RandomNumberGenerator.addNoise(fitness, m_Noise);
|
||||||
// set the fitness
|
// set the fitness
|
||||||
individual.SetFitness(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) {
|
public void initPopulation(Population population) {
|
||||||
AbstractEAIndividual tmpIndy;
|
AbstractEAIndividual tmpIndy;
|
||||||
population.clear();
|
population.clear();
|
||||||
((InterfaceDataTypeDouble)this.m_Template).setDoubleDataLength(this.getProblemDimension());
|
initTemplate();
|
||||||
((InterfaceDataTypeDouble)this.m_Template).SetDoubleRange(makeRange());
|
|
||||||
|
|
||||||
for (int i = 0; i < population.getPopulationSize(); i++) {
|
for (int i = 0; i < population.getPopulationSize(); i++) {
|
||||||
tmpIndy = (AbstractEAIndividual)((AbstractEAIndividual)this.m_Template).clone();
|
tmpIndy = (AbstractEAIndividual)((AbstractEAIndividual)this.m_Template).clone();
|
||||||
tmpIndy.init(this);
|
tmpIndy.init(this);
|
||||||
|
@ -47,7 +47,7 @@ public class F10Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
double c1 = this.calculateC(1);
|
double c1 = this.calculateC(1);
|
||||||
result[0] = 0.;
|
result[0] = 0.;
|
||||||
|
@ -48,7 +48,7 @@ public class F11Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
double tmpProd = 1;
|
double tmpProd = 1;
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
|
@ -70,7 +70,7 @@ public class F12Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
double tmp = -5;
|
double tmp = -5;
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
|
@ -48,7 +48,7 @@ public class F13Problem extends F1Problem {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ public class F14Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
double x0 = x[0]-2;
|
double x0 = x[0]-2;
|
||||||
double x1 = x[1]-2;
|
double x1 = x[1]-2;
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
package javaeva.server.go.problems;
|
package javaeva.server.go.problems;
|
||||||
|
|
||||||
import javaeva.server.go.individuals.AbstractEAIndividual;
|
import javaeva.server.go.individuals.AbstractEAIndividual;
|
||||||
import javaeva.server.go.individuals.ESIndividualDoubleData;
|
|
||||||
import javaeva.server.go.individuals.InterfaceDataTypeDouble;
|
import javaeva.server.go.individuals.InterfaceDataTypeDouble;
|
||||||
import javaeva.server.go.populations.Population;
|
import javaeva.server.go.populations.Population;
|
||||||
import javaeva.server.go.strategies.InterfaceOptimizer;
|
import javaeva.server.go.strategies.InterfaceOptimizer;
|
||||||
import javaeva.server.go.tools.RandomNumberGenerator;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by IntelliJ IDEA.
|
* Created by IntelliJ IDEA.
|
||||||
@ -27,9 +25,7 @@ public class F1Problem extends AbstractProblemDouble implements Interface2DBorde
|
|||||||
protected boolean m_UseTestConstraint = false;
|
protected boolean m_UseTestConstraint = false;
|
||||||
|
|
||||||
public F1Problem() {
|
public F1Problem() {
|
||||||
this.m_Template = new ESIndividualDoubleData();
|
super();
|
||||||
((ESIndividualDoubleData)this.m_Template).setDoubleDataLength(m_ProblemDimension);
|
|
||||||
((ESIndividualDoubleData)this.m_Template).SetDoubleRange(makeRange());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public F1Problem(F1Problem b) {
|
public F1Problem(F1Problem b) {
|
||||||
@ -64,62 +60,26 @@ public class F1Problem extends AbstractProblemDouble implements Interface2DBorde
|
|||||||
* @param population The populations that is to be inited
|
* @param population The populations that is to be inited
|
||||||
*/
|
*/
|
||||||
public void initPopulation(Population population) {
|
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
|
protected double[] getEvalArray(AbstractEAIndividual individual){
|
||||||
* @param individual The individual that is to be evalutated
|
double[] x = super.getEvalArray(individual);
|
||||||
*/
|
|
||||||
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);
|
|
||||||
|
|
||||||
// add an offset in solution space
|
// add an offset in solution space
|
||||||
for (int i = 0; i < x.length; i++) x[i] = x[i] - this.m_XOffSet;
|
for (int i = 0; i < x.length; i++) x[i] = x[i] - this.m_XOffSet;
|
||||||
|
return x;
|
||||||
// evaluate the vector
|
}
|
||||||
fitness = this.eval(x);
|
|
||||||
|
protected void setEvalFitness(AbstractEAIndividual individual, double[] x, double[] fit) {
|
||||||
// add noise to the fitness
|
super.setEvalFitness(individual, x, fit);
|
||||||
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);
|
|
||||||
|
|
||||||
if (this.m_UseTestConstraint) {
|
if (this.m_UseTestConstraint) {
|
||||||
if (x[0] < 1) individual.addConstraintViolation(1-x[0]);
|
if (x[0] < 1) individual.addConstraintViolation(1-x[0]);
|
||||||
}
|
}
|
||||||
if ((this.m_OverallBest == null) || (this.m_OverallBest.getFitness(0) > individual.getFitness(0))) {
|
if ((this.m_OverallBest == null) || (this.m_OverallBest.getFitness(0) > individual.getFitness(0))) {
|
||||||
this.m_OverallBest = (AbstractEAIndividual)individual.clone();
|
this.m_OverallBest = (AbstractEAIndividual)individual.clone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Ths method allows you to evaluate a simple bit string to determine the fitness
|
/** Ths method allows you to evaluate a simple bit string to determine the fitness
|
||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
@ -228,6 +188,6 @@ public class F1Problem extends AbstractProblemDouble implements Interface2DBorde
|
|||||||
}
|
}
|
||||||
|
|
||||||
public double[][] get2DBorder() {
|
public double[][] get2DBorder() {
|
||||||
return getDoubleRange();
|
return ((InterfaceDataTypeDouble)this.m_Template).getDoubleRange();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ public class F2Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
for (int i = 0; i < x.length-1; i++) {
|
for (int i = 0; i < x.length-1; i++) {
|
||||||
|
@ -40,7 +40,7 @@ public class F3Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
result[0] = 6*x.length;
|
result[0] = 6*x.length;
|
||||||
for (int i = 0; i < x.length-1; i++) {
|
for (int i = 0; i < x.length-1; i++) {
|
||||||
|
@ -71,7 +71,7 @@ public class F4Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
for (int i = 0; i < x.length-1; i++) {
|
for (int i = 0; i < x.length-1; i++) {
|
||||||
|
@ -71,7 +71,7 @@ public class F5Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
double tmp;
|
double tmp;
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
|
@ -59,7 +59,7 @@ public class F6Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
|
|
||||||
if (doRotation) {
|
if (doRotation) {
|
||||||
Matrix resVec = rotation.times(new Matrix(x, x.length));
|
Matrix resVec = rotation.times(new Matrix(x, x.length));
|
||||||
|
@ -83,7 +83,7 @@ public class F7Problem extends F1Problem implements java.io.Serializable {
|
|||||||
System.arraycopy(((InterfaceDataTypeDouble) individual).getDoubleData(), 0, x, 0, x.length);
|
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;
|
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++) {
|
for (int i = 0; i < fitness.length; i++) {
|
||||||
// add noise to the fitness
|
// add noise to the fitness
|
||||||
fitness[i] += RandomNumberGenerator.gaussianDouble(this.m_Noise);
|
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
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
if ((Math.floor(this.m_CurrentTimeStamp / this.m_t)%2) == 0) {
|
if ((Math.floor(this.m_CurrentTimeStamp / this.m_t)%2) == 0) {
|
||||||
|
@ -75,7 +75,7 @@ public class F8Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
double sum1 = 0, sum2 = 0, exp1, exp2;
|
double sum1 = 0, sum2 = 0, exp1, exp2;
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ public class F9Problem extends F1Problem implements java.io.Serializable {
|
|||||||
* @param x The n-dimensional input vector
|
* @param x The n-dimensional input vector
|
||||||
* @return The m-dimensional output vector.
|
* @return The m-dimensional output vector.
|
||||||
*/
|
*/
|
||||||
public double[] doEvaluation(double[] x) {
|
public double[] eval(double[] x) {
|
||||||
double[] result = new double[1];
|
double[] result = new double[1];
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
for (int i = 0; i < x.length; i++) {
|
for (int i = 0; i < x.length; i++) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user