Slight change of the InterfaceDataListener (AbstractStatistics) - header and meta info fields should not depend on a population.
This commit is contained in:
parent
8aeb94411e
commit
09ef318b93
@ -63,11 +63,11 @@ import eva2.gui.LogPanel;
|
||||
import eva2.server.EvAServer;
|
||||
import eva2.server.go.InterfaceGOParameters;
|
||||
import eva2.server.modules.AbstractModuleAdapter;
|
||||
import eva2.server.modules.GOParameters;
|
||||
import eva2.server.modules.GenericModuleAdapter;
|
||||
import eva2.server.modules.ModuleAdapter;
|
||||
import eva2.server.stat.AbstractStatistics;
|
||||
import eva2.server.stat.InterfaceStatisticsParameter;
|
||||
import eva2.server.stat.StatsParameter;
|
||||
import eva2.tools.BasicResourceLoader;
|
||||
import eva2.tools.EVAERROR;
|
||||
import eva2.tools.EVAHELP;
|
||||
@ -86,6 +86,7 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
public static boolean TRACE = false;
|
||||
|
||||
public JEFrame m_Frame;
|
||||
Runnable initRnbl = null;
|
||||
|
||||
private EvAComAdapter m_ComAdapter;
|
||||
private transient JMenuBar m_barMenu;
|
||||
@ -148,7 +149,9 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
/**
|
||||
* Constructor of GUI of EvA2.
|
||||
* Works as client for the EvA2 server.
|
||||
*
|
||||
* Note that the EvAClient initialized multi-threaded for efficiency. Use {@link #awaitGuiInitialized()}
|
||||
* to await full initialization if necessary.
|
||||
*
|
||||
*/
|
||||
public EvAClient(final String hostName) {
|
||||
this(hostName, null, false, false);
|
||||
@ -156,6 +159,8 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
|
||||
/**
|
||||
* A constructor. Splash screen is optional, Gui is activated, no parent window.
|
||||
* Note that the EvAClient initialized multi-threaded for efficiency. Use {@link #awaitGuiInitialized()}
|
||||
* to await full initialization if necessary.
|
||||
*
|
||||
* @see #EvAClient(String, Window, String, boolean, boolean, boolean)
|
||||
* @param hostName
|
||||
@ -164,11 +169,13 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
* @param nosplash
|
||||
*/
|
||||
public EvAClient(final String hostName, final String paramsFile, boolean autorun, boolean nosplash) {
|
||||
this(hostName, null, paramsFile, autorun, nosplash, false);
|
||||
this(hostName, null, paramsFile, null, autorun, nosplash, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* A constructor with optional spash screen.
|
||||
* Note that the EvAClient initialized multi-threaded for efficiency. Use {@link #awaitGuiInitialized()}
|
||||
* to await full initialization if necessary.
|
||||
* @see #EvAClient(String, String, boolean, boolean)
|
||||
*
|
||||
* @param hostName
|
||||
@ -180,7 +187,26 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* A constructor with optional spash screen.
|
||||
* A constructor with optional splash screen.
|
||||
* Note that the EvAClient initialized multi-threaded for efficiency. Use {@link #awaitGuiInitialized()}
|
||||
* to await full initialization if necessary.
|
||||
*
|
||||
* @see #EvAClient(String, String, boolean, boolean)
|
||||
* @param hostName
|
||||
* @param paramsFile
|
||||
* @param autorun
|
||||
* @param noSplash
|
||||
* @param noGui
|
||||
*/
|
||||
public EvAClient(final String hostName, String paramsFile, boolean autorun, boolean noSplash, boolean noGui) {
|
||||
this(hostName, null, paramsFile, null, autorun, noSplash, noGui);
|
||||
}
|
||||
|
||||
/**
|
||||
* A constructor with optional splash screen.
|
||||
* Note that the EvAClient initialized multi-threaded for efficiency. Use {@link #awaitGuiInitialized()}
|
||||
* to await full initialization if necessary.
|
||||
*
|
||||
* @see #EvAClient(String, String, boolean, boolean)
|
||||
*
|
||||
* @param hostName
|
||||
@ -189,11 +215,17 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
* @param noSplash
|
||||
* @param noGui
|
||||
*/
|
||||
public EvAClient(final String hostName, String paramsFile, boolean autorun, boolean noSplash, boolean noGui) {
|
||||
this(hostName, null, paramsFile, autorun, noSplash, noGui);
|
||||
public EvAClient(final String hostName, InterfaceGOParameters goParams, boolean autorun, boolean noSplash, boolean noGui) {
|
||||
this(hostName, null, null, goParams, autorun, noSplash, noGui);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor of GUI of EvA2. Works as client for the EvA2 server.
|
||||
* Constructor of GUI of EvA2. Works as client for the EvA2 server. GO parameters may be
|
||||
* loaded from a file (paramsFile) or given directly as a java instance. Both may be null
|
||||
* to start with standard parameters. If both are non null, the java instance has the
|
||||
* higher priority.
|
||||
* Note that the EvAClient initialized multi-threaded for efficiency. Use {@link #awaitGuiInitialized()}
|
||||
* to await full initialization if necessary.
|
||||
*
|
||||
* @param hostName
|
||||
* @param parent
|
||||
@ -202,8 +234,7 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
* @param noSplash
|
||||
* @param noGui
|
||||
*/
|
||||
|
||||
public EvAClient(final String hostName, final Window parent, final String paramsFile, final boolean autorun, final boolean noSplash, final boolean noGui) {
|
||||
public EvAClient(final String hostName, final Window parent, final String paramsFile, final InterfaceGOParameters goParams, final boolean autorun, final boolean noSplash, final boolean noGui) {
|
||||
final SplashScreenShell fSplashScreen = new SplashScreenShell(EvAInfo.splashLocation);
|
||||
|
||||
// preload some classes (into system cache) in a parallel thread
|
||||
@ -224,31 +255,53 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
|
||||
m_ComAdapter = EvAComAdapter.getInstance();
|
||||
|
||||
SwingUtilities.invokeLater( new Runnable() {
|
||||
SwingUtilities.invokeLater( initRnbl = new Runnable() {
|
||||
public void run(){
|
||||
long startTime = System.currentTimeMillis();
|
||||
init(hostName, paramsFile, parent); // this takes a bit
|
||||
long wait = System.currentTimeMillis() - startTime;
|
||||
if (!autorun) {
|
||||
if (!noSplash) try {
|
||||
// if splashScreenTime has not passed, sleep some more
|
||||
if (wait < splashScreenTime) Thread.sleep(splashScreenTime - wait);
|
||||
} catch (Exception e) {}
|
||||
} else {
|
||||
if (!withGUI && (currentModuleAdapter instanceof GenericModuleAdapter)) {
|
||||
// do not save new parameters for an autorun without GUI - they werent changed manually anyways.
|
||||
((GenericModuleAdapter)currentModuleAdapter).getStatistics().setSaveParams(false);
|
||||
System.out.println("Autorun without GUI - not saving statistics parameters...");
|
||||
synchronized (this) {
|
||||
long startTime = System.currentTimeMillis();
|
||||
init(hostName, paramsFile, goParams, parent); // this takes a bit
|
||||
|
||||
long wait = System.currentTimeMillis() - startTime;
|
||||
if (!autorun) {
|
||||
if (!noSplash) try {
|
||||
// if splashScreenTime has not passed, sleep some more
|
||||
if (wait < splashScreenTime) Thread.sleep(splashScreenTime - wait);
|
||||
} catch (Exception e) {}
|
||||
} else {
|
||||
if (!withGUI && (currentModuleAdapter instanceof GenericModuleAdapter)) {
|
||||
// do not save new parameters for an autorun without GUI - they werent changed manually anyways.
|
||||
((GenericModuleAdapter)currentModuleAdapter).getStatistics().setSaveParams(false);
|
||||
System.out.println("Autorun without GUI - not saving statistics parameters...");
|
||||
}
|
||||
if (withGUI) frmMkr.onUserStart();
|
||||
else currentModuleAdapter.startOpt();
|
||||
}
|
||||
if (withGUI) frmMkr.onUserStart();
|
||||
else currentModuleAdapter.startOpt();
|
||||
// close splash screen
|
||||
if (!noSplash && withGUI) fSplashScreen.dispose();
|
||||
notify();
|
||||
}
|
||||
// close splash screen
|
||||
if (!noSplash && withGUI) fSplashScreen.dispose();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Since the constructor runs multi-threaded for efficiency, this method
|
||||
* may be called to await the full initialization of a client instance.
|
||||
* As soon as it returns, the EvAClient GUI is fully initialized.
|
||||
*/
|
||||
public void awaitGuiInitialized() {
|
||||
if (initRnbl!=null) {
|
||||
synchronized (initRnbl) {
|
||||
try {
|
||||
initRnbl.wait();
|
||||
initRnbl=null;
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void preloadClasses() {
|
||||
ClassPreloader cp = new ClassPreloader( "eva2.server.go.strategies.InterfaceOptimizer", "eva2.server.go.problems.InterfaceOptimizationProblem", "eva2.server.go.InterfaceTerminator");
|
||||
new Thread(cp).start();
|
||||
@ -270,7 +323,7 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
/**
|
||||
* Sets given hostname and tries to load GOParamsters from given file if non null.
|
||||
*/
|
||||
private void init(String hostName, String paramsFile, final Window parent) {
|
||||
private void init(String hostName, String paramsFile, InterfaceGOParameters goParams, final Window parent) {
|
||||
//EVA_EDITOR_PROPERTIES
|
||||
useDefaultModule = EvAInfo.propDefaultModule();
|
||||
|
||||
@ -304,7 +357,10 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
createActions();
|
||||
}
|
||||
if (useDefaultModule != null) {
|
||||
loadModuleFromServer(useDefaultModule, paramsFile);//loadSpecificModule
|
||||
// if goParams are not defined and a params file is defined
|
||||
// try to load parameters from file
|
||||
if (goParams==null && (paramsFile!=null && (paramsFile.length()>0))) goParams = GOParameters.getInstance(paramsFile, false);
|
||||
loadModuleFromServer(useDefaultModule, goParams);//loadSpecificModule
|
||||
}
|
||||
|
||||
if (withGUI) {
|
||||
@ -649,7 +705,7 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void loadModuleFromServer(String selectedModule, String paramsFile) {
|
||||
private void loadModuleFromServer(String selectedModule, InterfaceGOParameters goParams) {
|
||||
if (m_ComAdapter.getHostName() == null) {
|
||||
System.err.println("error in loadModuleFromServer!");
|
||||
return;
|
||||
@ -691,7 +747,7 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
} else {
|
||||
Serializer.storeString("lastmodule.ser", selectedModule);
|
||||
|
||||
loadSpecificModule(selectedModule, paramsFile);
|
||||
loadSpecificModule(selectedModule, goParams);
|
||||
|
||||
if (withGUI) {
|
||||
m_actHost.setEnabled(true);
|
||||
@ -735,11 +791,11 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
} else return false;
|
||||
}
|
||||
|
||||
private void loadSpecificModule(String selectedModule, String paramsFile) {
|
||||
private void loadSpecificModule(String selectedModule, InterfaceGOParameters goParams) {
|
||||
ModuleAdapter newModuleAdapter = null;
|
||||
//
|
||||
try {
|
||||
newModuleAdapter = m_ComAdapter.getModuleAdapter(selectedModule, paramsFile, withGUI ? null : "EvA2");
|
||||
newModuleAdapter = m_ComAdapter.getModuleAdapter(selectedModule, goParams, withGUI ? null : "EvA2");
|
||||
} catch (Exception e) {
|
||||
logMessage("Error while m_ComAdapter.GetModuleAdapter Host: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
@ -755,7 +811,7 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
System.setProperty("java.class.path", cp + System.getProperty("path.separator") + baseDir.getPath());
|
||||
ReflectPackage.resetDynCP();
|
||||
m_ComAdapter.updateLocalMainAdapter();
|
||||
loadSpecificModule(selectedModule, paramsFile); // end recursive call! handle with care!
|
||||
loadSpecificModule(selectedModule, goParams); // end recursive call! handle with care!
|
||||
return;
|
||||
}
|
||||
showLoadModules = true;
|
||||
|
@ -20,6 +20,7 @@ import eva2.EvAInfo;
|
||||
import eva2.gui.LogPanel;
|
||||
import eva2.server.EvAMainAdapter;
|
||||
import eva2.server.EvAMainAdapterImpl;
|
||||
import eva2.server.go.InterfaceGOParameters;
|
||||
import eva2.server.modules.ModuleAdapter;
|
||||
import eva2.tools.jproxy.ComAdapter;
|
||||
import eva2.tools.jproxy.MainAdapter;
|
||||
@ -59,11 +60,11 @@ public class EvAComAdapter extends ComAdapter {
|
||||
* Creates the ModulAdapters RMI Object on the server
|
||||
* @return
|
||||
*/
|
||||
public ModuleAdapter getModuleAdapter(String selectedModuleName, String paramsFile, String noGuiStatsFile) {
|
||||
public ModuleAdapter getModuleAdapter(String selectedModuleName, InterfaceGOParameters goParams, String noGuiStatsFile) {
|
||||
ModuleAdapter newModuleAdapter;
|
||||
if ((m_RMIServer == null) && isRunLocally()) {
|
||||
//ret = evaAdapter.getModuleAdapter(Modul, hostAdd, this.m_MainAdapterClient);
|
||||
newModuleAdapter = getLocalMainAdapter().getModuleAdapter(selectedModuleName, true, getHostName(), paramsFile, noGuiStatsFile, null);
|
||||
newModuleAdapter = getLocalMainAdapter().getModuleAdapter(selectedModuleName, true, getHostName(), goParams, noGuiStatsFile, null);
|
||||
} else {
|
||||
newModuleAdapter = ((RMIConnectionEvA)getConnection(getHostName())).getModuleAdapter(selectedModuleName);
|
||||
if (newModuleAdapter == null) System.err.println("RMI Error for getting ModuleAdapterObject : " + selectedModuleName);
|
||||
|
@ -199,16 +199,42 @@ public class GenericObjectEditor implements PropertyEditor {
|
||||
*
|
||||
* @param cls
|
||||
* @param hide
|
||||
* @return the original hidden states or null if an error occurred.
|
||||
*/
|
||||
public static void setHideAllProperties(Class<?> cls, boolean hide) {
|
||||
public static boolean[] setHideAllProperties(Class<?> cls, boolean hide) {
|
||||
try {
|
||||
BeanInfo bi = Introspector.getBeanInfo(cls);
|
||||
PropertyDescriptor[] props = bi.getPropertyDescriptors();
|
||||
boolean[] orig = new boolean[props.length];
|
||||
for (int i=0; i<props.length; i++) {
|
||||
orig[i]=props[i].isHidden();
|
||||
props[i].setHidden(hide);
|
||||
}
|
||||
return orig;
|
||||
} catch (Exception e) {
|
||||
System.err.println("exception in setHideProperty for " + cls.getName() + "/all : " + e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void setHideProperties(Class<?> cls, boolean[] hideStates) {
|
||||
if (hideStates!=null) {
|
||||
BeanInfo bi;
|
||||
try {
|
||||
bi = Introspector.getBeanInfo(cls);
|
||||
} catch (IntrospectionException e) {
|
||||
System.err.println("Error on introspection of " + cls.getName() + ", " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
PropertyDescriptor[] props = bi.getPropertyDescriptors();
|
||||
if (hideStates.length == props.length) {
|
||||
for (int i=0; i<props.length; i++) {
|
||||
props[i].setHidden(hideStates[i]);
|
||||
}
|
||||
} else {
|
||||
System.err.println("Error, mismatching length of hide state array in GenericObjectEditor.setHideProperites");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -204,7 +204,10 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
// Look for a globalInfo method that returns a string
|
||||
// describing the target
|
||||
int methsFound = 0; // dont loop too long, so count until all found
|
||||
GenericObjectEditor.setHideAllProperties(m_Target.getClass(), false);
|
||||
// unhide all properties
|
||||
// TODO this may be superfluous?
|
||||
boolean[] hideStateBackup = GenericObjectEditor.setHideAllProperties(m_Target.getClass(), false);
|
||||
// System.out.println("hide stats were: " + BeanInspector.toString(hideStateBackup));
|
||||
for (int i = 0; i < m_Methods.length; i++) {
|
||||
String name = m_Methods[i].getDisplayName();
|
||||
Method meth = m_Methods[i].getMethod();
|
||||
@ -228,7 +231,9 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
}
|
||||
if (methsFound == 3) break; // small speed-up
|
||||
} // end for (int i = 0; i < m_Methods.length; i++) {
|
||||
|
||||
// restore hide states of all properties
|
||||
GenericObjectEditor.setHideProperties(m_Target.getClass(), hideStateBackup);
|
||||
|
||||
// Now lets search for the individual properties, their
|
||||
// values, views and editors...
|
||||
m_Editors = new PropertyEditor[m_Properties.length];
|
||||
|
@ -12,6 +12,7 @@ package eva2.server;
|
||||
* IMPORTS
|
||||
*==========================================================================*/
|
||||
|
||||
import eva2.server.go.InterfaceGOParameters;
|
||||
import eva2.server.modules.ModuleAdapter;
|
||||
import eva2.tools.jproxy.MainAdapter;
|
||||
import eva2.tools.jproxy.MainAdapterClient;
|
||||
@ -33,7 +34,7 @@ public interface EvAMainAdapter extends MainAdapter {
|
||||
public ModuleAdapter getModuleAdapter(String selectedModuleName,
|
||||
boolean withoutRMI,
|
||||
String hostAddress,
|
||||
String paramsFile,
|
||||
InterfaceGOParameters goParams,
|
||||
String noGuiStatsFile,
|
||||
MainAdapterClient client);
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ package eva2.server;
|
||||
* IMPORTS
|
||||
*==========================================================================*/
|
||||
import eva2.EvAInfo;
|
||||
import eva2.server.go.InterfaceGOParameters;
|
||||
import eva2.server.modules.ModuleAdapter;
|
||||
import eva2.tools.jproxy.MainAdapterClient;
|
||||
import eva2.tools.jproxy.MainAdapterImpl;
|
||||
@ -38,10 +39,10 @@ public class EvAMainAdapterImpl extends MainAdapterImpl implements EvAMainAdapte
|
||||
return getModuleAdapter(selectedModuleName, withoutRMI, hostAddress, null, null, client);
|
||||
}
|
||||
|
||||
public ModuleAdapter getModuleAdapter(String selectedModuleName, boolean withoutRMI, String hostAddress, String paramsFile, String noGuiStatsFile, MainAdapterClient client) {
|
||||
public ModuleAdapter getModuleAdapter(String selectedModuleName, boolean withoutRMI, String hostAddress, InterfaceGOParameters goParams,String noGuiStatsFile, MainAdapterClient client) {
|
||||
if (TRACE) System.out.println("MainAdapterImpl.GetModuleAdapter() for module " +
|
||||
selectedModuleName +" for Client: "+hostAddress+ " called");
|
||||
return m_ModulServer.createModuleAdapter(selectedModuleName,client,withoutRMI,hostAddress, paramsFile, noGuiStatsFile);
|
||||
return m_ModulServer.createModuleAdapter(selectedModuleName,client,withoutRMI,hostAddress, goParams, noGuiStatsFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@ import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Properties;
|
||||
|
||||
import eva2.server.go.InterfaceGOParameters;
|
||||
import eva2.server.modules.GOModuleAdapter;
|
||||
import eva2.server.modules.ModuleAdapter;
|
||||
import eva2.tools.EVAERROR;
|
||||
@ -125,7 +126,7 @@ public class ModuleServer {
|
||||
*/
|
||||
public ModuleAdapter createModuleAdapter(String selectedModuleName,
|
||||
MainAdapterClient Client, boolean runWithoutRMI,
|
||||
String hostAddress, String paramsFile, String noGuiLogFile) {
|
||||
String hostAddress, InterfaceGOParameters goParams, String noGuiLogFile) {
|
||||
m_ModuleAdapterCounter++;
|
||||
String adapterName = new String("ERROR MODULADAPTER !!");
|
||||
if (TRACE) {
|
||||
@ -163,8 +164,8 @@ public class ModuleServer {
|
||||
|
||||
Constructor<?>[] constructorArr = module.getConstructors();
|
||||
// create a module instance
|
||||
if ((paramsFile==null && noGuiLogFile==null) || !module.equals(GOModuleAdapter.class)) {
|
||||
if (paramsFile!=null) System.err.println("Cant load params - no matching constructor found for " + adapterName + " (ModuleServer)");
|
||||
if ((goParams==null && noGuiLogFile==null) || !module.equals(GOModuleAdapter.class)) {
|
||||
if (goParams!=null) System.err.println("Cant set params - no matching constructor found for " + adapterName + " (ModuleServer)");
|
||||
if (noGuiLogFile!=null) System.err.println("Cant deactivate GUI - no matching constructor found for " + adapterName + " (ModuleServer)");
|
||||
Object[] Para = new Object[2];
|
||||
Class<?> paramTypes[] = (constructorArr[0]).getParameterTypes();
|
||||
@ -174,7 +175,7 @@ public class ModuleServer {
|
||||
} else {
|
||||
Object[] Para = new Object[4];
|
||||
Para[0] = (String)adapterName;
|
||||
Para[1] = (String)paramsFile;
|
||||
Para[1] = (InterfaceGOParameters)goParams;
|
||||
Para[2] = (String)noGuiLogFile;
|
||||
Para[3] = (MainAdapterClient)Client;
|
||||
int constrIndex=0;
|
||||
|
@ -1,24 +0,0 @@
|
||||
package eva2.server.go;
|
||||
/*
|
||||
* Title: EvA2
|
||||
* Description:
|
||||
* Copyright: Copyright (c) 2003
|
||||
* Company: University of Tuebingen, Computer Architecture
|
||||
* @author Holger Ulmer, Felix Streichert, Hannes Planatscher
|
||||
* @version: $Revision: 306 $
|
||||
* $Date: 2007-12-04 14:22:52 +0100 (Tue, 04 Dec 2007) $
|
||||
* $Author: mkron $
|
||||
*/
|
||||
/*==========================================================================*
|
||||
* IMPORTS
|
||||
*==========================================================================*/
|
||||
import eva2.server.stat.InterfaceStatistics;
|
||||
/*==========================================================================*
|
||||
* INTERFACE DECLARATION
|
||||
*==========================================================================*/
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public interface CrossoverInterface {
|
||||
public void addListener(InterfaceStatistics e);
|
||||
}
|
@ -411,7 +411,7 @@ public class GOStandaloneVersion implements InterfaceGOStandalone, InterfacePopu
|
||||
if (Thread.interrupted())
|
||||
throw new InterruptedException();
|
||||
// write header to file
|
||||
this.writeToFile(" FitnessCalls\t Best\t Mean\t Worst \t" + BeanInspector.toString(this.m_GO.getProblem().getAdditionalFileStringHeader(this.m_GO.getOptimizer().getPopulation()), '\t', false));
|
||||
this.writeToFile(" FitnessCalls\t Best\t Mean\t Worst \t" + BeanInspector.toString(this.m_GO.getProblem().getAdditionalFileStringHeader(), '\t', false));
|
||||
if ((this.m_ContinueFlag) && (this.m_Backup != null)) {
|
||||
this.m_RecentFC += this.m_Backup.getFunctionCalls();
|
||||
this.m_GO.getOptimizer().getProblem().initProblem();
|
||||
|
@ -122,8 +122,8 @@ public abstract class AbstractMultiModalProblemKnown extends AbstractProblemDoub
|
||||
public abstract double[] evalUnnormalized(double[] x);
|
||||
|
||||
@Override
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
return ToolBox.appendArrays(new String[]{"numOptsFound", "maxPeakRatio"}, super.getAdditionalFileStringHeader(pop));
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
return ToolBox.appendArrays(new String[]{"numOptsFound", "maxPeakRatio"}, super.getAdditionalFileStringHeader());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -489,8 +489,8 @@ public abstract class AbstractMultiObjectiveOptimizationProblem extends Abstract
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
String[] superHd = super.getAdditionalFileStringHeader(pop);
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
String[] superHd = super.getAdditionalFileStringHeader();
|
||||
return ToolBox.appendArrays(new String[]{"paretoMetricCurrent","paretoMetricFront"}, superHd);
|
||||
}
|
||||
|
||||
@ -507,8 +507,8 @@ public abstract class AbstractMultiObjectiveOptimizationProblem extends Abstract
|
||||
* @see eva2.server.go.problems.AbstractOptimizationProblem#getAdditionalFileStringInfo(eva2.server.go.PopulationInterface)
|
||||
*/
|
||||
@Override
|
||||
public String[] getAdditionalFileStringInfo(PopulationInterface pop) {
|
||||
String[] superInfo = super.getAdditionalFileStringInfo(pop);
|
||||
public String[] getAdditionalFileStringInfo() {
|
||||
String[] superInfo = super.getAdditionalFileStringInfo();
|
||||
return ToolBox.appendArrays(new String[]{"Pareto metric on the current population (per generation)",
|
||||
"Pareto metric on the collected pareto front"}, superInfo);
|
||||
}
|
||||
|
@ -241,7 +241,7 @@ implements InterfaceOptimizationProblem /*, InterfaceParamControllable*/, Serial
|
||||
* @param pop The population that is to be refined.
|
||||
* @return String
|
||||
*/
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
if (this instanceof InterfaceInterestingHistogram) return new String[]{"solution","histogram","score"};
|
||||
else return new String[]{"solution"};
|
||||
}
|
||||
@ -250,7 +250,7 @@ implements InterfaceOptimizationProblem /*, InterfaceParamControllable*/, Serial
|
||||
* @param pop The population that is to be refined.
|
||||
* @return String
|
||||
*/
|
||||
public String[] getAdditionalFileStringInfo(PopulationInterface pop) {
|
||||
public String[] getAdditionalFileStringInfo() {
|
||||
if (this instanceof InterfaceInterestingHistogram)
|
||||
return new String[]{"Representation of the current best individual",
|
||||
"Fitness histogram of the current population",
|
||||
|
@ -574,8 +574,8 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
String[] superHeader = super.getAdditionalFileStringHeader(pop);
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
String[] superHeader = super.getAdditionalFileStringHeader();
|
||||
if (isWithConstraints())
|
||||
return ToolBox.appendArrays(superHeader, new String[] { "rawFit",
|
||||
"numViol", "sumViol" });
|
||||
@ -584,8 +584,8 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdditionalFileStringInfo(PopulationInterface pop) {
|
||||
String[] superInfo = super.getAdditionalFileStringInfo(pop);
|
||||
public String[] getAdditionalFileStringInfo() {
|
||||
String[] superInfo = super.getAdditionalFileStringInfo();
|
||||
if (isWithConstraints())
|
||||
return ToolBox
|
||||
.appendArrays(
|
||||
|
@ -158,8 +158,8 @@ public class F8Problem extends AbstractProblemDoubleOffset
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
String[] superHd = super.getAdditionalFileStringHeader(pop);
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
String[] superHd = super.getAdditionalFileStringHeader();
|
||||
return ToolBox.appendArrays(new String[]{"numOptimaFound","maxPeakRatio"}, superHd);
|
||||
// return "#Optima found \tMaximum Peak Ratio \t" + super.getAdditionalFileStringHeader(pop);
|
||||
}
|
||||
|
@ -344,19 +344,6 @@ public class FLensProblem extends AbstractOptimizationProblem implements Interfa
|
||||
result += "Y = " + individual.getFitness(0);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
return new String[]{"Solution"};
|
||||
}
|
||||
@Override
|
||||
public Object[] getAdditionalFileStringValue(PopulationInterface pop) {
|
||||
String result ="{";
|
||||
double[] data = ((InterfaceDataTypeDouble) pop.getBestIndividual()).getDoubleData();
|
||||
for (int i = 0; i < data.length; i++) result += data[i] +"; ";
|
||||
result += "}";
|
||||
return new Object[]{result};
|
||||
}
|
||||
|
||||
/** This method allows you to output a string that describes a found solution
|
||||
* in a way that is most suiteable for a given problem.
|
||||
|
@ -17,7 +17,7 @@ public interface InterfaceAdditionalPopulationInformer {
|
||||
* @param pop The population of the optimization run.
|
||||
* @return String
|
||||
*/
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop);
|
||||
public String[] getAdditionalFileStringHeader();
|
||||
|
||||
/**
|
||||
* Optionally return informative descriptions of the data fields.
|
||||
@ -25,7 +25,7 @@ public interface InterfaceAdditionalPopulationInformer {
|
||||
* @param pop
|
||||
* @return
|
||||
*/
|
||||
public String[] getAdditionalFileStringInfo(PopulationInterface pop);
|
||||
public String[] getAdditionalFileStringInfo();
|
||||
|
||||
/**
|
||||
* This method returns additional statistical data.
|
||||
|
@ -510,8 +510,8 @@ public class PSymbolicRegression extends AbstractOptimizationProblem implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
String[] superHd = super.getAdditionalFileStringHeader(pop);
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
String[] superHd = super.getAdditionalFileStringHeader();
|
||||
return ToolBox.appendArrays(new String[]{"bestIndySize","avgIndySize","avgMaxIndyDepth"}, superHd);
|
||||
}
|
||||
|
||||
|
@ -1142,14 +1142,14 @@ public class ClusterBasedNichingEA implements InterfacePopulationChangedEventLis
|
||||
return "If fitness improves less than this value within the halting window, convergence is assumed. May be set to zero.";
|
||||
}
|
||||
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
return new String[]{"numUndiff","numActSpec","avgSpecMeas","numArchived",
|
||||
"archivedMedCorr", "archivedMeanDist"
|
||||
// , "numCollisions", "clustSig"
|
||||
};
|
||||
}
|
||||
|
||||
public String[] getAdditionalFileStringInfo(PopulationInterface pop) { // TODO use these as Tool Tip Texts???
|
||||
public String[] getAdditionalFileStringInfo() {
|
||||
return new String[] {
|
||||
"The number of exploring individuals in the main population",
|
||||
"The number of active species (sub-populations)",
|
||||
|
@ -418,11 +418,11 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi
|
||||
return "Set the method to be used for the hill climbing as local search";
|
||||
}
|
||||
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
return new String[]{"numIndies"};
|
||||
}
|
||||
|
||||
public String[] getAdditionalFileStringInfo(PopulationInterface pop) {
|
||||
public String[] getAdditionalFileStringInfo() {
|
||||
return new String[]{"The current population size"};
|
||||
}
|
||||
|
||||
|
@ -2060,12 +2060,12 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
|
||||
// public void setDoLocalSearch(boolean doLocalSearch) {
|
||||
// this.doLocalSearch = doLocalSearch;
|
||||
// }
|
||||
public String[] getAdditionalFileStringHeader(PopulationInterface pop) {
|
||||
public String[] getAdditionalFileStringHeader() {
|
||||
if (emaPeriods > 0) return new String[]{"meanEMASpeed", "meanCurSpeed"};
|
||||
else return new String[]{"meanCurSpeed"};
|
||||
}
|
||||
|
||||
public String[] getAdditionalFileStringInfo(PopulationInterface pop) {
|
||||
public String[] getAdditionalFileStringInfo() {
|
||||
if (emaPeriods > 0) return new String[]{"Exponential moving average of the (range-relative) speed of all particles", "The mean (range-relative) current speed of all particles"};
|
||||
else return new String[]{"The mean (range-relative) current speed of all particles"};
|
||||
}
|
||||
|
@ -122,11 +122,11 @@ abstract public class AbstractModuleAdapter implements ModuleAdapter, Serializab
|
||||
} else return null;
|
||||
}
|
||||
|
||||
// public void setGOParameters(InterfaceGOParameters params) {
|
||||
// if ((m_Processor != null) && (m_Processor instanceof Processor)) {
|
||||
// ((Processor)m_Processor).setGOParams(params);
|
||||
// }
|
||||
// }
|
||||
public void setGOParameters(InterfaceGOParameters goParams) {
|
||||
if ((m_Processor != null) && (m_Processor instanceof Processor)) {
|
||||
((Processor)m_Processor).setGOParams(goParams);
|
||||
}
|
||||
}
|
||||
|
||||
// public void loadGOParameters(String serParamsFile) {
|
||||
// if ((m_Processor != null) && (m_Processor instanceof Processor)) {
|
||||
|
@ -2,6 +2,7 @@ package eva2.server.modules;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import eva2.server.go.InterfaceGOParameters;
|
||||
import eva2.tools.jproxy.MainAdapterClient;
|
||||
|
||||
|
||||
@ -39,8 +40,19 @@ public class GOModuleAdapter extends GenericModuleAdapter implements ModuleAdapt
|
||||
* @param AdapterName the title of the ModulAdapter
|
||||
* @param Client the client instance
|
||||
*/
|
||||
public GOModuleAdapter(String adapterName, String serParamsFile, String noGuiLogFile, MainAdapterClient client) {
|
||||
public GOModuleAdapter(String adapterName, InterfaceGOParameters goParams, String noGuiLogFile, MainAdapterClient client) {
|
||||
//super(adapterName, "", client, GOParameters.getInstance(serParamsFile, false), false);
|
||||
super(adapterName, "", client, GOParameters.getInstance(serParamsFile, serParamsFile==null), false, noGuiLogFile);
|
||||
super(adapterName, "", client, goParams, false, noGuiLogFile);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Starts a statistics GUI and the GOProcessor thread with a given GOParameters file.
|
||||
// *
|
||||
// * @param AdapterName the title of the ModulAdapter
|
||||
// * @param Client the client instance
|
||||
// */
|
||||
// public GOModuleAdapter(String adapterName, String serParamsFile, String noGuiLogFile, MainAdapterClient client) {
|
||||
// //super(adapterName, "", client, GOParameters.getInstance(serParamsFile, false), false);
|
||||
// super(adapterName, "", client, GOParameters.getInstance(serParamsFile, serParamsFile==null), false, noGuiLogFile);
|
||||
// }
|
||||
}
|
@ -13,9 +13,6 @@ package eva2.server.modules;
|
||||
* IMPORTS
|
||||
*==========================================================================*/
|
||||
import eva2.gui.EvATabbedFrameMaker;
|
||||
import eva2.gui.LogPanel;
|
||||
import eva2.server.go.operators.postprocess.PostProcessParams;
|
||||
import eva2.server.stat.InterfaceTextListener;
|
||||
import eva2.tools.jproxy.RemoteStateListener;
|
||||
/*==========================================================================*
|
||||
* INTERFACE DECLARATION
|
||||
|
@ -1,5 +1,6 @@
|
||||
package eva2.server.modules;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.swing.JOptionPane;
|
||||
@ -228,7 +229,7 @@ public class Processor extends Thread implements InterfaceProcessor, InterfacePo
|
||||
String popLog = null; //"populationLog.txt";
|
||||
|
||||
while (isOptRunning() && (runCounter<m_Statistics.getStatisticsParameter().getMultiRuns())) {
|
||||
m_Statistics.startOptPerformed(getInfoString(),runCounter, goParams);
|
||||
m_Statistics.startOptPerformed(getInfoString(),runCounter, goParams, getInformerList());
|
||||
|
||||
this.goParams.getProblem().initProblem();
|
||||
this.goParams.getOptimizer().SetProblem(this.goParams.getProblem());
|
||||
@ -355,13 +356,10 @@ public class Processor extends Thread implements InterfaceProcessor, InterfacePo
|
||||
public void registerPopulationStateChanged(Object source, String name) {
|
||||
if (name.equals(Population.nextGenerationPerformed)) {
|
||||
// System.out.println(getGOParams().getOptimizer().getPopulation().getFunctionCalls() + " " + getGOParams().getOptimizer().getPopulation().getBestFitness()[0]);
|
||||
Vector informerList = new Vector<InterfaceAdditionalPopulationInformer>(2);
|
||||
informerList.add(this.goParams.getProblem());
|
||||
if (this.goParams.getOptimizer() instanceof InterfaceAdditionalPopulationInformer) informerList.add(this.goParams.getOptimizer());
|
||||
m_Statistics.createNextGenerationPerformed(
|
||||
(PopulationInterface)this.goParams.getOptimizer().getPopulation(),
|
||||
this.goParams.getOptimizer(),
|
||||
informerList);
|
||||
getInformerList());
|
||||
if (m_ListenerModule != null) {
|
||||
m_ListenerModule.updateProgress(
|
||||
getStatusPercent(
|
||||
@ -372,7 +370,14 @@ public class Processor extends Thread implements InterfaceProcessor, InterfacePo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected List<InterfaceAdditionalPopulationInformer> getInformerList() {
|
||||
Vector<InterfaceAdditionalPopulationInformer> informerList = new Vector<InterfaceAdditionalPopulationInformer>(2);
|
||||
informerList.add(this.goParams.getProblem());
|
||||
if (this.goParams.getOptimizer() instanceof InterfaceAdditionalPopulationInformer) informerList.add((InterfaceAdditionalPopulationInformer)this.goParams.getOptimizer());
|
||||
return informerList;
|
||||
}
|
||||
|
||||
/** This method writes Data to file.
|
||||
* @param line The line that is to be added to the file
|
||||
*/
|
||||
|
@ -65,7 +65,8 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
private ArrayList<Double[]> sumDataCollection; // collect summed-up data of multiple runs indexed per iteration
|
||||
protected Object[] currentStatObjectData = null; // the raw Object data collected in an iteration
|
||||
protected Double[] currentStatDoubleData = null; // the parsed doubles collected in an iteration (or null for complex data fields)
|
||||
protected String[] currentHeaderData = null; // the header Strings of the currently provided data
|
||||
protected String[] currentStatHeader = null; // the header Strings of the currently provided data
|
||||
protected String[] currentStatMetaInfo = null; // meta information on the statistical data
|
||||
private Double[] statDataSumOverAll = null;
|
||||
// , lastAdditionalInfoSums=null;
|
||||
|
||||
@ -133,7 +134,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
|
||||
private void fireDataListeners() {
|
||||
if (dataListeners!=null) for (InterfaceStatisticsListener l : dataListeners) {
|
||||
l.notifyGenerationPerformed(currentHeaderData, currentStatObjectData, currentStatDoubleData);
|
||||
l.notifyGenerationPerformed(currentStatHeader, currentStatObjectData, currentStatDoubleData);
|
||||
}
|
||||
}
|
||||
|
||||
@ -146,10 +147,10 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
*/
|
||||
private void fireDataListenersStartStop(int runNumber, boolean normal, boolean start) {
|
||||
if (dataListeners!=null) for (InterfaceStatisticsListener l : dataListeners) {
|
||||
if (start) l.notifyRunStarted(runNumber, m_StatsParams.getMultiRuns());
|
||||
if (start) l.notifyRunStarted(runNumber, m_StatsParams.getMultiRuns(), currentStatHeader, currentStatMetaInfo);
|
||||
else {
|
||||
l.notifyRunStopped(optRunsPerformed, normal);
|
||||
if (optRunsPerformed>1) l.finalMultiRunResults(currentHeaderData, finalObjectData);
|
||||
if (optRunsPerformed>1) l.finalMultiRunResults(currentStatHeader, finalObjectData);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -221,17 +222,24 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
saveParams = doSave;
|
||||
}
|
||||
|
||||
public void startOptPerformed(String infoString, int runNumber, Object params) {
|
||||
public void startOptPerformed(String infoString, int runNumber, Object params, List<InterfaceAdditionalPopulationInformer> informerList) {
|
||||
if (TRACE) {
|
||||
System.out.println("AbstractStatistics.startOptPerformed " + runNumber);
|
||||
System.out.println("Statsparams were " + BeanInspector.toString(m_StatsParams));
|
||||
}
|
||||
|
||||
if (runNumber == 0) {
|
||||
currentHeaderData=null;
|
||||
// store the intial graph selection state, so that modifications during runtime cannot cause inconsistencies
|
||||
lastFieldSelection = (StringSelection)m_StatsParams.getFieldSelection().clone();
|
||||
lastIsShowFull = m_StatsParams.isOutputAllFieldsAsText();
|
||||
|
||||
currentStatDoubleData=null;
|
||||
currentStatObjectData=null;
|
||||
|
||||
List<String> headerFields=getOutputHeaderFieldNames(informerList);
|
||||
currentStatHeader = headerFields.toArray(new String[headerFields.size()]);
|
||||
currentStatMetaInfo = getOutputMetaInfoAsArray(informerList);
|
||||
|
||||
functionCallSum = 0;
|
||||
firstPlot = true;
|
||||
optRunsPerformed = 0;
|
||||
@ -256,9 +264,6 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
feasibleFoundAfterSum=-1;
|
||||
numOfRunsFeasibleFound=0;
|
||||
|
||||
// store the intial graph selection state, so that modifications during runtime cannot cause inconsistencies
|
||||
lastFieldSelection = (StringSelection)m_StatsParams.getFieldSelection().clone();
|
||||
lastIsShowFull = m_StatsParams.isOutputAllFieldsAsText();
|
||||
}
|
||||
feasibleFoundAfter=-1;
|
||||
bestCurrentIndy = null;
|
||||
@ -456,7 +461,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
private String getFinalAdditionalInfo() {
|
||||
PopulationInterface bestPop = makeStatsPop();
|
||||
// List<String> additionalFields = getAdditionalInfoHeader(lastInformerList, bestPop);
|
||||
String additionalFields = getOutputHeaderString(lastInformerList, bestPop);
|
||||
String additionalFields = getOutputHeaderFieldNamesAsString(lastInformerList);
|
||||
// String header = getOutputHeader(lastInformerList, bestPop);
|
||||
List<Object> vals = getOutputValues(lastInformerList, bestPop);
|
||||
|
||||
@ -502,7 +507,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
}
|
||||
|
||||
public String refineToText(ArrayList<Double[]> data, int iterationsToShow) {
|
||||
String hd = getOutputHeaderString(lastInformerList, null);
|
||||
String hd = getOutputHeaderFieldNamesAsString(lastInformerList);
|
||||
StringBuffer sbuf = new StringBuffer("Iteration");
|
||||
sbuf.append(textFieldDelimiter);
|
||||
sbuf.append(hd);
|
||||
@ -591,11 +596,28 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
* @param pop
|
||||
* @return
|
||||
*/
|
||||
protected String getOutputHeaderString(List<InterfaceAdditionalPopulationInformer> informerList, PopulationInterface pop) {
|
||||
List<String> headlineFields = getOutputHeaderFieldNames(informerList, pop);
|
||||
protected String getOutputHeaderFieldNamesAsString(List<InterfaceAdditionalPopulationInformer> informerList) {
|
||||
List<String> headlineFields = getOutputHeaderFieldNames(informerList);
|
||||
return StringTools.concatFields(headlineFields, textFieldDelimiter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Collect meta information on both internal fields and fields of external informers.
|
||||
* The length of this list depends on the field selection state.
|
||||
*
|
||||
* @param informerList
|
||||
* @param pop
|
||||
* @return
|
||||
*/
|
||||
protected List<String> getOutputHeaderFieldNames(List<InterfaceAdditionalPopulationInformer> informerList) {
|
||||
ArrayList<String> headlineFields = new ArrayList<String>(5);
|
||||
headlineFields.addAll(Arrays.asList(getSimpleOutputHeader()));
|
||||
if (informerList != null) {
|
||||
headlineFields.addAll(getAdditionalHeaderMetaInfo(informerList, null));
|
||||
}
|
||||
return headlineFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Collect all field names of both internal fields and fields of external informers.
|
||||
* The length of this list depends on the field selection state.
|
||||
@ -604,14 +626,22 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
* @param pop
|
||||
* @return
|
||||
*/
|
||||
protected List<String> getOutputHeaderFieldNames(List<InterfaceAdditionalPopulationInformer> informerList, PopulationInterface pop) {
|
||||
ArrayList<String> headlineFields = new ArrayList<String>(5);
|
||||
headlineFields.addAll(Arrays.asList(getSimpleOutputHeader()));
|
||||
protected List<String> getOutputMetaInfo(List<InterfaceAdditionalPopulationInformer> informerList) {
|
||||
ArrayList<String> infoStrings = new ArrayList<String>(5);
|
||||
ArrayList<String> addStrings = new ArrayList<String>(5);
|
||||
infoStrings.addAll(Arrays.asList(getSimpleOutputMetaInfo()));
|
||||
if (informerList != null) {
|
||||
headlineFields.addAll(getAdditionalInfoHeader(informerList, pop));
|
||||
getAdditionalHeaderMetaInfo(informerList, addStrings);
|
||||
}
|
||||
return headlineFields;
|
||||
infoStrings.addAll(addStrings);
|
||||
return infoStrings;
|
||||
}
|
||||
|
||||
protected String[] getOutputMetaInfoAsArray(List<InterfaceAdditionalPopulationInformer> informerList) {
|
||||
List<String> metaStrings = getOutputMetaInfo(informerList);
|
||||
return metaStrings.toArray( new String[metaStrings.size()]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Collect the names of data fields which are collected internally.This must correspond to the
|
||||
@ -632,6 +662,24 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
return headerEntries.toArray(new String[headerEntries.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Collect the info strings of data fields collected internally. This must correspond to
|
||||
* the method {@link #getSimpleOutputValues()}.
|
||||
*
|
||||
* @see #getSimpleOutputValues()
|
||||
* @return
|
||||
*/
|
||||
protected String[] getSimpleOutputMetaInfo() {
|
||||
GraphSelectionEnum[] vals = GraphSelectionEnum.values();
|
||||
ArrayList<String> headerInfo = new ArrayList<String>();
|
||||
headerInfo.add("The number of function evaluations");
|
||||
for (int i=0; i<vals.length; i++) {
|
||||
if (isRequestedField(vals[i])) headerInfo.add(GraphSelectionEnum.getInfoStrings()[i]);
|
||||
}
|
||||
// return new String[]{"Fun.calls","Best","Mean", "Worst"};
|
||||
return headerInfo.toArray(new String[headerInfo.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate whether the given statistics data type is requested to
|
||||
* be displayed (and thus needs to be calculated).
|
||||
@ -737,25 +785,34 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
return values;
|
||||
// return StringTools.concatValues(values, textFieldDelimiter);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Collect all field names of external informer instances.
|
||||
* Collect additional info header and (optionally) meta information for the fields selected.
|
||||
* The length of this list depends on the field selection state.
|
||||
*
|
||||
* @param informerList
|
||||
* @param pop
|
||||
* @param metaInfo if non null, the meta info strings are returned in this list
|
||||
* @return
|
||||
*/
|
||||
protected List<String> getAdditionalInfoHeader(List<InterfaceAdditionalPopulationInformer> informerList, PopulationInterface pop) {
|
||||
LinkedList<String> additionals = new LinkedList<String>();
|
||||
protected List<String> getAdditionalHeaderMetaInfo(List<InterfaceAdditionalPopulationInformer> informerList, List<String> metaInfo) {
|
||||
LinkedList<String> headers = new LinkedList<String>();
|
||||
if (metaInfo!=null && (metaInfo.size()>0)) System.err.println("Warning, metaInfo list should be empty in AbstractStatistics.getAdditionalInfoInfo");
|
||||
for (InterfaceAdditionalPopulationInformer informer : informerList) {
|
||||
additionals.addAll(Arrays.asList(informer.getAdditionalFileStringHeader(pop)));
|
||||
headers.addAll(Arrays.asList(informer.getAdditionalFileStringHeader()));
|
||||
if (metaInfo!=null) metaInfo.addAll(Arrays.asList(informer.getAdditionalFileStringInfo()));
|
||||
// hdr = hdr + "\t " + informer.getAdditionalFileStringHeader(pop);
|
||||
}
|
||||
Iterator<String> iter = additionals.iterator();
|
||||
if (!lastIsShowFull) while (iter.hasNext()) {
|
||||
if (!isRequestedAdditionalField(iter.next())) iter.remove();
|
||||
Iterator<String> hIter = headers.iterator();
|
||||
Iterator<String> mIter = (metaInfo!=null) ? metaInfo.iterator() : null;
|
||||
if (!lastIsShowFull) while (hIter.hasNext()) {
|
||||
if (mIter!=null) mIter.next();
|
||||
if (!isRequestedAdditionalField(hIter.next())) {
|
||||
hIter.remove();
|
||||
if (mIter!=null) mIter.remove();
|
||||
}
|
||||
}
|
||||
return additionals;
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -824,7 +881,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
// if (doTextOutput()) printToTextListener(getOutputHeader(null, null)+'\n');
|
||||
firstPlot = false;
|
||||
}
|
||||
if ((iterationCounter == 0) && printHeaderByVerbosity()) printToTextListener(getOutputHeaderString(null, null)+'\n');
|
||||
if ((iterationCounter == 0) && printHeaderByVerbosity()) printToTextListener(getOutputHeaderFieldNamesAsString(null)+'\n');
|
||||
|
||||
if (doTextOutput() && printLineByVerbosity(calls)) {
|
||||
Pair<String,Object[]> addInfo = getOutputData(null, null);
|
||||
@ -943,7 +1000,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
}
|
||||
|
||||
/**
|
||||
* Do some data collection on the population. The informer parameter will not be handled by this method.
|
||||
* Do some data collection on the population.
|
||||
*
|
||||
*/
|
||||
public synchronized void createNextGenerationPerformed(PopulationInterface
|
||||
@ -964,9 +1021,7 @@ public abstract class AbstractStatistics implements InterfaceTextListener, Inter
|
||||
collectPopData(pop);
|
||||
|
||||
if (iterationCounter==0) {
|
||||
List<String> headerFields=getOutputHeaderFieldNames(informerList, pop);
|
||||
currentHeaderData = headerFields.toArray(new String[headerFields.size()]);
|
||||
String headerLine = StringTools.concatFields(headerFields, textFieldDelimiter);
|
||||
String headerLine = StringTools.concatFields(currentStatHeader, textFieldDelimiter);
|
||||
if (printHeaderByVerbosity()) printToTextListener(headerLine+'\n');
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@ public interface InterfaceStatistics {
|
||||
/**
|
||||
* Initialize statistics computations.
|
||||
*/
|
||||
public void startOptPerformed(String InfoString,int runnumber, Object params); // called from processor
|
||||
public void startOptPerformed(String InfoString,int runnumber, Object params, List<InterfaceAdditionalPopulationInformer> informerList); // called from processor
|
||||
/**
|
||||
* Finalize statistics computations.
|
||||
*/
|
||||
|
@ -26,8 +26,10 @@ public interface InterfaceStatisticsListener {
|
||||
*
|
||||
* @param runNumber the number of the new run, starting with 0
|
||||
* @param plannedMultiRuns the number of planned multi-runs
|
||||
* @param header field names of the data
|
||||
* @param metaInfo additional meta information on the data fields
|
||||
*/
|
||||
public void notifyRunStarted(int runNumber, int plannedMultiRuns);
|
||||
public void notifyRunStarted(int runNumber, int plannedMultiRuns, String[] header, String[] metaInfo);
|
||||
|
||||
/**
|
||||
* Method called at the end of a single run.
|
||||
|
@ -79,7 +79,7 @@ public class StatisticsDummy implements InterfaceStatistics, InterfaceTextListen
|
||||
}
|
||||
|
||||
public void startOptPerformed(String InfoString, int runnumber,
|
||||
Object params) {
|
||||
Object params, List<InterfaceAdditionalPopulationInformer> informerList) {
|
||||
if (runnumber==0) bestIndividualAllover = null;
|
||||
bestRunIndy = null;
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ public class StatisticsStandalone extends AbstractStatistics implements Interfac
|
||||
protected void initPlots(PopulationInterface pop, List<InterfaceAdditionalPopulationInformer> informerList) {
|
||||
if (collectData) {
|
||||
m_ResultData = new ArrayList<ArrayList<Object[]>>(m_StatsParams.getMultiRuns());
|
||||
List<String> description = getOutputHeaderFieldNames(informerList, pop);
|
||||
List<String> description = getOutputHeaderFieldNames(informerList);
|
||||
m_ResultHeaderStrings = new ArrayList<String>();
|
||||
for (String str : description) m_ResultHeaderStrings.add(str);
|
||||
for (int i = 0; i < m_StatsParams.getMultiRuns(); i++)
|
||||
|
@ -99,8 +99,8 @@ public class StatisticsWithGUI extends AbstractStatistics implements Serializabl
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public synchronized void startOptPerformed(String infoString, int runNumber, Object goParams) {
|
||||
super.startOptPerformed(infoString, runNumber, goParams);
|
||||
public synchronized void startOptPerformed(String infoString, int runNumber, Object goParams, List<InterfaceAdditionalPopulationInformer> informerList) {
|
||||
super.startOptPerformed(infoString, runNumber, goParams, informerList);
|
||||
m_GraphInfoString = infoString;
|
||||
|
||||
// m_TextCounter = m_StatisticsParameter.GetTextoutput();
|
||||
|
@ -384,9 +384,9 @@ public class StatsParameter implements InterfaceStatisticsParameter, InterfaceNo
|
||||
ArrayList<String> infoFields = new ArrayList<String>();
|
||||
// parse list of header elements, show additional Strings according to names.
|
||||
for (InterfaceAdditionalPopulationInformer inf : informers) {
|
||||
headerFields.addAll(Arrays.asList(inf.getAdditionalFileStringHeader(null)));
|
||||
headerFields.addAll(Arrays.asList(inf.getAdditionalFileStringHeader()));
|
||||
if (infoFields.size()<headerFields.size()) { // add info strings for tool tips - fill up with null if none have been returned.
|
||||
String[] infos = inf.getAdditionalFileStringInfo(null);
|
||||
String[] infos = inf.getAdditionalFileStringInfo();
|
||||
if (infos!=null) infoFields.addAll(Arrays.asList(infos));
|
||||
while (infoFields.size()<headerFields.size()) infoFields.add(null);
|
||||
}
|
||||
|
@ -279,5 +279,17 @@ public class StringTools {
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String concatFields(String[] strs,
|
||||
String delim) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
int cnt=0;
|
||||
for (String str : strs) {
|
||||
if (cnt>0) sb.append(delim);
|
||||
sb.append(str);
|
||||
cnt++;
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user