Another small cleanup.
This commit is contained in:
parent
b472f17428
commit
cbc6992ac5
@ -90,7 +90,8 @@ public class TopoPlot extends Plot {
|
|||||||
ry = problem.get2DBorder()[1][0]+y*rh;
|
ry = problem.get2DBorder()[1][0]+y*rh;
|
||||||
pos[0] = rx; pos[1] = ry;
|
pos[0] = rx; pos[1] = ry;
|
||||||
DRectangle rect = new DRectangle(rx,ry,rw,rh);
|
DRectangle rect = new DRectangle(rx,ry,rw,rh);
|
||||||
Color color = new Color(colorBar.getRGB((float)((problem.functionValue(pos)-min)/fitRange))); // Color color = new Color(255,(int)(problem.doEvaluation(pos)[0]/fitRange*255),(int)(problem.doEvaluation(pos)[0]/fitRange*255));
|
Color color = new Color(colorBar.getRGB((float)((problem.functionValue(pos)-min)/fitRange)));
|
||||||
|
// Color color = new Color(255,(int)(problem.doEvaluation(pos)[0]/fitRange*255),(int)(problem.doEvaluation(pos)[0]/fitRange*255));
|
||||||
// Color color = new Color(colorBar.getRGB((float)(problem.functionValue(pos)/fitRange))); // Color color = new Color(255,(int)(problem.doEvaluation(pos)[0]/fitRange*255),(int)(problem.doEvaluation(pos)[0]/fitRange*255));
|
// Color color = new Color(colorBar.getRGB((float)(problem.functionValue(pos)/fitRange))); // Color color = new Color(255,(int)(problem.doEvaluation(pos)[0]/fitRange*255),(int)(problem.doEvaluation(pos)[0]/fitRange*255));
|
||||||
rect.setColor(color);
|
rect.setColor(color);
|
||||||
rect.setFillColor(color);
|
rect.setFillColor(color);
|
||||||
|
@ -15,6 +15,9 @@ public class CombinedTerminator implements InterfaceTerminator, Serializable {
|
|||||||
private InterfaceTerminator t2 = new EvaluationTerminator();
|
private InterfaceTerminator t2 = new EvaluationTerminator();
|
||||||
private SelectedTag andOrTag = new SelectedTag("OR", "AND");
|
private SelectedTag andOrTag = new SelectedTag("OR", "AND");
|
||||||
|
|
||||||
|
public static final boolean AND = true;
|
||||||
|
public static final boolean OR = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -105,12 +105,12 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati
|
|||||||
// public String getSolutionDataFor(IndividualInterface individual) {
|
// public String getSolutionDataFor(IndividualInterface individual) {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/** This method returns a string describing the optimization problem.
|
// /** This method returns a string describing the optimization problem.
|
||||||
* @return The description.
|
// * @return The description.
|
||||||
*/
|
// */
|
||||||
public String getStringRepresentation() {
|
// public String getStringRepresentationF() {
|
||||||
return "AbstractOptimizationProblem: programmer failed to give further details";
|
// return "AbstractOptimizationProblem: programmer failed to give further details";
|
||||||
}
|
// }
|
||||||
|
|
||||||
/** This method returns a double value that will be displayed in a fitness
|
/** This method returns a double value that will be displayed in a fitness
|
||||||
* plot. A fitness that is to be minimized with a global min of zero
|
* plot. A fitness that is to be minimized with a global min of zero
|
||||||
|
@ -225,7 +225,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
|||||||
double x[] = new double[getProblemDimension()];
|
double x[] = new double[getProblemDimension()];
|
||||||
for (int i=0; i<point.length; i++) x[i]=point[i];
|
for (int i=0; i<point.length; i++) x[i]=point[i];
|
||||||
for (int i=point.length; i<x.length; i++) x[i] = 0;
|
for (int i=point.length; i<x.length; i++) x[i] = 0;
|
||||||
return eval(x)[0];
|
return Math.sqrt(eval(x)[0]);
|
||||||
}
|
}
|
||||||
/**********************************************************************************************************************
|
/**********************************************************************************************************************
|
||||||
* These are for GUI
|
* These are for GUI
|
||||||
@ -254,7 +254,9 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
|||||||
*/
|
*/
|
||||||
public String getStringRepresentationForProblem(InterfaceOptimizer opt) {
|
public String getStringRepresentationForProblem(InterfaceOptimizer opt) {
|
||||||
StringBuffer sb = new StringBuffer(200);
|
StringBuffer sb = new StringBuffer(200);
|
||||||
sb.append("A double valued problem:\n");
|
sb.append("A double valued problem: ");
|
||||||
|
sb.append(this.getName());
|
||||||
|
sb.append("\n");
|
||||||
sb.append(globalInfo());
|
sb.append(globalInfo());
|
||||||
sb.append("Dimension : ");
|
sb.append("Dimension : ");
|
||||||
sb.append(this.getProblemDimension());
|
sb.append(this.getProblemDimension());
|
||||||
|
@ -2,25 +2,25 @@ package javaeva.server.go.problems;
|
|||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javaeva.gui.BeanInspector;
|
||||||
import javaeva.server.go.individuals.AbstractEAIndividual;
|
import javaeva.server.go.individuals.AbstractEAIndividual;
|
||||||
import javaeva.server.go.individuals.ESIndividualDoubleData;
|
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;
|
|
||||||
|
|
||||||
public class ExternalRuntimeProblem extends AbstractOptimizationProblem {
|
public class ExternalRuntimeProblem extends AbstractOptimizationProblem implements Interface2DBorderProblem {
|
||||||
|
|
||||||
protected AbstractEAIndividual m_OverallBest = null;
|
protected AbstractEAIndividual m_OverallBest = null;
|
||||||
protected int m_ProblemDimension = 10;
|
protected int m_ProblemDimension = 10;
|
||||||
protected boolean m_UseTestConstraint = false;
|
// protected boolean m_UseTestConstraint = false;
|
||||||
protected String m_Command = "";
|
protected String m_Command = "";
|
||||||
protected double defaultRange = 1;
|
protected double m_upperBound = 10;
|
||||||
|
protected double m_lowerBound = 0;
|
||||||
|
|
||||||
|
|
||||||
public ExternalRuntimeProblem() {
|
public ExternalRuntimeProblem() {
|
||||||
@ -36,7 +36,11 @@ public class ExternalRuntimeProblem extends AbstractOptimizationProblem {
|
|||||||
if (b.m_OverallBest != null)
|
if (b.m_OverallBest != null)
|
||||||
this.m_OverallBest = (AbstractEAIndividual)((AbstractEAIndividual)b.m_OverallBest).clone();
|
this.m_OverallBest = (AbstractEAIndividual)((AbstractEAIndividual)b.m_OverallBest).clone();
|
||||||
this.m_ProblemDimension = b.m_ProblemDimension;
|
this.m_ProblemDimension = b.m_ProblemDimension;
|
||||||
this.m_UseTestConstraint = b.m_UseTestConstraint;
|
// this.m_UseTestConstraint = b.m_UseTestConstraint;
|
||||||
|
m_Command = b.m_Command;
|
||||||
|
m_lowerBound = b.m_lowerBound;
|
||||||
|
m_upperBound = b.m_upperBound;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a deep clone of the problem.
|
/** This method returns a deep clone of the problem.
|
||||||
@ -85,45 +89,44 @@ public class ExternalRuntimeProblem extends AbstractOptimizationProblem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected double getRangeLowerBound(int dim) {
|
protected double getRangeLowerBound(int dim) {
|
||||||
return -defaultRange;
|
return m_lowerBound;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected double getRangeUpperBound(int dim) {
|
protected double getRangeUpperBound(int dim) {
|
||||||
return defaultRange;
|
return m_upperBound;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected double[][] getDoubleRange() {
|
protected double[][] getDoubleRange() {
|
||||||
return ((InterfaceDataTypeDouble)this.m_Template).getDoubleRange();
|
return ((InterfaceDataTypeDouble)this.m_Template).getDoubleRange();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method evaluates a given population and set the fitness values
|
|
||||||
* accordingly
|
|
||||||
* @param population The population that is to be evaluated.
|
|
||||||
*/
|
|
||||||
public void evaluate(Population population) {
|
|
||||||
AbstractEAIndividual tmpIndy;
|
|
||||||
//System.out.println("Population size: " + population.size());
|
|
||||||
for (int i = 0; i < population.size(); i++) {
|
|
||||||
tmpIndy = (AbstractEAIndividual) population.get(i);
|
|
||||||
tmpIndy.resetConstraintViolation();
|
|
||||||
this.evaluate(tmpIndy);
|
|
||||||
population.incrFunctionCalls();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** This method evaluate a single individual and sets the fitness values
|
/** This method evaluate a single individual and sets the fitness values
|
||||||
* @param individual The individual that is to be evalutated
|
* @param individual The individual that is to be evalutated
|
||||||
*/
|
*/
|
||||||
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 = new double[((InterfaceDataTypeDouble) individual).getDoubleData().length];
|
||||||
System.arraycopy(((InterfaceDataTypeDouble) individual).getDoubleData(), 0, x, 0, x.length);
|
System.arraycopy(((InterfaceDataTypeDouble) individual).getDoubleData(), 0, x, 0, x.length);
|
||||||
|
|
||||||
//TODO call external runtime
|
//TODO call external runtime
|
||||||
Process process;
|
double[] fit = eval(x);
|
||||||
|
individual.SetFitness(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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected double[] eval(double[] x) {
|
||||||
|
Process process;
|
||||||
ProcessBuilder pb;
|
ProcessBuilder pb;
|
||||||
|
|
||||||
|
ArrayList<Double> fitList = new ArrayList<Double>();
|
||||||
try {
|
try {
|
||||||
List<String> parameters=new ArrayList<String>();
|
List<String> parameters=new ArrayList<String>();
|
||||||
parameters.add(this.m_Command);
|
parameters.add(this.m_Command);
|
||||||
@ -132,40 +135,32 @@ public class ExternalRuntimeProblem extends AbstractOptimizationProblem {
|
|||||||
}
|
}
|
||||||
pb = new ProcessBuilder(parameters);
|
pb = new ProcessBuilder(parameters);
|
||||||
process=pb.start();
|
process=pb.start();
|
||||||
InputStream is = process.getInputStream();
|
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||||
InputStreamReader isr = new InputStreamReader(is);
|
|
||||||
BufferedReader br = new BufferedReader(isr);
|
|
||||||
String line;
|
String line;
|
||||||
int count=0;
|
|
||||||
while ((line = br.readLine()) != null) {
|
while ((line = br.readLine()) != null) {
|
||||||
individual.SetFitness(count,new Double(line));
|
line = line.trim();
|
||||||
count++;
|
if (line.contains(" ")) {
|
||||||
|
String[] parts = line.split(" ");
|
||||||
|
for (String str : parts) {
|
||||||
|
fitList.add(new Double(str));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fitList.add(new Double(line));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// TODO Auto-generated catch block
|
System.err.println("IO Error in ExternalRuntimeProblem!");
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.err.println("Error: " + m_Command + " delivered malformatted output for " + BeanInspector.toString(x));
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
double[] fit = new double[fitList.size()];
|
||||||
if (this.m_UseTestConstraint) {
|
for (int i=0; i<fit.length; i++) {
|
||||||
if (x[0] < 1) individual.addConstraintViolation(1-x[0]);
|
fit[i] = fitList.get(i);
|
||||||
}
|
}
|
||||||
if ((this.m_OverallBest == null) || (this.m_OverallBest.getFitness(0) > individual.getFitness(0))) {
|
return fit;
|
||||||
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
|
|
||||||
* @return The m-dimensional output vector.
|
|
||||||
*/
|
|
||||||
public double[] doEvaluation(double[] x) {
|
|
||||||
double[] result = new double[1];
|
|
||||||
result[0] = 0;
|
|
||||||
for (int i = 0; i < x.length; i++) {
|
|
||||||
result[0] += Math.pow(x[i], 2);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** This method returns a string describing the optimization problem.
|
/** This method returns a string describing the optimization problem.
|
||||||
* @param opt The Optimizer that is used or had been used.
|
* @param opt The Optimizer that is used or had been used.
|
||||||
@ -226,18 +221,18 @@ public class ExternalRuntimeProblem extends AbstractOptimizationProblem {
|
|||||||
return "Command";
|
return "Command";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method allows you to toggle the application of a simple test constraint.
|
// /** This method allows you to toggle the application of a simple test constraint.
|
||||||
* @param b The mode for the test constraint
|
// * @param b The mode for the test constraint
|
||||||
*/
|
// */
|
||||||
public void setUseTestConstraint(boolean b) {
|
// public void setUseTestConstraint(boolean b) {
|
||||||
this.m_UseTestConstraint = b;
|
// this.m_UseTestConstraint = b;
|
||||||
}
|
// }
|
||||||
public boolean getUseTestConstraint() {
|
// public boolean getUseTestConstraint() {
|
||||||
return this.m_UseTestConstraint;
|
// return this.m_UseTestConstraint;
|
||||||
}
|
// }
|
||||||
public String useTestConstraintTipText() {
|
// public String useTestConstraintTipText() {
|
||||||
return "Just a simple test constraint of x[0] >= 1.";
|
// return "Just a simple test constraint of x[0] >= 1.";
|
||||||
}
|
// }
|
||||||
|
|
||||||
/** This method allows you to choose the EA individual
|
/** This method allows you to choose the EA individual
|
||||||
* @param indy The EAIndividual type
|
* @param indy The EAIndividual type
|
||||||
@ -252,36 +247,43 @@ public class ExternalRuntimeProblem extends AbstractOptimizationProblem {
|
|||||||
double x[] = new double[m_ProblemDimension];
|
double x[] = new double[m_ProblemDimension];
|
||||||
for (int i=0; i<point.length; i++) x[i]=point[i];
|
for (int i=0; i<point.length; i++) x[i]=point[i];
|
||||||
for (int i=point.length; i<m_ProblemDimension; i++) x[i] = 0;
|
for (int i=point.length; i<m_ProblemDimension; i++) x[i] = 0;
|
||||||
return Math.sqrt(doEvaluation(x)[0]);
|
return eval(x)[0];
|
||||||
}
|
}
|
||||||
public double[][] get2DBorder() {
|
public double[][] get2DBorder() {
|
||||||
return getDoubleRange();
|
return getDoubleRange();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A (symmetric) absolute range limit.
|
* @return the m_upperBound
|
||||||
*
|
|
||||||
* @return value of the absolute range limit
|
|
||||||
*/
|
*/
|
||||||
public double getDefaultRange() {
|
public double getRangeUpperBound() {
|
||||||
return defaultRange;
|
return m_upperBound;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a (symmetric) absolute range limit.
|
* @param bound the m_upperBound to set
|
||||||
*
|
|
||||||
* @param defaultRange
|
|
||||||
*/
|
*/
|
||||||
public void setDefaultRange(double defaultRange) {
|
public void setRangeUpperBound(double bound) {
|
||||||
this.defaultRange = defaultRange;
|
m_upperBound = bound;
|
||||||
if (((InterfaceDataTypeDouble)this.m_Template).getDoubleData().length != m_ProblemDimension) {
|
|
||||||
((InterfaceDataTypeDouble)this.m_Template).setDoubleDataLength(m_ProblemDimension);
|
|
||||||
}
|
|
||||||
((InterfaceDataTypeDouble)this.m_Template).SetDoubleRange(makeRange());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String defaultRangeTipText() {
|
public String rangeUpperBoundTipText() {
|
||||||
return "Absolute limit for the symmetric range in any dimension (not used for all f-problems)";
|
return "Upper bound of the search space in any dimension.";
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return the m_lowerBound
|
||||||
|
*/
|
||||||
|
public double getRangeLowerBound() {
|
||||||
|
return m_lowerBound;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param bound the m_lowerBound to set
|
||||||
|
*/
|
||||||
|
public void setRangeLowerBound(double bound) {
|
||||||
|
m_lowerBound = bound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String rangeLowerBoundTipText() {
|
||||||
|
return "Lower bound of the search space in any dimension.";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,9 @@
|
|||||||
package javaeva.server.go.problems;
|
package javaeva.server.go.problems;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javaeva.server.go.PopulationInterface;
|
|
||||||
import javaeva.server.go.individuals.AbstractEAIndividual;
|
|
||||||
import javaeva.server.go.individuals.ESIndividualDoubleData;
|
import javaeva.server.go.individuals.ESIndividualDoubleData;
|
||||||
import javaeva.server.go.individuals.InterfaceDataTypeDouble;
|
import javaeva.server.go.strategies.InterfaceOptimizer;
|
||||||
import javaeva.server.go.operators.postprocess.PostProcess;
|
|
||||||
import javaeva.server.go.populations.Population;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by IntelliJ IDEA.
|
* Created by IntelliJ IDEA.
|
||||||
@ -17,7 +12,7 @@ import javaeva.server.go.populations.Population;
|
|||||||
* Time: 11:10:43
|
* Time: 11:10:43
|
||||||
* To change this template use Options | File Templates.
|
* To change this template use Options | File Templates.
|
||||||
*/
|
*/
|
||||||
public class FM0Problem extends AbstractMultiModalProblemKnown implements Interface2DBorderProblem, InterfaceMultimodalProblemKnown, Serializable {
|
public class FM0Problem extends AbstractMultiModalProblemKnown implements InterfaceOptimizationProblem, Interface2DBorderProblem, InterfaceMultimodalProblemKnown, Serializable {
|
||||||
|
|
||||||
public FM0Problem() {
|
public FM0Problem() {
|
||||||
this.m_ProblemDimension = 2;
|
this.m_ProblemDimension = 2;
|
||||||
@ -62,22 +57,6 @@ public class FM0Problem extends AbstractMultiModalProblemKnown implements Interf
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string describing the optimization problem.
|
|
||||||
* @return The description.
|
|
||||||
*/
|
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "";
|
|
||||||
|
|
||||||
result += "M0 function:\n";
|
|
||||||
result += "This problem has one global and one local optimum.\n";
|
|
||||||
result += "Parameters:\n";
|
|
||||||
result += "Dimension : " + this.m_ProblemDimension +"\n";
|
|
||||||
result += "Noise level : " + this.getNoise() + "\n";
|
|
||||||
result += "Solution representation:\n";
|
|
||||||
//result += this.m_Template.getSolutionRepresentationFor();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** This method will prepare the problem to return a list of all optima
|
/** This method will prepare the problem to return a list of all optima
|
||||||
* if possible and to return quality measures like NumberOfOptimaFound and
|
* if possible and to return quality measures like NumberOfOptimaFound and
|
||||||
* the MaximumPeakRatio. This method should be called by the user.
|
* the MaximumPeakRatio. This method should be called by the user.
|
||||||
@ -107,6 +86,6 @@ public class FM0Problem extends AbstractMultiModalProblemKnown implements Interf
|
|||||||
* @return description
|
* @return description
|
||||||
*/
|
*/
|
||||||
public String globalInfo() {
|
public String globalInfo() {
|
||||||
return "M0(x) = sin(2*x - 0.5*PI) + 1 + 2*cos(y) + 0.5*x is to be maximized.";
|
return "M0(x) = sin(2*x - 0.5*PI) + 1 + 2*cos(y) + 0.5*x is to be maximized, two optima.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,9 +237,7 @@ public class PSymbolicRegression extends AbstractOptimizationProblem implements
|
|||||||
* @return The description.
|
* @return The description.
|
||||||
*/
|
*/
|
||||||
public String getStringRepresentationForProblem(InterfaceOptimizer opt) {
|
public String getStringRepresentationForProblem(InterfaceOptimizer opt) {
|
||||||
String result = "";
|
String result = "Symbolic Regression Problem";
|
||||||
|
|
||||||
result += "Symbolic Regression Problem:\n";
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user