From cc9b29147fb0100ef61f4a55040b041b89eb73b1 Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Tue, 29 Oct 2013 11:43:29 +0100 Subject: [PATCH] Stuff. --- src/META-INF/MANIFEST.MF | 3 ++ src/eva2/OptimizerFactory.java | 1 + src/eva2/OptimizerRunnable.java | 2 +- src/eva2/cli/Main.java | 42 ++++++++++++++++++- src/eva2/gui/Main.java | 27 ++++++++---- .../population/InterfaceSolutionSet.java | 4 +- 6 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 src/META-INF/MANIFEST.MF diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF new file mode 100644 index 00000000..b793fedb --- /dev/null +++ b/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: eva2.gui.Main + diff --git a/src/eva2/OptimizerFactory.java b/src/eva2/OptimizerFactory.java index 179dd875..cc8142a0 100644 --- a/src/eva2/OptimizerFactory.java +++ b/src/eva2/OptimizerFactory.java @@ -788,6 +788,7 @@ public class OptimizerFactory { if (runnable == null) { return null; } + runnable.run(); new Thread(runnable).start(); lastRunnable = runnable; return runnable; diff --git a/src/eva2/OptimizerRunnable.java b/src/eva2/OptimizerRunnable.java index f381c9f3..dfafed68 100644 --- a/src/eva2/OptimizerRunnable.java +++ b/src/eva2/OptimizerRunnable.java @@ -223,7 +223,7 @@ public class OptimizerRunnable implements Runnable { } } - public double[] getDoubleSolution() { + public double[] getDoubleSolution() { IndividualInterface indy = getResult(); if (indy instanceof InterfaceDataTypeDouble) { return ((InterfaceDataTypeDouble) indy).getDoubleData(); diff --git a/src/eva2/cli/Main.java b/src/eva2/cli/Main.java index cd978959..94f95e61 100644 --- a/src/eva2/cli/Main.java +++ b/src/eva2/cli/Main.java @@ -1,6 +1,14 @@ package eva2.cli; +import eva2.OptimizerFactory; import eva2.optimization.OptimizationStateListener; +import eva2.optimization.go.InterfacePopulationChangedEventListener; +import eva2.optimization.modules.OptimizationParameters; +import eva2.optimization.operator.terminators.CombinedTerminator; +import eva2.optimization.operator.terminators.EvaluationTerminator; +import eva2.optimization.operator.terminators.FitnessValueTerminator; +import eva2.optimization.problems.AbstractOptimizationProblem; +import eva2.optimization.problems.F1Problem; import eva2.optimization.problems.InterfaceOptimizationProblem; import eva2.optimization.strategies.InterfaceOptimizer; import org.apache.commons.cli.*; @@ -11,7 +19,7 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; -public class Main implements OptimizationStateListener { +public class Main implements OptimizationStateListener, InterfacePopulationChangedEventListener { private static Options createDefaultCommandLineOptions() { @@ -139,7 +147,34 @@ public class Main implements OptimizationStateListener { } } + Main optimizationMain = new Main(); + optimizationMain.runOptimization(); + } + private void runOptimization() { + + // Terminate after 10000 function evaluations OR after reaching a fitness < 0.1 + OptimizerFactory.setEvaluationTerminator(50000); + OptimizerFactory.addTerminator(new FitnessValueTerminator(new double[]{0.01}), CombinedTerminator.OR); + + + int popsize = 30; + double f = 0.8, lambda = 0.6, cr = 0.6; + + AbstractOptimizationProblem problem = new F1Problem(popsize); + + InterfaceOptimizer optimizer = OptimizerFactory.createDifferentialEvolution(problem, popsize, f, lambda, cr, this); + + OptimizationParameters params = OptimizerFactory.makeParams(optimizer, popsize, problem); + double[] result = OptimizerFactory.optimizeToDouble(params); + + // This is stupid - why isn't there a way to wait for the optimization to finish? + while(OptimizerFactory.terminatedBecause().equals("Not yet terminated")) { + // wait + } + + System.out.println(OptimizerFactory.terminatedBecause()); + System.out.println(optimizer.getPopulation().getFunctionCalls()); } private static void showOptimizerHelp() { @@ -159,4 +194,9 @@ public class Main implements OptimizationStateListener { System.out.printf("\t%s\n", name); } } + + @Override + public void registerPopulationStateChanged(Object source, String name) { + //System.out.println(name); + } } diff --git a/src/eva2/gui/Main.java b/src/eva2/gui/Main.java index c0f8d763..82340123 100644 --- a/src/eva2/gui/Main.java +++ b/src/eva2/gui/Main.java @@ -331,14 +331,6 @@ public class Main extends JFrame implements OptimizationStateListener { if (withGUI) { GridBagConstraints gbConstraints = new GridBagConstraints(); - /* Set Look and Feel */ - try { - //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); - } catch (Exception ex) { - LOGGER.log(Level.INFO, "Could not set Look&Feel", ex); - } - /* Create main frame with GridBagLayout */ setTitle(EvAInfo.productName); setLayout(new GridBagLayout()); @@ -551,6 +543,25 @@ public class Main extends JFrame implements OptimizationStateListener { System.setProperty("com.apple.mrj.application.growbox.intrudes", "false"); System.setProperty("com.apple.mrj.application.live-resize", "true"); + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } catch (InstantiationException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } catch (IllegalAccessException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } catch (UnsupportedLookAndFeelException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } else { + /* Set Look and Feel */ + try { + //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); + } catch (Exception ex) { + LOGGER.log(Level.INFO, "Could not set Look&Feel", ex); + } } /* Available command-line parameters */ diff --git a/src/eva2/optimization/population/InterfaceSolutionSet.java b/src/eva2/optimization/population/InterfaceSolutionSet.java index 90de4d0f..5edffd89 100644 --- a/src/eva2/optimization/population/InterfaceSolutionSet.java +++ b/src/eva2/optimization/population/InterfaceSolutionSet.java @@ -1,9 +1,9 @@ package eva2.optimization.population; /** - * This is just a wrapper type to distinct between a Population (current solution set + * This is just a wrapper type to distinguish between a Population (current solution set * of an optimizer) and a final solution set, in which archived and deactivated - * individuals may be contained as well. Both may be equal if the optimizer doesnt + * individuals may be contained as well. Both may be equal if the optimizer doesn't * make this distinction. * * @author mkron