From 1b8b77c52f8f9214294f8a6a853181b4ccd21278 Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Wed, 5 Nov 2014 22:31:28 +0100 Subject: [PATCH] Remove SelectedTag in StatisticsParameters refs #32 --- src/eva2/OptimizerRunnable.java | 10 +--- .../operator/postprocess/PostProcess.java | 3 +- .../statistics/AbstractStatistics.java | 23 ++++---- .../InterfaceStatisticsParameters.java | 37 ++++++++++-- .../statistics/StatisticsDummy.java | 4 +- .../statistics/StatisticsParameters.java | 58 +++++++------------ .../statistics/StatisticsStandalone.java | 12 ++-- src/eva2/problems/ERPStarter.java | 3 +- src/eva2/problems/MatlabProblem.java | 19 ++---- src/eva2/problems/WaitForEvARunnable.java | 3 +- 10 files changed, 87 insertions(+), 85 deletions(-) diff --git a/src/eva2/OptimizerRunnable.java b/src/eva2/OptimizerRunnable.java index 1d5252de..7e6c56bd 100644 --- a/src/eva2/OptimizerRunnable.java +++ b/src/eva2/OptimizerRunnable.java @@ -254,12 +254,8 @@ public class OptimizerRunnable implements Runnable { * * @param vLev */ - public void setVerbosityLevel(int vLev) { - if (vLev >= 0 && vLev < proc.getStatistics().getStatisticsParameter().getOutputVerbosity().getTags().length) { - proc.getStatistics().getStatisticsParameter().getOutputVerbosity().setSelectedTag(vLev); - } else { - System.err.println("Invalid verbosity leveln in OptimizerRunnable.setVerbosityLevel!"); - } + public void setVerbosityLevel(InterfaceStatisticsParameters.OutputVerbosity vLev) { + proc.getStatistics().getStatisticsParameter().setOutputVerbosity(vLev); } /** @@ -267,7 +263,7 @@ public class OptimizerRunnable implements Runnable { * * @param outp */ - public void setOutputTo(int outp) { + public void setOutputTo(InterfaceStatisticsParameters.OutputTo outp) { ((StatisticsParameters) proc.getStatistics().getStatisticsParameter()).setOutputTo(outp); } diff --git a/src/eva2/optimization/operator/postprocess/PostProcess.java b/src/eva2/optimization/operator/postprocess/PostProcess.java index a4f023eb..e53c6a4b 100644 --- a/src/eva2/optimization/operator/postprocess/PostProcess.java +++ b/src/eva2/optimization/operator/postprocess/PostProcess.java @@ -23,6 +23,7 @@ import eva2.optimization.operator.selection.SelectBestIndividuals; import eva2.optimization.operator.terminators.EvaluationTerminator; import eva2.optimization.operator.terminators.InterfaceTerminator; import eva2.optimization.population.Population; +import eva2.optimization.statistics.InterfaceStatisticsParameters; import eva2.optimization.statistics.StatisticsParameters; import eva2.problems.*; import eva2.optimization.statistics.InterfaceTextListener; @@ -814,7 +815,7 @@ public class PostProcess { */ private static void runPP(OptimizerRunnable rnbl) { rnbl.getOptimizationParameters().setDoPostProcessing(false); - rnbl.setVerbosityLevel(StatisticsParameters.VERBOSITY_NONE); + rnbl.setVerbosityLevel(InterfaceStatisticsParameters.OutputVerbosity.NONE); ppRunnables.add(rnbl); rnbl.run(); rnbl.getOptimizationParameters().setDoPostProcessing(true); diff --git a/src/eva2/optimization/statistics/AbstractStatistics.java b/src/eva2/optimization/statistics/AbstractStatistics.java index bc2e7d6a..8773f318 100644 --- a/src/eva2/optimization/statistics/AbstractStatistics.java +++ b/src/eva2/optimization/statistics/AbstractStatistics.java @@ -200,7 +200,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter String startDate = getDateString(); // open the result file: if (doFileOutput() // not "text-window only" - && (statisticsParameter.getOutputVerbosity().getSelectedTagID() > StatisticsParameters.VERBOSITY_NONE)) { // verbosity accordingly high + && (statisticsParameter.getOutputVerbosity() != InterfaceStatisticsParameters.OutputVerbosity.NONE)) { // verbosity accordingly high //!resFName.equalsIgnoreCase("none") && !resFName.equals("")) { String fnameBase = makeOutputFileName(statisticsParameter.getResultFilePrefix(), infoString, startDate); int cnt = 0; @@ -233,7 +233,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter } protected boolean doFileOutput() { - return (statisticsParameter.getOutputTo().getSelectedTagID() != 1); // not "text-window only" + return (statisticsParameter.getOutputTo() != InterfaceStatisticsParameters.OutputTo.WINDOW); // not "text-window only" } private String makeOutputFileName(String prefix, String infoString, String startDate) { @@ -648,7 +648,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter resultOut.print(s); } for (InterfaceTextListener l : textListeners) { - if (statisticsParameter.getOutputTo().getSelectedTagID() >= 1) { + if (statisticsParameter.getOutputTo() != InterfaceStatisticsParameters.OutputTo.FILE) { l.print(s); } } @@ -1205,22 +1205,24 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter * @return */ private boolean printLineByVerbosity(int iteration) { - return (statisticsParameter.getOutputVerbosity().getSelectedTagID() > StatisticsParameters.VERBOSITY_KTH_IT) - || ((statisticsParameter.getOutputVerbosity().getSelectedTagID() == StatisticsParameters.VERBOSITY_KTH_IT) + return (statisticsParameter.getOutputVerbosity() == InterfaceStatisticsParameters.OutputVerbosity.ALL) + || ((statisticsParameter.getOutputVerbosity() == InterfaceStatisticsParameters.OutputVerbosity.KTH_IT) && (isKthRun(iteration, statisticsParameter.getOutputVerbosityK()))); } private boolean printRunIntroVerbosity() { - return (statisticsParameter.getOutputVerbosity().getSelectedTagID() >= StatisticsParameters.VERBOSITY_KTH_IT) - || (optRunsPerformed == 0 && (statisticsParameter.getOutputVerbosity().getSelectedTagID() >= StatisticsParameters.VERBOSITY_FINAL)); + return (statisticsParameter.getOutputVerbosity() == InterfaceStatisticsParameters.OutputVerbosity.ALL) || + (statisticsParameter.getOutputVerbosity() == InterfaceStatisticsParameters.OutputVerbosity.KTH_IT) + || (optRunsPerformed == 0 && (statisticsParameter.getOutputVerbosity() != InterfaceStatisticsParameters.OutputVerbosity.NONE)); } private boolean printRunStoppedVerbosity() { - return (statisticsParameter.getOutputVerbosity().getSelectedTagID() >= StatisticsParameters.VERBOSITY_KTH_IT); + return statisticsParameter.getOutputVerbosity() == InterfaceStatisticsParameters.OutputVerbosity.KTH_IT || + statisticsParameter.getOutputVerbosity() == InterfaceStatisticsParameters.OutputVerbosity.ALL; } private boolean printFinalVerbosity() { - return (statisticsParameter.getOutputVerbosity().getSelectedTagID() > StatisticsParameters.VERBOSITY_NONE); + return (statisticsParameter.getOutputVerbosity() != InterfaceStatisticsParameters.OutputVerbosity.NONE); } private boolean isKthRun(int i, int k) { @@ -1240,7 +1242,8 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter } private boolean printHeaderByVerbosity() { - return (statisticsParameter.getOutputVerbosity().getSelectedTagID() >= StatisticsParameters.VERBOSITY_KTH_IT); + return (statisticsParameter.getOutputVerbosity() == InterfaceStatisticsParameters.OutputVerbosity.ALL) || + (statisticsParameter.getOutputVerbosity() == InterfaceStatisticsParameters.OutputVerbosity.KTH_IT); } private static void divideMean(Double[] mean, double d) { diff --git a/src/eva2/optimization/statistics/InterfaceStatisticsParameters.java b/src/eva2/optimization/statistics/InterfaceStatisticsParameters.java index 1d0d616c..2f15f556 100644 --- a/src/eva2/optimization/statistics/InterfaceStatisticsParameters.java +++ b/src/eva2/optimization/statistics/InterfaceStatisticsParameters.java @@ -1,6 +1,5 @@ package eva2.optimization.statistics; -import eva2.tools.SelectedTag; import eva2.tools.StringSelection; /** @@ -51,15 +50,43 @@ public interface InterfaceStatisticsParameters { void setOutputAllFieldsAsText(boolean bShowFullText); - void setOutputVerbosity(SelectedTag sTag); + void setOutputVerbosity(OutputVerbosity sTag); - SelectedTag getOutputVerbosity(); + OutputVerbosity getOutputVerbosity(); int getOutputVerbosityK(); void setOutputVerbosityK(int k); - void setOutputTo(SelectedTag sTag); + void setOutputTo(OutputTo sTag); - SelectedTag getOutputTo(); + OutputTo getOutputTo(); + + public enum OutputVerbosity { + NONE, FINAL, KTH_IT, ALL; + + @Override + public String toString() { + switch (this) { + case NONE: return "No output"; + case FINAL: return "Final Results"; + case KTH_IT: return "K-th iterations"; + case ALL: return "All iterations"; + default: return this.name(); + } + } + } + + public enum OutputTo { + FILE, WINDOW, BOTH; + + public String toString() { + switch (this) { + case FILE: return "File (current dir.)"; + case WINDOW: return "Text-window"; + case BOTH: return "Both file and text-window"; + default: return name(); + } + } + } } \ No newline at end of file diff --git a/src/eva2/optimization/statistics/StatisticsDummy.java b/src/eva2/optimization/statistics/StatisticsDummy.java index 661026bb..0da44cd8 100644 --- a/src/eva2/optimization/statistics/StatisticsDummy.java +++ b/src/eva2/optimization/statistics/StatisticsDummy.java @@ -21,13 +21,13 @@ public class StatisticsDummy implements InterfaceStatistics, InterfaceTextListen public StatisticsDummy() { bestIndividualAllover = null; sParams = new StatisticsParameters(); - sParams.setOutputVerbosityK(StatisticsParameters.VERBOSITY_NONE); + sParams.setOutputVerbosityK(0); } public StatisticsDummy(boolean doConsoleOut) { bestIndividualAllover = null; sParams = new StatisticsParameters(); - sParams.setOutputVerbosityK(StatisticsParameters.VERBOSITY_NONE); + sParams.setOutputVerbosityK(0); consoleOut = doConsoleOut; } diff --git a/src/eva2/optimization/statistics/StatisticsParameters.java b/src/eva2/optimization/statistics/StatisticsParameters.java index 94820b86..109e7670 100644 --- a/src/eva2/optimization/statistics/StatisticsParameters.java +++ b/src/eva2/optimization/statistics/StatisticsParameters.java @@ -33,15 +33,9 @@ import java.util.logging.Logger; @Description(value = "Configure statistics and output of the optimization run. Changes to the data selection state will not take effect during a run.") public class StatisticsParameters implements InterfaceStatisticsParameters, InterfaceNotifyOnInformers, Serializable { private static final Logger LOGGER = Logger.getLogger(StatisticsParameters.class.getName()); - public final static int VERBOSITY_NONE = 0; - public final static int VERBOSITY_FINAL = 1; - public final static int VERBOSITY_KTH_IT = 2; - public final static int VERBOSITY_ALL = 3; - SelectedTag outputVerbosity = new SelectedTag("No output", "Final results", "K-th iterations", "All iterations"); - public final static int OUTPUT_FILE = 0; - public final static int OUTPUT_WINDOW = 1; - public final static int OUTPUT_FILE_WINDOW = 2; - SelectedTag outputTo = new SelectedTag("File (current dir.)", "Text-window", "Both file and text-window"); + + private OutputVerbosity outputVerbosity; + private OutputTo outputTo; private int verbosityK = 10; private int textOutput = 0; private int multiRuns = 1; @@ -88,8 +82,9 @@ public class StatisticsParameters implements InterfaceStatisticsParameters, Inte */ public StatisticsParameters() { name = "Statistics"; - outputVerbosity.setSelectedTag(VERBOSITY_KTH_IT); - outputTo.setSelectedTag(1); + + outputVerbosity = OutputVerbosity.KTH_IT; + outputTo = OutputTo.WINDOW; } /** @@ -99,8 +94,8 @@ public class StatisticsParameters implements InterfaceStatisticsParameters, Inte public String toString() { String ret = "\r\nStatisticsParameter (" + super.toString() + "):\r\nmultiRuns=" + multiRuns + ", textOutput=" + textOutput - + ", verbosity= " + outputVerbosity.getSelectedString() - + "\nTo " + outputTo.getSelectedString() + + ", verbosity= " + outputVerbosity + + "\nTo " + outputTo + ", " + BeanInspector.toString(graphSel.getStrings()); return ret; } @@ -202,17 +197,17 @@ public class StatisticsParameters implements InterfaceStatisticsParameters, Inte @Override public void setShowTextOutput(boolean show) { // activate if not activated - if (show && outputTo.getSelectedTagID() == 0) { - outputTo.setSelectedTag(2); + if (show && outputTo == OutputTo.FILE) { + outputTo = OutputTo.BOTH; } // deactivate if activated - else if (!show && outputTo.getSelectedTagID() > 0) { - outputTo.setSelectedTag(0); + else if (!show) { + outputTo = OutputTo.FILE; } } @Override public boolean isShowTextOutput() { - return outputTo.getSelectedTagID() > 0; + return outputTo == OutputTo.WINDOW || outputTo == OutputTo.BOTH; } /** @@ -248,25 +243,17 @@ public class StatisticsParameters implements InterfaceStatisticsParameters, Inte } @Override - public void setOutputVerbosity(SelectedTag sTag) { + @Parameter(description = "Set the data output level.") + public void setOutputVerbosity(OutputVerbosity sTag) { outputVerbosity = sTag; - GenericObjectEditor.setHideProperty(this.getClass(), "outputVerbosityK", sTag.getSelectedTagID() != VERBOSITY_KTH_IT); - } - - public void setOutputVerbosity(int i) { - outputVerbosity.setSelectedTag(i); - GenericObjectEditor.setHideProperty(this.getClass(), "outputVerbosityK", outputVerbosity.getSelectedTagID() != VERBOSITY_KTH_IT); + GenericObjectEditor.setHideProperty(this.getClass(), "outputVerbosityK", sTag != OutputVerbosity.KTH_IT); } @Override - public SelectedTag getOutputVerbosity() { + public OutputVerbosity getOutputVerbosity() { return outputVerbosity; } - public String outputVerbosityTipText() { - return "Set the data output level."; - } - @Override public int getOutputVerbosityK() { return verbosityK; @@ -279,21 +266,16 @@ public class StatisticsParameters implements InterfaceStatisticsParameters, Inte } @Override - public SelectedTag getOutputTo() { + public OutputTo getOutputTo() { return outputTo; } @Override - public void setOutputTo(SelectedTag tag) { + @Parameter(description = "Set the output destination; to deactivate output, set verbosity to none.") + public void setOutputTo(OutputTo tag) { outputTo = tag; } - @Parameter(description = "Set the output destination; to deactivate output, set verbosity to none.") - public void setOutputTo(int i) { - outputTo.setSelectedTag(i); - } - - @Override public StringSelection getFieldSelection() { return graphSel; diff --git a/src/eva2/optimization/statistics/StatisticsStandalone.java b/src/eva2/optimization/statistics/StatisticsStandalone.java index 4ff70af2..78e31110 100644 --- a/src/eva2/optimization/statistics/StatisticsStandalone.java +++ b/src/eva2/optimization/statistics/StatisticsStandalone.java @@ -17,8 +17,6 @@ import java.util.List; * @see AbstractStatistics */ public class StatisticsStandalone extends AbstractStatistics implements InterfaceStatistics, Serializable { - private static final long serialVersionUID = -8451652609212653368L; - private ArrayList> resultData = null; private ArrayList resultHeaderStrings = null; private boolean collectData = false; @@ -30,19 +28,19 @@ public class StatisticsStandalone extends AbstractStatistics implements Interfac } public StatisticsStandalone(String resultFileName) { - this(resultFileName, 1, resultFileName == null ? StatisticsParameters.VERBOSITY_NONE : StatisticsParameters.VERBOSITY_FINAL, false); + this(resultFileName, 1, resultFileName == null ? InterfaceStatisticsParameters.OutputVerbosity.NONE : InterfaceStatisticsParameters.OutputVerbosity.FINAL, false); } - public StatisticsStandalone(String resultFileName, int multiRuns, int verbosity, boolean outputAllFieldsAsText) { + public StatisticsStandalone(String resultFileName, int multiRuns, InterfaceStatisticsParameters.OutputVerbosity verbosity, boolean outputAllFieldsAsText) { this(StatisticsParameters.getInstance(false)); statisticsParameter.setMultiRuns(multiRuns); - statisticsParameter.setOutputVerbosity(statisticsParameter.getOutputVerbosity().setSelectedTag(verbosity)); + statisticsParameter.setOutputVerbosity(verbosity); statisticsParameter.setResultFilePrefix(resultFileName); statisticsParameter.setOutputAllFieldsAsText(outputAllFieldsAsText); if (resultFileName == null) { - statisticsParameter.getOutputTo().setSelectedTag(StatisticsParameters.OUTPUT_WINDOW); + statisticsParameter.setOutputTo(InterfaceStatisticsParameters.OutputTo.WINDOW); } else { - statisticsParameter.setOutputTo(statisticsParameter.getOutputTo().setSelectedTag(StatisticsParameters.OUTPUT_FILE)); + statisticsParameter.setOutputTo(InterfaceStatisticsParameters.OutputTo.FILE); } } diff --git a/src/eva2/problems/ERPStarter.java b/src/eva2/problems/ERPStarter.java index 4f4bc29b..35daf8e6 100644 --- a/src/eva2/problems/ERPStarter.java +++ b/src/eva2/problems/ERPStarter.java @@ -14,6 +14,7 @@ import eva2.optimization.operator.selection.SelectBestIndividuals; import eva2.optimization.operator.terminators.EvaluationTerminator; import eva2.optimization.population.InterfaceSolutionSet; import eva2.optimization.population.Population; +import eva2.optimization.statistics.InterfaceStatisticsParameters; import eva2.optimization.statistics.StatisticsStandalone; import eva2.optimization.strategies.GeneticAlgorithm; import eva2.optimization.strategies.InterfaceOptimizer; @@ -88,7 +89,7 @@ public class ERPStarter { if (startGUI) { Main.initClientGUI(params, null, null, null); } else { - OptimizerRunnable rnbl = new OptimizerRunnable(params, new StatisticsStandalone(outputFilePrefix, 1, 3, true), false); + OptimizerRunnable rnbl = new OptimizerRunnable(params, new StatisticsStandalone(outputFilePrefix, 1, InterfaceStatisticsParameters.OutputVerbosity.ALL, true), false); // actually start the optimization OptimizerFactory.optimize(rnbl); diff --git a/src/eva2/problems/MatlabProblem.java b/src/eva2/problems/MatlabProblem.java index 88a2f583..fc4166cb 100644 --- a/src/eva2/problems/MatlabProblem.java +++ b/src/eva2/problems/MatlabProblem.java @@ -13,6 +13,7 @@ import eva2.optimization.operator.terminators.PopulationMeasureTerminator.Change import eva2.optimization.operator.terminators.PopulationMeasureTerminator.DirectionTypeEnum; import eva2.optimization.operator.terminators.PopulationMeasureTerminator.StagnationTypeEnum; import eva2.optimization.population.Population; +import eva2.optimization.statistics.InterfaceStatisticsParameters; import eva2.optimization.statistics.InterfaceTextListener; import eva2.optimization.strategies.InterfaceOptimizer; import eva2.util.annotation.Description; @@ -40,7 +41,7 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf transient PrintStream dos = null; private double range[][] = null; private static String defTestOut = "matlabproblem-debug.log"; - int verbosityLevel = 0; + InterfaceStatisticsParameters.OutputVerbosity verbosityLevel = InterfaceStatisticsParameters.OutputVerbosity.NONE; boolean outputAllStatsField = true; private MatlabEvalMediator handler = null; private MatlabProblemDataTypeEnum dataType = MatlabProblemDataTypeEnum.typeDouble; @@ -216,14 +217,6 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf } } - public void setStatsOutput(int verboLevel) { - if ((verboLevel >= 0) && (verboLevel <= 3)) { - verbosityLevel = verboLevel; - } else { - System.err.println("Error, invalid verbosity level for statistics output!"); - } - } - public String jmiInterfaceNameTipText() { return "Name of the JEInterface instance in Matlab"; } @@ -322,11 +315,11 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf log("Setting text listener, verbo " + verbosityLevel + "\n"); runnable.setTextListener(this); runnable.setVerbosityLevel(verbosityLevel); - if (verbosityLevel > 0) { - runnable.setOutputTo(2); + if (verbosityLevel != InterfaceStatisticsParameters.OutputVerbosity.NONE) { + runnable.setOutputTo(InterfaceStatisticsParameters.OutputTo.BOTH); } // both file + window else { - runnable.setOutputTo(1); + runnable.setOutputTo(InterfaceStatisticsParameters.OutputTo.WINDOW); } // only window runnable.setOutputFullStatsToText(outputAllStatsField); @@ -535,7 +528,7 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf @Override public void print(String str) { - if (verbosityLevel > 0) { + if (verbosityLevel != InterfaceStatisticsParameters.OutputVerbosity.NONE) { // matlab displays sysout output in the command window, so we simply use this channel System.out.print(str); } diff --git a/src/eva2/problems/WaitForEvARunnable.java b/src/eva2/problems/WaitForEvARunnable.java index 57c37cf7..6e70ce1b 100644 --- a/src/eva2/problems/WaitForEvARunnable.java +++ b/src/eva2/problems/WaitForEvARunnable.java @@ -3,6 +3,7 @@ package eva2.problems; import eva2.OptimizerRunnable; import eva2.gui.BeanInspector; import eva2.optimization.individuals.AbstractEAIndividual; +import eva2.optimization.statistics.InterfaceStatisticsParameters; import java.io.PrintWriter; import java.io.StringWriter; @@ -45,7 +46,7 @@ final class WaitForEvARunnable implements Runnable { mp.log("reported results.\n"); mp.notifyFinished(); mp.log("notified finish.\n"); - if (mp.verbosityLevel > 0) { + if (mp.verbosityLevel != InterfaceStatisticsParameters.OutputVerbosity.NONE) { System.out.println("Optimization finished: " + mp.getInfoString()); } } catch (Exception e) {