From efe1a1188bd757e3fa7ea30d07c7b7828559b4b2 Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Tue, 4 Nov 2014 16:33:55 +0100 Subject: [PATCH] Stuff. --- src/eva2/cli/Main.java | 10 ++++- src/eva2/cli/OptimizationBuilder.java | 20 ++++++--- src/eva2/cli/OptimizationLogger.java | 45 +++++++++++++++++++ .../statistics/AbstractStatistics.java | 6 +-- .../statistics/StatisticsStandalone.java | 6 +-- .../statistics/StatisticsWithGUI.java | 14 +++--- 6 files changed, 81 insertions(+), 20 deletions(-) create mode 100644 src/eva2/cli/OptimizationLogger.java diff --git a/src/eva2/cli/Main.java b/src/eva2/cli/Main.java index 4d2e3308..502a8b1b 100644 --- a/src/eva2/cli/Main.java +++ b/src/eva2/cli/Main.java @@ -1,6 +1,9 @@ package eva2.cli; +import eva2.OptimizerFactory; import eva2.optimization.go.InterfaceOptimizationParameters; +import eva2.optimization.modules.OptimizationParameters; +import eva2.optimization.statistics.InterfaceStatisticsParameters; /** * Created by becker on 01.11.2014. @@ -8,7 +11,12 @@ import eva2.optimization.go.InterfaceOptimizationParameters; public class Main { public static void main(String[] args) { - InterfaceOptimizationParameters parameters = OptimizationBuilder.parseArguments(args); + InterfaceOptimizationParameters parameters = OptimizationBuilder.parseOptimizerArguments(args); + InterfaceStatisticsParameters statisticsParameters = OptimizationBuilder.parseStatisticsArguments(args); + + + double[] result = OptimizerFactory.optimizeToDouble((OptimizationParameters)parameters); + } diff --git a/src/eva2/cli/OptimizationBuilder.java b/src/eva2/cli/OptimizationBuilder.java index fa4868c0..165e8416 100644 --- a/src/eva2/cli/OptimizationBuilder.java +++ b/src/eva2/cli/OptimizationBuilder.java @@ -3,6 +3,8 @@ package eva2.cli; import eva2.gui.BeanInspector; import eva2.optimization.go.InterfaceOptimizationParameters; import eva2.optimization.modules.OptimizationParameters; +import eva2.optimization.statistics.InterfaceStatisticsParameters; +import eva2.optimization.statistics.StatisticsParameters; import eva2.tools.ReflectPackage; import eva2.util.annotation.Hidden; import eva2.util.annotation.Parameter; @@ -50,18 +52,26 @@ class ArgumentTree extends LinkedHashMap { public final class OptimizationBuilder { private OptimizationBuilder() {} - public static InterfaceOptimizationParameters parseArguments(String[] args) { + public static InterfaceOptimizationParameters parseOptimizerArguments(String[] args) { + ArgumentTree argumentTree = parseArguments(args); + return constructFromArgumentTree(OptimizationParameters.class, argumentTree); + } + + public static InterfaceStatisticsParameters parseStatisticsArguments(String[] args) { + ArgumentTree argumentTree = parseArguments(args); + return constructFromArgumentTree(StatisticsParameters.class, argumentTree); + } + + private static ArgumentTree parseArguments(String[] args) { HashMap argumentMap = new HashMap<>(args.length/2); int i = 0; while (i < args.length) { // Is it a parameter? if (args[i].startsWith("--")) { String key = args[i].substring(2); - String value = null; // Is the next a value? if (i < args.length - 1 && !args[i+1].startsWith("--")) { - value = args[i + 1]; - argumentMap.put(key, value); + argumentMap.put(key, args[i + 1]); i = i + 2; } else { argumentMap.put(key, null); @@ -76,7 +86,7 @@ public final class OptimizationBuilder { } System.out.println(argumentTree.toString()); - return constructFromArgumentTree(OptimizationParameters.class, argumentTree); + return argumentTree; } private static void insertIntoArgumentTree(ArgumentTree tree, String key, String value) { diff --git a/src/eva2/cli/OptimizationLogger.java b/src/eva2/cli/OptimizationLogger.java new file mode 100644 index 00000000..e0cbba2f --- /dev/null +++ b/src/eva2/cli/OptimizationLogger.java @@ -0,0 +1,45 @@ +package eva2.cli; + +import eva2.optimization.OptimizationStateListener; +import eva2.optimization.go.InterfaceOptimizationParameters; +import eva2.optimization.population.InterfacePopulationChangedEventListener; + +import java.io.OutputStream; + +/** + * + */ +public class OptimizationLogger implements InterfacePopulationChangedEventListener, OptimizationStateListener { + private final OutputStream outputStream; + private final InterfaceOptimizationParameters optimizationParameters; + + public OptimizationLogger(InterfaceOptimizationParameters optimizationParameters, OutputStream outputStream) { + this.optimizationParameters = optimizationParameters; + this.outputStream = outputStream; + } + + @Override + public void registerPopulationStateChanged(Object source, String name) { + + } + + @Override + public void performedStop() { + + } + + @Override + public void performedStart(String infoString) { + + } + + @Override + public void performedRestart(String infoString) { + + } + + @Override + public void updateProgress(int percent, String msg) { + + } +} diff --git a/src/eva2/optimization/statistics/AbstractStatistics.java b/src/eva2/optimization/statistics/AbstractStatistics.java index 17260e7f..700f216d 100644 --- a/src/eva2/optimization/statistics/AbstractStatistics.java +++ b/src/eva2/optimization/statistics/AbstractStatistics.java @@ -956,7 +956,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter currentMeanFit = null; if (firstPlot) { - initPlots(null, null); + initializePlots(null, null); firstPlot = false; } if ((iterationCounter == 0) && printHeaderByVerbosity()) { @@ -1013,7 +1013,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter /** * Called at the very first (multirun mode) plot of a fitness curve. */ - protected abstract void initPlots(PopulationInterface pop, List informerList); + protected abstract void initializePlots(PopulationInterface pop, List informerList); /** * To set a list of informers (even before the actual run is started). @@ -1120,7 +1120,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter resultOut.flush(); } if (firstPlot) { - initPlots(pop, informerList); + initializePlots(pop, informerList); firstPlot = false; currentBestFeasibleFit = null; } diff --git a/src/eva2/optimization/statistics/StatisticsStandalone.java b/src/eva2/optimization/statistics/StatisticsStandalone.java index 53e55cce..4ff70af2 100644 --- a/src/eva2/optimization/statistics/StatisticsStandalone.java +++ b/src/eva2/optimization/statistics/StatisticsStandalone.java @@ -8,7 +8,7 @@ import java.util.ArrayList; import java.util.List; /** - * This eva2.problems.simple statistics implementation can collect all Object data available during runs. + * This simple statistics implementation can collect all Object data available during runs. * Be aware that the memory requirements can be excessive depending on the data produced by * the additional informers, and depending on the selected fields to be collected. * Therefore, the default is not to log the data but just print it using the super class. @@ -51,7 +51,7 @@ public class StatisticsStandalone extends AbstractStatistics implements Interfac } @Override - protected void initPlots(PopulationInterface pop, List informerList) { + protected void initializePlots(PopulationInterface pop, List informerList) { if (collectData) { resultData = new ArrayList<>(statisticsParameter.getMultiRuns()); List description = getOutputHeaderFieldNames(informerList); @@ -80,7 +80,7 @@ public class StatisticsStandalone extends AbstractStatistics implements Interfac double[] specificData = pop.getSpecificData(); if (specificData != null) { for (int i = 0; i < specificData.length; i++) { - resultData.get(optRunsPerformed).add(new Object[]{new Double(functionCalls), specificData}); + resultData.get(optRunsPerformed).add(new Object[]{(double) functionCalls, specificData}); } } } diff --git a/src/eva2/optimization/statistics/StatisticsWithGUI.java b/src/eva2/optimization/statistics/StatisticsWithGUI.java index c5eac350..9effa547 100644 --- a/src/eva2/optimization/statistics/StatisticsWithGUI.java +++ b/src/eva2/optimization/statistics/StatisticsWithGUI.java @@ -9,7 +9,6 @@ import eva2.gui.plot.Plot; import eva2.gui.plot.PlotInterface; import eva2.optimization.population.PopulationInterface; import eva2.problems.InterfaceAdditionalPopulationInformer; -import eva2.tools.EVAERROR; import eva2.tools.Pair; import java.io.Serializable; @@ -20,7 +19,7 @@ import java.util.logging.Logger; /** * A statistics class to plot fitness curves in client-server mode. Mainly, * arrays of GraphWindows and Graphs are managed and the selected data fields - * are plotted. TODO: this could finally be cleanly reduced to an + * are plotted. TODO: this could eventually be cleanly reduced to an * InterfaceStatisticsListener - without inheriting from AbstractStatistics. */ public class StatisticsWithGUI extends AbstractStatistics implements Serializable, InterfaceStatistics { @@ -39,7 +38,6 @@ public class StatisticsWithGUI extends AbstractStatistics implements Serializabl * some time. */ private transient List> graphDesc = null; - protected static String hostName = null; /** * @@ -112,12 +110,12 @@ public class StatisticsWithGUI extends AbstractStatistics implements Serializabl } @Override - protected void initPlots(PopulationInterface pop, List informerList) { + protected void initializePlots(PopulationInterface pop, List informerList) { if (statisticsParameter instanceof StatisticsParameters) { graphDesc = lastFieldSelection.getSelectedWithIndex(); } else { graphDesc = null; - System.err.println("Error in StatisticsWithGUI.initPlots()!"); + System.err.println("Error in StatisticsWithGUI.initializePlots()!"); } maybeShowProxyPrinter(); @@ -130,7 +128,7 @@ public class StatisticsWithGUI extends AbstractStatistics implements Serializabl fitnessGraph = new Graph[windowCount][]; // contains one graph for every value to be plotted (best / worst / best+worst) - // TODO Im really not sure why this is a 2-dimensional array. shouldnt one be enough? + // TODO Im really not sure why this is a 2-dimensional array. shouldn't one be enough? for (int i = 0; i < fitnessGraph.length; i++) { fitnessGraph[i] = new Graph[graphCount]; for (int j = 0; j < fitnessGraph[i].length; j++) { @@ -156,11 +154,11 @@ public class StatisticsWithGUI extends AbstractStatistics implements Serializabl private void plotFitnessPoint(int graph, int subGraph, int x, double y) { if (fitnessGraph == null) { - EVAERROR.WARNING("fitness graph is null! (StatisticsWithGUI)"); + LOGGER.warning("fitness graph is null! (StatisticsWithGUI)"); return; } if (graph >= fitnessGraph.length || subGraph >= fitnessGraph[graph].length) { - EVAERROR.WARNING("tried to plot to invalid graph! (StatisticsWithGUI)"); + LOGGER.warning("tried to plot to invalid graph! (StatisticsWithGUI)"); return; } boolean isValidGraph = fitnessFrame[graph].isValid();