From 260d6e89ae858ab4829381b3584e6fe21a96a2b0 Mon Sep 17 00:00:00 2001 From: Marcel Kronfeld Date: Tue, 12 Feb 2008 10:09:46 +0000 Subject: [PATCH] Cleaning up BeanTest, nicer toString using Beans, cleaner statistics output (but not yet done) --- resources/JavaEvA.props | 7 +- src/javaeva/gui/BeanInspector.java | 278 ++++++++++++++++ src/javaeva/gui/BeanTest.java | 309 ------------------ src/javaeva/gui/GenericObjectEditor.java | 44 +-- .../terminators/ConvergenceTerminator.java | 10 +- .../terminators/EvaluationTerminator.java | 2 +- .../terminators/FitnessValueTerminator.java | 2 +- .../terminators/GenerationTerminator.java | 2 +- .../problems/AbstractOptimizationProblem.java | 9 + .../DynamicParticleSwarmOptimization.java | 11 + .../strategies/ParticleSwarmOptimization.java | 2 +- src/javaeva/server/modules/GOParameters.java | 14 +- src/javaeva/server/modules/Processor.java | 21 +- .../server/stat/StatisticsParameter.java | 4 +- .../server/stat/StatisticsParameterImpl.java | 4 + .../server/stat/StatisticsStandalone.java | 4 +- .../server/stat/StatisticsWithGUI.java | 12 + src/javaeva/tools/SelectedTag.java | 22 ++ src/javaeva/tools/Tag.java | 45 +-- src/wsi/ra/tool/StatisticUtils.java | 16 + 20 files changed, 432 insertions(+), 386 deletions(-) create mode 100644 src/javaeva/gui/BeanInspector.java delete mode 100644 src/javaeva/gui/BeanTest.java diff --git a/resources/JavaEvA.props b/resources/JavaEvA.props index 7b82dc18..bbbcb291 100644 --- a/resources/JavaEvA.props +++ b/resources/JavaEvA.props @@ -5,15 +5,14 @@ DefaultModule = Genetic_Optimization ## Uncomment this to show all loadable modules. Most are redundant, though. -ShowModules +# ShowModules ServerList = localhost,134.2.172.14,ranode22 +#################### Internals: Do not alter! + # base class for modules. Do not alter! ModulePackage = javaeva.server.modules # filter class for modules. Do not alter! ModuleFilterClass = javaeva.server.modules.AbstractModuleAdapter - -###################### The GO part ###################################### -# there are no further props necessary \ No newline at end of file diff --git a/src/javaeva/gui/BeanInspector.java b/src/javaeva/gui/BeanInspector.java new file mode 100644 index 00000000..5d31b2b3 --- /dev/null +++ b/src/javaeva/gui/BeanInspector.java @@ -0,0 +1,278 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 202 $ + * $Date: 2007-10-25 16:12:49 +0200 (Thu, 25 Oct 2007) $ + * $Author: mkron $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import java.beans.*; +import java.lang.reflect.Array; +import java.lang.reflect.Method; + +/* + * ==========================================================================* + * CLASS DECLARATION + * ========================================================================== + */ +public class BeanInspector { + public static boolean TRACE = false; + +// public static int step = 0; +// public static String check(String s) { +// +// s=s.replace('$','_'); +// s=s.replace(';','_'); +//// String ret = null; +//// try { +//// RE r = new RE("\\["); +//// ret = r.subst(s,""); +//// //ret.substring(); +//// //ret +//// } catch (Exception e) {e.getMessage();}; +//// System.out.println("s="+s+" ret"+ret); +// if (s.equals("[D")) return "Double_Array"; +// if (s.startsWith("[D")) return s.substring(2); +// if (s.startsWith("[L")) return s.substring(2); +// +// return s; +// } + + public static boolean equalProperties(Object Target_1, Object Target_2) { + if (Target_1 == null || Target_2 == null) { + System.out.println(""); + return false; + } + System.out.println("equalProperties: " + Target_1.getClass().getName() + " " + Target_2.getClass().getName()); + if (Target_1.getClass().getName().equals(Target_2.getClass().getName()) == false) { + System.out.println(""); + return false; + } + // compare each of the properties !! + BeanInfo Info_1 = null; + BeanInfo Info_2 = null; + PropertyDescriptor[] Properties_1 = null; + PropertyDescriptor[] Properties_2 = null; + try { + + Info_1 = Introspector.getBeanInfo(Target_1.getClass()); + Info_2 = Introspector.getBeanInfo(Target_2.getClass()); + Properties_1 = Info_1.getPropertyDescriptors(); + Properties_2 = Info_2.getPropertyDescriptors(); + Info_1.getMethodDescriptors(); + } catch (IntrospectionException ex) { + System.out.println("BeanTest: Couldn't introspect !!!!!!!!!"); + return false; + } + boolean BeansInside = false; + boolean BeansEqual = true; + for (int i = 0; i < Properties_1.length; i++) { + if (Properties_1[i].isHidden() || Properties_1[i].isExpert()) { + continue; + } + //String name = Properties_1[i].getDisplayName(); //System.out.println("name = "+name ); + //Class type = Properties_1[i].getPropertyType(); //System.out.println("type = "+type.getName() ); + Method getter_1 = Properties_1[i].getReadMethod(); + Method getter_2 = Properties_2[i].getReadMethod(); + Method setter_1 = Properties_1[i].getWriteMethod(); + // Only display read/write properties. + if (getter_1 == null || setter_1 == null) { + continue; + } + System.out.println("getter_1 = " + getter_1.getName() + " getter_2 = " + getter_2.getName()); + //System.out.println("type = "+type.getName() ); + Object args_1[] = {}; + Object args_2[] = {}; + //System.out.println("m_Target"+m_Target.toString()); + try { + Object value_1 = getter_1.invoke(Target_1, args_1); + Object value_2 = getter_2.invoke(Target_2, args_2); + BeansInside = true; + if (BeanInspector.equalProperties(value_1, value_2) == false) { + BeansEqual = false; + } + } catch (Exception e) { + System.out.println(" BeanTest.equalProperties " + e.getMessage()); + } + } + if (BeansInside == true) { + return BeansEqual; + } + // here we have Integer or Double ... + if (Target_1 instanceof Integer || + Target_1 instanceof Boolean || + Target_1 instanceof Float || + Target_1 instanceof Double || + Target_1 instanceof Long || + Target_1 instanceof String) { + return Target_1.equals(Target_2); + } + + System.out.println(" Attention no match !!!"); + return true; + } + + + /** + * Collect the accessible properties of an object and their values in a string. + * + * @param Target Description of the Parameter + * @return Description of the Return Value + */ + public static String toString(Object Target) { + String ret = ""; + // try the object itself + if (Target instanceof String) return (String)Target; // directly return a string object + + Class type = Target.getClass(); + + if (type.isArray()) { // handle the array case + StringBuffer sbuf = new StringBuffer("["); + int len = Array.getLength(Target); + for (int i=0; i end"); } @@ -122,6 +125,7 @@ public class StatisticsWithGUI implements Serializable, Statistics { public synchronized void startOptPerformed(String InfoString, int runnumber) { if (runnumber == 0) { m_OptRunsPerformed = 0; + m_ConvergenceCnt = 0; m_firstPlot = true; m_StatisticsParameter.saveInstance(); } @@ -187,6 +191,12 @@ public class StatisticsWithGUI implements Serializable, Statistics { for (int i = 0; i < m_BestFitness.length; i++) s = s + " f[" + i + "]=" + m_BestFitness[i]; } + + if (m_BestIndividual != null) { + if (StatisticUtils.norm(m_BestIndividual.getFitness()) < this.m_StatisticsParameter.getConvergenceRateThreshold()) { + m_ConvergenceCnt++; + } + } printToTextListener(" Best solution fitness: " + s); if (m_OptRunsPerformed <= m_StatisticsParameter.getMultiRuns()) { @@ -219,7 +229,9 @@ public class StatisticsWithGUI implements Serializable, Statistics { } } if (m_OptRunsPerformed == m_StatisticsParameter.getMultiRuns()) { + printToTextListener("*******\n Reached target " + m_ConvergenceCnt + " times with threshold " + m_StatisticsParameter.getConvergenceRateThreshold() + ", rate " + m_ConvergenceCnt/(double)m_StatisticsParameter.getMultiRuns()); m_OptRunsPerformed = 0; + m_ConvergenceCnt = 0; if (TRACE) System.out.println("stopOptPerformed"); if (TRACE) diff --git a/src/javaeva/tools/SelectedTag.java b/src/javaeva/tools/SelectedTag.java index c44ecdb0..4064fa20 100644 --- a/src/javaeva/tools/SelectedTag.java +++ b/src/javaeva/tools/SelectedTag.java @@ -150,4 +150,26 @@ public class SelectedTag implements java.io.Serializable { return false; } } + + public String toString() { + return m_Tags[m_Selected].getString(); +// Character selSign = '*'; +// Character separator = '|'; +// StringBuffer sbuf; +// if (m_Selected != 0) sbuf = new StringBuffer(m_Tags[0].getString()); +// else { +// sbuf = new StringBuffer(selSign.toString()); +// sbuf.append(m_Tags[0].getString()); +// sbuf.append(selSign); +// } +// for (int i=1; i