From cbc6992ac5dedd89774541e93d6edc37158ea598 Mon Sep 17 00:00:00 2001 From: Marcel Kronfeld Date: Thu, 20 Mar 2008 12:44:58 +0000 Subject: [PATCH] Another small cleanup. --- src/javaeva/gui/TopoPlot.java | 3 +- .../terminators/CombinedTerminator.java | 3 + .../problems/AbstractOptimizationProblem.java | 12 +- .../go/problems/AbstractProblemDouble.java | 6 +- .../go/problems/ExternalRuntimeProblem.java | 168 +++++++++--------- .../server/go/problems/FM0Problem.java | 27 +-- .../go/problems/PSymbolicRegression.java | 4 +- 7 files changed, 104 insertions(+), 119 deletions(-) diff --git a/src/javaeva/gui/TopoPlot.java b/src/javaeva/gui/TopoPlot.java index 39b7f114..6b123155 100644 --- a/src/javaeva/gui/TopoPlot.java +++ b/src/javaeva/gui/TopoPlot.java @@ -90,7 +90,8 @@ public class TopoPlot extends Plot { ry = problem.get2DBorder()[1][0]+y*rh; pos[0] = rx; pos[1] = ry; 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)); rect.setColor(color); rect.setFillColor(color); diff --git a/src/javaeva/server/go/operators/terminators/CombinedTerminator.java b/src/javaeva/server/go/operators/terminators/CombinedTerminator.java index 6a7330a7..a6d07246 100644 --- a/src/javaeva/server/go/operators/terminators/CombinedTerminator.java +++ b/src/javaeva/server/go/operators/terminators/CombinedTerminator.java @@ -15,6 +15,9 @@ public class CombinedTerminator implements InterfaceTerminator, Serializable { private InterfaceTerminator t2 = new EvaluationTerminator(); private SelectedTag andOrTag = new SelectedTag("OR", "AND"); + public static final boolean AND = true; + public static final boolean OR = false; + /** * */ diff --git a/src/javaeva/server/go/problems/AbstractOptimizationProblem.java b/src/javaeva/server/go/problems/AbstractOptimizationProblem.java index f06f5acf..c791d631 100644 --- a/src/javaeva/server/go/problems/AbstractOptimizationProblem.java +++ b/src/javaeva/server/go/problems/AbstractOptimizationProblem.java @@ -105,12 +105,12 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati // public String getSolutionDataFor(IndividualInterface individual) { // } - /** This method returns a string describing the optimization problem. - * @return The description. - */ - public String getStringRepresentation() { - return "AbstractOptimizationProblem: programmer failed to give further details"; - } +// /** This method returns a string describing the optimization problem. +// * @return The description. +// */ +// public String getStringRepresentationF() { +// return "AbstractOptimizationProblem: programmer failed to give further details"; +// } /** 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 diff --git a/src/javaeva/server/go/problems/AbstractProblemDouble.java b/src/javaeva/server/go/problems/AbstractProblemDouble.java index 3ec429fe..41443c4e 100644 --- a/src/javaeva/server/go/problems/AbstractProblemDouble.java +++ b/src/javaeva/server/go/problems/AbstractProblemDouble.java @@ -225,7 +225,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem double x[] = new double[getProblemDimension()]; for (int i=0; i individual.getFitness(0))) { + this.m_OverallBest = (AbstractEAIndividual)individual.clone(); + } + } + + protected double[] eval(double[] x) { + Process process; ProcessBuilder pb; + + ArrayList fitList = new ArrayList(); try { List parameters=new ArrayList(); parameters.add(this.m_Command); @@ -132,40 +135,32 @@ public class ExternalRuntimeProblem extends AbstractOptimizationProblem { } pb = new ProcessBuilder(parameters); process=pb.start(); - InputStream is = process.getInputStream(); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); + BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; - int count=0; while ((line = br.readLine()) != null) { - individual.SetFitness(count,new Double(line)); - count++; + line = line.trim(); + 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) { - // 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(); } - - 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 - * @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; - } + double[] fit = new double[fitList.size()]; + for (int i=0; i= 1."; - } +// /** This method allows you to toggle the application of a simple test constraint. +// * @param b The mode for the test constraint +// */ +// public void setUseTestConstraint(boolean b) { +// this.m_UseTestConstraint = b; +// } +// public boolean getUseTestConstraint() { +// return this.m_UseTestConstraint; +// } +// public String useTestConstraintTipText() { +// return "Just a simple test constraint of x[0] >= 1."; +// } /** This method allows you to choose the EA individual * @param indy The EAIndividual type @@ -252,36 +247,43 @@ public class ExternalRuntimeProblem extends AbstractOptimizationProblem { double x[] = new double[m_ProblemDimension]; for (int i=0; i