diff --git a/src/javaeva/client/EvAClient.java b/src/javaeva/client/EvAClient.java
index f8977955..eb44020d 100644
--- a/src/javaeva/client/EvAClient.java
+++ b/src/javaeva/client/EvAClient.java
@@ -16,6 +16,7 @@ package javaeva.client;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Event;
+import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -24,8 +25,6 @@ import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.Serializable;
import java.net.URL;
-import java.util.Iterator;
-import java.util.Map;
import java.util.Properties;
import java.util.Set;
@@ -77,12 +76,14 @@ public class EvAClient implements RemoteStateListener, Serializable {
public static final String EVA_PROPERTY_FILE = "resources/JavaEvA.props";
private static Properties EVA_PROPERTIES;
public static final String iconLocation = "resources/images/JavaEvAIcon_3.gif";
-
+ private static final String splashLocation = "resources/images/JavaEvA2SplashScreen.png";
+// private static final String splashLocation = "resources/images/JavaEvA2SplashScreen.jpg";
+ final int splashScreenTime = 1500;
+
public static boolean TRACE = false;
- private static String m_ProductName = "JavaEvA";
+ private static String m_ProductName = "JavaEvA 2";
// private int PREFERRED_WIDTH = 680;
// private int PREFERRED_HEIGHT = 550;
- private JWindow m_splashScreen;
public JEFrame m_Frame;
private EvAComAdapter m_ComAdapter;
@@ -158,31 +159,28 @@ public class EvAClient implements RemoteStateListener, Serializable {
* Works as client for the JavaEva server.
*
*/
- public EvAClient(String hostName) {
- createSplashScreen();
+ public EvAClient(final String hostName) {
+ final SplashScreen fSplashScreen = new SplashScreen(splashLocation);
+
+ fSplashScreen.splash();
+
currentModule = null;
m_ComAdapter = EvAComAdapter.getInstance();
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- if (m_splashScreen != null) m_splashScreen.setVisible(true);
- }
- });
-
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- //init();
+
+ SwingUtilities.invokeLater( new Runnable() {
+ public void run(){
+ long startTime = System.currentTimeMillis();
+ init(hostName); // this takes a bit
+ long wait = System.currentTimeMillis() - startTime;
try {
- Thread.sleep(6000);
- } catch (Exception e) {
- System.out.println("error" + e.getMessage());
- }
- if (m_splashScreen != null) m_splashScreen.setVisible(false);
- m_splashScreen = null;
- }
+ // if splashScreenTime has not passed, sleep some more
+ if (wait < splashScreenTime) Thread.sleep(splashScreenTime - wait);
+ } catch (Exception e) {}
+ // close splash screen
+ fSplashScreen.dispose();
+ }
});
- init(hostName);
-
}
/**
@@ -258,27 +256,27 @@ public class EvAClient implements RemoteStateListener, Serializable {
m_Frame.setVisible(true);
}
}
-
- /**
- * Create the JavaEvA splash screen.
- */
- public void createSplashScreen() {
- BasicResourceLoader loader = BasicResourceLoader.instance();
- byte[] bytes = loader.getBytesFromResourceLocation("resources/images/JavaEvaSplashScreen.png");
- try {
- ImageIcon ii = new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes));
- JLabel splashLabel = new JLabel(ii);
- m_splashScreen = new JWindow();
- m_splashScreen.getContentPane().add(splashLabel);
- m_splashScreen.pack();
- Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
- //splashScreen.setSize(screenSize);
- m_splashScreen.setLocation(screenSize.width / 2 - m_splashScreen.getSize().width / 2, screenSize.height / 2 - m_splashScreen.getSize().height / 2);
- } catch (java.lang.NullPointerException e) {
- System.err.println("Could not find JavaEvA splash screen, please move rescoure folder to working directory!");
- }
-
- }
+//
+// /**
+// * Create the JavaEvA splash screen.
+// */
+// public void createSplashScreen() {
+// BasicResourceLoader loader = BasicResourceLoader.instance();
+// byte[] bytes = loader.getBytesFromResourceLocation("resources/images/JavaEvA2SplashScreen.jpg");
+// try {
+// ImageIcon ii = new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes));
+// JLabel splashLabel = new JLabel(ii);
+// m_splashScreen = new JWindow();
+// m_splashScreen.getContentPane().add(splashLabel);
+// m_splashScreen.pack();
+// Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+// //splashScreen.setSize(screenSize);
+// m_splashScreen.setLocation(screenSize.width / 2 - m_splashScreen.getSize().width / 2, screenSize.height / 2 - m_splashScreen.getSize().height / 2);
+// } catch (java.lang.NullPointerException e) {
+// System.err.println("Could not find JavaEvA splash screen, please move rescoure folder to working directory!");
+// }
+//
+// }
/**
* The one and only main of the client program.
@@ -415,7 +413,7 @@ public class EvAClient implements RemoteStateListener, Serializable {
try {
UIManager.setLookAndFeel(e.getActionCommand());
SwingUtilities.updateComponentTreeUI(m_Frame);
- // hier noch reinhacken dass alle frame geupdated werden.
+ // TODO hier noch reinhacken dass alle frame geupdated werden.
m_Frame.pack();
// m_Frame.setSize(new Dimension(900, 700));
// m_Frame.setVisible(true);
@@ -431,7 +429,7 @@ public class EvAClient implements RemoteStateListener, Serializable {
try {
UIManager.setLookAndFeel(LAF);
SwingUtilities.updateComponentTreeUI(m_Frame);
- m_Frame.pack();
+// m_Frame.pack();
// m_Frame.setSize(new Dimension(900, 700));
// m_Frame.setVisible(true);
} catch (ClassNotFoundException exc) {} catch (InstantiationException exc) {} catch (UnsupportedLookAndFeelException exc) {} catch (
@@ -461,15 +459,10 @@ public class EvAClient implements RemoteStateListener, Serializable {
);
m_mnuWindow.add(act);
}
-
}
-
public void menuCanceled(MenuEvent e) {
-
}
-
public void menuDeselected(MenuEvent e) {
-
}
}
);
@@ -677,8 +670,8 @@ public class EvAClient implements RemoteStateListener, Serializable {
JOptionPane.showMessageDialog
(m_Frame,
m_ProductName +
- "\n University of Tuebingen\n Computer Architecture\n Holger Ulmer & Felix Streichert & Hannes Planatscher \n Prof. Dr. Andreas Zell \n (c) 2007 \n Version " +
- EvAServer.Version + " \n http://www-ra.informatik.uni-tuebingen.de/software/JavaEvA/", "JavaEvA Information", 1);
+ "\n University of Tuebingen\n Computer Architecture\n H. Ulmer & F. Streichert & H. Planatscher & M. de Paly & M. Kronfeld\n Prof. Dr. Andreas Zell \n (c) 2008 \n Version " +
+ EvAServer.Version + " \n http://www.ra.cs.uni-tuebingen.de/software/JavaEvA", "JavaEvA Information", 1);
}
private void showNoHostFoundDialog() {
@@ -755,3 +748,38 @@ public class EvAClient implements RemoteStateListener, Serializable {
// System.out.println("object gives " + o);
// }
}
+
+final class SplashScreen extends Frame {
+ private static final long serialVersionUID = 1281793825850423095L;
+ String imgLocation;
+
+ public SplashScreen(String imgLoc) {
+ imgLocation = imgLoc;
+ }
+
+ /**
+ * Show the splash screen to the end user.
+ *
+ *
Once this method returns, the splash screen is realized, which means
+ * that almost all work on the splash screen should proceed through the event
+ * dispatch thread. In particular, any call to dispose
for the
+ * splash screen must be performed in the event dispatch thread.
+ */
+ public void splash(){
+ JWindow splashWindow = new JWindow(this);
+ BasicResourceLoader loader = BasicResourceLoader.instance();
+ byte[] bytes = loader.getBytesFromResourceLocation(imgLocation);
+ try {
+ ImageIcon ii = new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes));
+ JLabel splashLabel = new JLabel(ii);
+ splashWindow.add(splashLabel);
+ splashWindow.pack();
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ splashWindow.setLocation(screenSize.width / 2 - splashWindow.getSize().width / 2, screenSize.height / 2 - splashWindow.getSize().height / 2);
+ splashWindow.setVisible(true);
+ } catch (java.lang.NullPointerException e) {
+ System.err.println("Could not find JavaEvA splash screen, please move rescoure folder to working directory!");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/javaeva/gui/BeanInspector.java b/src/javaeva/gui/BeanInspector.java
index ba261eea..825f1705 100644
--- a/src/javaeva/gui/BeanInspector.java
+++ b/src/javaeva/gui/BeanInspector.java
@@ -21,6 +21,7 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
+import javaeva.server.go.populations.Population;
import javaeva.tools.SelectedTag;
import javaeva.tools.Tag;
@@ -132,6 +133,9 @@ public class BeanInspector {
/**
* Collect the accessible properties of an object and their values in a string.
+ * Special cases: Arrays and Lists are concatenations of their elements, Population is excepted from lists.
+ * If the object has its own toString method, this one is preferred. Hidden or expert properties are not
+ * shown.
*
* @param Target Description of the Parameter
* @return Description of the Return Value
@@ -154,7 +158,7 @@ public class BeanInspector {
return sbuf.toString();
}
- if (Target instanceof List) { // handle the list case
+ if (Target instanceof List && !(Target instanceof Population)) { // handle the list case
StringBuffer sbuf = new StringBuffer("[ ");
List> lst = (List>)Target;
for (Object o : lst) {
diff --git a/src/javaeva/gui/GenericObjectEditor.java b/src/javaeva/gui/GenericObjectEditor.java
index d396d4f0..dd71c5cb 100644
--- a/src/javaeva/gui/GenericObjectEditor.java
+++ b/src/javaeva/gui/GenericObjectEditor.java
@@ -11,45 +11,53 @@ package javaeva.gui;
*/
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.Rectangle;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.MethodDescriptor;
-import java.beans.PropertyDescriptor;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.PropertyEditor;
-import java.beans.PropertyChangeSupport;
-import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
-import java.beans.PropertyEditorManager;
-import java.io.File;
-import java.io.ObjectInputStream;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.beans.PropertyDescriptor;
+import java.beans.PropertyEditor;
import java.io.BufferedInputStream;
-import java.io.ObjectOutputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
-import java.io.BufferedOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.Proxy;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.border.LineBorder;
-
-import wsi.ra.jproxy.RMIProxyLocal;
-
-//import wsi.ra.tool.DummyCategory;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+import java.util.Vector;
import javaeva.client.EvAClient;
-import javaeva.tools.CompileAndLoad;
import javaeva.tools.EVAHELP;
import javaeva.tools.ReflectPackage;
-import javaeva.tools.Tag;
-import javaeva.tools.SelectedTag;
-import javaeva.tools.Serializer;
-import javaeva.server.stat.StatisticsParameter;
-import javaeva.server.stat.StatisticsParameterImpl;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import wsi.ra.jproxy.RMIProxyLocal;
/*==========================================================================*
@@ -61,7 +69,7 @@ public class GenericObjectEditor implements PropertyEditor {
private Object m_Object;
private Object m_Backup;
private PropertyChangeSupport m_Support = new PropertyChangeSupport(this);
- private Class m_ClassType;
+ private Class> m_ClassType;
private GOEPanel m_EditorComponent;
private boolean m_Enabled = true;
/**
@@ -501,7 +509,7 @@ public class GenericObjectEditor implements PropertyEditor {
System.err.println("warning: " + className + " is not a package!");
} else {
String pckg = className.substring(0, className.lastIndexOf('.'));
- Class[] clsArr;
+ Class>[] clsArr;
try {
clsArr = ReflectPackage.getAssignableClassesInPackage(pckg, Class.forName(className), true, true);
} catch (ClassNotFoundException e) {
@@ -513,11 +521,20 @@ public class GenericObjectEditor implements PropertyEditor {
+EvAClient.EVA_PROPERTY_FILE + " "+"for "+className);
classes.add(className);
} else {
- for (Class class1 : clsArr) {
+ for (Class> class1 : clsArr) {
int m = class1.getModifiers();
+ try {
+ // a field allowing a class to indicate it doesnt want to be displayed
+ Field f = class1.getDeclaredField("hideFromGOE");
+ if (f.getBoolean(class1) == true) {
+ if (TRACE) System.out.println("Class " + class1 + " wants to be hidden from GOE, skipping...");
+ continue;
+ }
+ } catch (Exception e) {}
+// if (f)
if (!Modifier.isAbstract(m) && !class1.isInterface()) { // dont take abstract classes or interfaces
try {
- Class[] params = new Class[0];
+ Class>[] params = new Class[0];
class1.getConstructor(params);
classes.add(class1.getName());
} catch (NoSuchMethodException e) {
@@ -543,7 +560,7 @@ public class GenericObjectEditor implements PropertyEditor {
* @param hide desired value to set, true for hidden, false for visible
* @return false, if an error occurs, else true
*/
- public static boolean setExpertProperty(Class cls, String property, boolean expertValue) {
+ public static boolean setExpertProperty(Class> cls, String property, boolean expertValue) {
try {
BeanInfo bi = Introspector.getBeanInfo(cls);
PropertyDescriptor[] props = bi.getPropertyDescriptors();
@@ -572,16 +589,20 @@ public class GenericObjectEditor implements PropertyEditor {
* @param hide desired value to set, true for hidden, false for visible
* @return false, if an error occurs, else true
*/
- public static boolean setHideProperty(Class cls, String property, boolean hide) {
+ public static boolean setHideProperty(Class> cls, String property, boolean hide) {
try {
BeanInfo bi = Introspector.getBeanInfo(cls);
PropertyDescriptor[] props = bi.getPropertyDescriptors();
for (int i=0; i cls, String property, boolean show) {
return GenericObjectEditor.setHideProperty(cls, property, !show);
}
@@ -617,7 +638,7 @@ public class GenericObjectEditor implements PropertyEditor {
*
* @param type a value of type 'Class'
*/
- public void setClassType(Class type) {
+ public void setClassType(Class> type) {
if (TRACE) System.out.println("GOE setClassType("+ (type == null? "" : type.getName()) + ")");
m_ClassType = type;
if (m_EditorComponent != null)
diff --git a/src/javaeva/gui/JTextoutputFrame.java b/src/javaeva/gui/JTextoutputFrame.java
index caeb79db..a0a8f024 100644
--- a/src/javaeva/gui/JTextoutputFrame.java
+++ b/src/javaeva/gui/JTextoutputFrame.java
@@ -12,124 +12,207 @@ package javaeva.gui;
/*==========================================================================*
* IMPORTS
*==========================================================================*/
-import javax.swing.JTextArea;
-import javax.swing.JViewport;
-import javax.swing.JFrame;
-import javax.swing.BorderFactory;
-import javax.swing.JScrollPane;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.ChangeEvent;
import java.awt.BorderLayout;
+import java.awt.Frame;
import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
-import java.awt.Frame;
-import java.awt.Toolkit;
import java.io.Serializable;
-import wsi.ra.tool.BasicResourceLoader;
+
import javaeva.client.EvAClient;
+import javaeva.tools.MultirunRefiner;
+
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JViewport;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import wsi.ra.tool.BasicResourceLoader;
/*==========================================================================*
-* CLASS DECLARATION
-*==========================================================================*/
+ * CLASS DECLARATION
+ *==========================================================================*/
/**
*
*/
public class JTextoutputFrame implements JTextoutputFrameInterface,
- Serializable {
- public static boolean TRACE = false;
- protected String m_Name ="undefined";
- private transient JTextArea m_TextArea;
- private boolean m_firstprint = true;
- private final JFrame frame;
- /**
- *
- */
- public JTextoutputFrame(String Title) {
- if (TRACE) System.out.println("JTextoutputFrame Constructor");
- m_Name = Title;
- frame = new JEFrame(m_Name);
- }
- /**
- *
- */
- public void print(String Text) {
- //System.out.println("Print:"+Text);
- if (m_firstprint==true) {
- m_firstprint = false;
- createFrame();
- }
- m_TextArea.append(Text);
- m_TextArea.repaint();
- }
-
- public void println(String txt) {
- print(txt+'\n');
- }
-
- public void setShow(boolean bShow) {
- if (frame.isVisible() != bShow) {
- if (frame.isVisible()) {
- frame.dispose();
- m_TextArea.setText(null);
- } else {
- if (m_firstprint) createFrame();
- else frame.setVisible(true);
+ActionListener,
+Serializable {
+ public static boolean TRACE = false;
+ protected String m_Name ="undefined";
+ private transient JTextArea m_TextArea = null;
+// private boolean m_firstprint = true;
+ private final JFrame frame;
+
+ JPopupMenu popup;
+ /**
+ *
+ */
+ public JTextoutputFrame(String Title) {
+ if (TRACE) System.out.println("JTextoutputFrame Constructor");
+ m_Name = Title;
+ frame = new JEFrame(m_Name);
+ m_TextArea = null;
+ }
+ /**
+ *
+ */
+ public void print(String Text) {
+ //System.out.println("Print:"+Text);
+ if (m_TextArea == null) {
+ createFrame();
+ }
+ m_TextArea.append(Text);
+ m_TextArea.repaint();
+ }
+
+ public void println(String txt) {
+ print(txt+'\n');
+ }
+
+ public void setShow(boolean bShow) {
+ if (frame.isVisible() != bShow) {
+ if (frame.isVisible()) {
+ frame.dispose();
+ m_TextArea.setText(null);
+ } else {
+ if (m_TextArea == null) createFrame();
+ else frame.setVisible(true);
+ frame.setEnabled(true);
+ }
}
}
- }
-
- /**
- *
- */
- private void createFrame() {
- if (TRACE) System.out.println("JTextoutputFrame createFrame");
- m_TextArea = new JTextArea(10,80);
- m_TextArea.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
- m_TextArea.setLineWrap(true);
- m_TextArea.setWrapStyleWord(true);
- m_TextArea.setEditable(false);
- m_TextArea.setCaretPosition(0);
- BasicResourceLoader loader = BasicResourceLoader.instance();
- byte[] bytes = loader.getBytesFromResourceLocation(EvAClient.iconLocation);
- try {
- frame.setIconImage(Toolkit.getDefaultToolkit().createImage(bytes));
- } catch (java.lang.NullPointerException e) {
- System.out.println("Could not find JavaEvA icon, please move resource folder to working directory!");
- }
- frame.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- frame.dispose();
- }
- });
- frame.getContentPane().setLayout(new BorderLayout());
- //frame.getContentPane().add(new JScrollPane(m_TextArea), BorderLayout.CENTER);
- final JScrollPane scrollpane = new JScrollPane(m_TextArea);
- frame.getContentPane().add(scrollpane, BorderLayout.CENTER);
- scrollpane.getViewport().addChangeListener(new ChangeListener() {
- private int lastHeight;
- //
- public void stateChanged(ChangeEvent e) {
- JViewport viewport = (JViewport)e.getSource();
- int Height = viewport.getViewSize().height;
- if (Height != lastHeight) {
- lastHeight = Height;
- int x = Height - viewport.getExtentSize().height;
- viewport.setViewPosition(new Point(0, x));
+ /**
+ *
+ */
+ private void createFrame() {
+ if (TRACE) System.out.println("JTextoutputFrame createFrame");
+ m_TextArea = new JTextArea(10,80);
+ m_TextArea.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+ m_TextArea.setLineWrap(true);
+ m_TextArea.setWrapStyleWord(true);
+ m_TextArea.setEditable(false);
+ m_TextArea.setCaretPosition(0);
+
+ BasicResourceLoader loader = BasicResourceLoader.instance();
+ byte[] bytes = loader.getBytesFromResourceLocation(EvAClient.iconLocation);
+ try {
+ frame.setIconImage(Toolkit.getDefaultToolkit().createImage(bytes));
+ } catch (java.lang.NullPointerException e) {
+ System.out.println("Could not find JavaEvA icon, please move resource folder to working directory!");
+ }
+ frame.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ frame.dispose();
+ frame.setEnabled(false);
+ }
+ });
+ frame.getContentPane().setLayout(new BorderLayout());
+ //frame.getContentPane().add(new JScrollPane(m_TextArea), BorderLayout.CENTER);
+ final JScrollPane scrollpane = new JScrollPane(m_TextArea);
+ frame.getContentPane().add(scrollpane, BorderLayout.CENTER);
+ scrollpane.getViewport().addChangeListener(new ChangeListener() {
+ private int lastHeight;
+ //
+ public void stateChanged(ChangeEvent e) {
+ JViewport viewport = (JViewport)e.getSource();
+ int Height = viewport.getViewSize().height;
+ if (Height != lastHeight) {
+ lastHeight = Height;
+ int x = Height - viewport.getExtentSize().height;
+ viewport.setViewPosition(new Point(0, x));
+ }
+ }
+ });
+ makePopupMenu();
+ frame.pack();
+ frame.setSize(800, 400);
+ frame.setVisible(true);
+ frame.setState(Frame.ICONIFIED);
+ }
+
+ /**
+ *output
+ */
+ public static void main( String[] args ){
+ JTextoutputFrame test = new JTextoutputFrame("hi");
+ while (test.frame.isEnabled()) {
+ test.print("Test 12345");
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ System.out.println("Done!");
+ }
+
+
+ void makePopupMenu() {
+ //Create the popup menu.
+ popup = new JPopupMenu();
+ JMenuItem menuItem = new JMenuItem("Clear");
+ menuItem.addActionListener(this);
+ popup.add(menuItem);
+// menuItem = new JMenuItem("Refine Multiruns");
+// menuItem.addActionListener(this);
+// popup.add(menuItem);
+
+ //Add listener to components that can bring up popup menus.
+ MouseListener popupListener = new PopupListener(popup);
+// frame.addMouseListener(popupListener);
+ m_TextArea.addMouseListener(popupListener);
+// menuBar.addMouseListener(popupListener);
+
+
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ if (e.getSource() == popup.getComponent(0)) {
+ m_TextArea.setText(null);
+ }
+// else if (e.getSource() == popup.getComponent(1)) {
+// m_TextArea.append(MultirunRefiner.refineToText(m_TextArea.getText()));
+// }
+ else System.out.println("no popup component!");
}
- }
- });
- frame.pack();
- frame.setSize(800, 400);
- frame.setVisible(true);
- frame.setState(Frame.ICONIFIED);
- }
- /**
- *
- */
- public static void main( String[] args ){
- JTextoutputFrame test = new JTextoutputFrame("hi");
- while(true)
- test.print("Test 12345");
- }
}
+
+/**
+ * A popup listener opening a popup menu on right clicks.
+ *
+ * @author mkron
+ */
+class PopupListener extends MouseAdapter {
+ JPopupMenu popup;
+
+ public PopupListener(JPopupMenu pm) {
+ popup = pm;
+ }
+ public void mousePressed(MouseEvent e) {
+ maybeShowPopup(e);
+ }
+
+ public void mouseReleased(MouseEvent e) {
+ maybeShowPopup(e);
+ }
+
+ private void maybeShowPopup(MouseEvent e) {
+ if (e.isPopupTrigger()) {
+ popup.show(e.getComponent(),
+ e.getX(), e.getY());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/javaeva/gui/PropertyRemoteServers.java b/src/javaeva/gui/PropertyRemoteServers.java
index c134bb90..942224c6 100644
--- a/src/javaeva/gui/PropertyRemoteServers.java
+++ b/src/javaeva/gui/PropertyRemoteServers.java
@@ -1,17 +1,10 @@
package javaeva.gui;
//import javaeva.tools.ServerStarter;
-import javaeva.server.go.strategies.GeneticAlgorithm;
-import javaeva.server.go.strategies.InterfaceOptimizer;
-import javaeva.server.EvAMainAdapterImpl;
-import javaeva.server.EvAMainAdapter;
-
-import java.util.ArrayList;
import java.rmi.Naming;
+import java.util.ArrayList;
-import wsi.ra.jproxy.RMIProxyRemoteThread;
import wsi.ra.jproxy.RMIInvocationHandler;
-import wsi.ra.jproxy.RMIServer;
/**
* Created by IntelliJ IDEA.
@@ -41,18 +34,17 @@ class ServerNode implements java.io.Serializable {
public class PropertyRemoteServers implements java.io.Serializable {
private ServerNode[] m_AvailableNodes;
- private String m_ClassToStart = "wsi.ra.jproxy.RMIServer";
+// private String m_ClassToStart = "wsi.ra.jproxy.RMIServer";
private transient String m_password = "";
- private String m_Login = "streiche";
- private boolean m_DeployJar = true;
- private String m_JarToDeploy = "JOpt.jar";
+ private String m_Login = "";
+// private boolean m_DeployJar = true;
+// private String m_JarToDeploy = "JOpt.jar";
public PropertyRemoteServers() {
this.m_AvailableNodes = new ServerNode[0];
- this.addServerNode("raold1.informatik.uni-tuebingen.de", 2);
- this.addServerNode("raold2.informatik.uni-tuebingen.de", 2);
- this.setLogin("streiche");
- this.setPassword("Kuskus");
+ this.addServerNode("exampleNode.uni-tuebingen.de", 2);
+ this.setLogin("username");
+ this.setPassword("");
}
public PropertyRemoteServers(PropertyRemoteServers e) {
diff --git a/src/javaeva/gui/PropertySheetPanel.java b/src/javaeva/gui/PropertySheetPanel.java
index b32ef6a6..00b5b06b 100644
--- a/src/javaeva/gui/PropertySheetPanel.java
+++ b/src/javaeva/gui/PropertySheetPanel.java
@@ -12,15 +12,40 @@ package javaeva.gui;
/*==========================================================================*
* IMPORTS
*==========================================================================*/
-import java.util.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.*;
-import java.lang.reflect.*;
-import javax.swing.*;
-import sun.beans.editors.*;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.BeanInfo;
+import java.beans.Beans;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.MethodDescriptor;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.beans.PropertyDescriptor;
+import java.beans.PropertyEditor;
+import java.beans.PropertyVetoException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
import javaeva.tools.EVAHELP;
-import javaeva.tools.SelectedTag;
+import javaeva.tools.StringTools;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+import javax.swing.SwingConstants;
/*==========================================================================*
* CLASS DECLARATION
*==========================================================================*/
@@ -53,6 +78,8 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
private JButton m_HelpBut;
/** A count of the number of properties we have an editor for */
private int m_NumEditable = 0;
+ /** How long should a tip text line be (translated to HTML) */
+ private int tipTextLineLen = 50;
/** A support object for handling property change listeners */
private PropertyChangeSupport m_support = new PropertyChangeSupport(this);
/** set true to use the GOE by default if no other editor is registered **/
@@ -249,34 +276,8 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
continue;
}
editor.setValue(value);
-
- // now look for a TipText method for this property
- String tipName = name + "TipText";
- for (int j = 0; j < m_Methods.length; j++) {
- String mname = m_Methods[j].getDisplayName();
- Method meth = m_Methods[j].getMethod();
- if (mname.equals(tipName)) {
- if (meth.getReturnType().equals(String.class)) {
- try {
- String tempTip = (String)(meth.invoke(m_Target, args));
- int ci = tempTip.indexOf('.');
- if (ci < 0) m_TipTexts[i] = tempTip;
- else m_TipTexts[i] = tempTip.substring(0, ci);
-// if (m_HelpText != null) {
-// if (firstTip) {
-// m_HelpText.append("OPTIONS\n");
-// firstTip = false;
-// }
-// m_HelpText.append(name).append(" -- ");
-// m_HelpText.append(tempTip).append("\n\n");
-// //jt.setText(m_HelpText.toString());
-// }
- } catch (Exception ex) {
- }
- break;
- }
- }
- } // end searching for (int j = 0; j < m_Methods.length; j++) {
+
+ m_TipTexts[i] = getToolTipText(name, m_Methods, m_Target, tipTextLineLen);
// Now figure out how to display it...
if (editor instanceof sun.beans.editors.BoolEditor) {
@@ -445,7 +446,7 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
validate();
setVisible(true);
}
-
+
/**
* Get the html help file name.
*
@@ -713,8 +714,8 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
* @param target The target object
* @return String for the tooltip.
*/
- private String getToolTipText(String name, MethodDescriptor[] methods, Object target) {
- String result = "No tooltip available.";
+ private String getToolTipText(String name, MethodDescriptor[] methods, Object target, int toHTMLLen) {
+ String result = "";
String tipName = name + "TipText";
for (int j = 0; j < methods.length; j++) {
String mname = methods[j].getDisplayName();
@@ -729,12 +730,14 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
else result = tempTip.substring(0, ci);
} catch (Exception ex) {
}
- return result;
+ break;
}
}
} // end for looking for tiptext
- return result;
+ if (toHTMLLen > 0) return StringTools.toHTML(result, toHTMLLen);
+ else return result;
}
+
}
diff --git a/src/javaeva/server/go/individuals/AbstractEAIndividual.java b/src/javaeva/server/go/individuals/AbstractEAIndividual.java
index 1b236317..b09289ce 100644
--- a/src/javaeva/server/go/individuals/AbstractEAIndividual.java
+++ b/src/javaeva/server/go/individuals/AbstractEAIndividual.java
@@ -139,9 +139,11 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java.
* @return boolean if equal fitness true else false.
*/
public boolean equalFitness(AbstractEAIndividual indy) {
- if (this.m_Fitness.length != indy.m_Fitness.length) return false;
- for (int i = 0; i < this.m_Fitness.length; i++) {
- if (this.m_Fitness[i] != indy.m_Fitness[i]) return false;
+ double[] myF = getFitness();
+ double[] oF = indy.getFitness();
+ if (myF.length != oF.length) return false;
+ for (int i = 0; i < oF.length; i++) {
+ if (myF[i] != oF[i]) return false;
}
return true;
}
@@ -374,7 +376,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java.
public boolean isDominating(AbstractEAIndividual indy) {
if (this.m_AreaConst4ParallelViolated) return false;
if (indy.m_AreaConst4ParallelViolated) return true;
- return isDominatingFitness(m_Fitness, indy.getFitness());
+ return isDominatingFitness(getFitness(), indy.getFitness());
// for (int i = 0; (i < this.m_Fitness.length) && (i < tmpFitness.length); i++) {
// if (this.m_Fitness[i] <= tmpFitness[i]) result &= true;
// else result &= false;
@@ -433,7 +435,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java.
if (this.m_ConstraintViolation > indy.m_ConstraintViolation) return false;
else return true;
}
- return isDominatingFitness(m_Fitness, tmpFitness);
+ return isDominatingFitness(getFitness(), tmpFitness);
// for (int i = 0; (i < this.m_Fitness.length) && (i < tmpFitness.length); i++) {
// if (this.m_Fitness[i] <= tmpFitness[i]) result &= true;
// else result &= false;
@@ -451,7 +453,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java.
// TODO: should this method really be called "..Equal"?
if (this.m_AreaConst4ParallelViolated) return false;
if (indy.m_AreaConst4ParallelViolated) return true;
- return isDominatingFitnessNotEqual(m_Fitness, indy.getFitness());
+ return isDominatingFitnessNotEqual(getFitness(), indy.getFitness());
}
/** This method will allow you to compare two individuals regarding the dominance.
@@ -475,7 +477,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java.
// if (this.m_Fitness[i] < tmpFitness[i]) result &= true;
// else result &= false;
// }
- return isDominatingFitnessNotEqual(m_Fitness, indy.getFitness());
+ return isDominatingFitnessNotEqual(getFitness(), indy.getFitness());
}
/** This method can be used to read the current selection probability of the individual.
diff --git a/src/javaeva/server/go/mocco/MOCCOPhase.java b/src/javaeva/server/go/mocco/MOCCOPhase.java
index 424f8341..c8d8fd5d 100644
--- a/src/javaeva/server/go/mocco/MOCCOPhase.java
+++ b/src/javaeva/server/go/mocco/MOCCOPhase.java
@@ -1,24 +1,21 @@
package javaeva.server.go.mocco;
-import javaeva.server.go.MOCCOStandalone;
-import javaeva.server.go.problems.InterfaceMultiObjectiveDeNovoProblem;
-import javaeva.server.go.problems.InterfaceOptimizationObjective;
-import javaeva.server.go.tools.GeneralGOEProperty;
-import javaeva.client.EvAClient;
-import javaeva.tools.CompileAndLoad;
-import javaeva.tools.ReflectPackage;
-import javaeva.gui.PropertyBoolSelector;
-import javaeva.gui.PropertyText;
-import javaeva.gui.PropertyPanel;
-import javaeva.gui.PropertyValueSelector;
-
-import javax.swing.*;
-import java.awt.event.ActionListener;
+import java.awt.BorderLayout;
+import java.awt.Font;
import java.awt.event.ActionEvent;
-import java.awt.*;
-import java.util.Vector;
-import java.util.StringTokenizer;
-import java.util.ArrayList;
+import java.awt.event.ActionListener;
+
+import javaeva.gui.PropertyBoolSelector;
+import javaeva.gui.PropertyPanel;
+import javaeva.gui.PropertyText;
+import javaeva.gui.PropertyValueSelector;
+import javaeva.server.go.MOCCOStandalone;
+import javaeva.server.go.tools.GeneralGOEProperty;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
/**
* Created by IntelliJ IDEA.
diff --git a/src/javaeva/server/go/operators/postprocess/PostProcess.java b/src/javaeva/server/go/operators/postprocess/PostProcess.java
index b7960613..e6fe5508 100644
--- a/src/javaeva/server/go/operators/postprocess/PostProcess.java
+++ b/src/javaeva/server/go/operators/postprocess/PostProcess.java
@@ -15,6 +15,7 @@ import javaeva.server.go.operators.mutation.InterfaceMutation;
import javaeva.server.go.operators.mutation.MutateESFixedStepSize;
import javaeva.server.go.operators.terminators.EvaluationTerminator;
import javaeva.server.go.populations.Population;
+import javaeva.server.go.problems.AbstractMultiModalProblemKnown;
import javaeva.server.go.problems.AbstractOptimizationProblem;
import javaeva.server.go.problems.FM0Problem;
import javaeva.server.go.problems.InterfaceMultimodalProblemKnown;
@@ -476,12 +477,13 @@ public class PostProcess {
public static void procMultiModalKnown(Population solutions, InterfaceMultimodalProblemKnown mmkProb, InterfaceTextListener listener) {
// Population found = getFoundOptima(solutions, mmkProb.getRealOptima(), mmkProb.getEpsilon(), true);
if (listener != null) {
+ listener.println("number of known optima is " + mmkProb.getRealOptima().size());
listener.println("default epsilon is " + mmkProb.getEpsilon());
listener.println("max peak ratio is " + mmkProb.getMaximumPeakRatio(getFoundOptima(solutions, mmkProb.getRealOptima(), mmkProb.getEpsilon(), true)));
}
for (double epsilon=0.1; epsilon > 0.00000001; epsilon/=10.) {
// out.println("no optima found: " + ((InterfaceMultimodalProblemKnown)mmProb).getNumberOfFoundOptima(pop));
- if (listener != null) listener.println("found " + getFoundOptima(solutions, mmkProb.getRealOptima(), epsilon, true).size() + " for epsilon = " + epsilon);
+ if (listener != null) listener.println("found " + getFoundOptima(solutions, mmkProb.getRealOptima(), epsilon, true).size() + " for epsilon = " + epsilon + ", maxPeakRatio: " + ((AbstractMultiModalProblemKnown)mmkProb).getMaximumPeakRatio(solutions, epsilon));
}
}
diff --git a/src/javaeva/server/go/populations/PBILPopulation.java b/src/javaeva/server/go/populations/PBILPopulation.java
index 6c26c2e6..5920e4d3 100644
--- a/src/javaeva/server/go/populations/PBILPopulation.java
+++ b/src/javaeva/server/go/populations/PBILPopulation.java
@@ -47,7 +47,7 @@ public class PBILPopulation extends Population implements Cloneable, java.io.Ser
this.m_Generation = 0;
this.m_FunctionCalls = 0;
if (!(this.get(0) instanceof InterfaceGAIndividual)) {
- System.out.println("Members of the population are not instance of InterfaceGAIndividual!");
+ System.err.println("Members of the population are not instance of InterfaceGAIndividual!");
return;
}
this.m_ProbabilityVector = new double[((InterfaceGAIndividual)this.get(0)).getGenotypeLength()];
@@ -63,9 +63,9 @@ public class PBILPopulation extends Population implements Cloneable, java.io.Ser
public void learnFrom (Population examples, double learnRate) {
InterfaceGAIndividual tmpIndy;
BitSet tmpBitSet;
-
+
for (int i = 0; i < examples.size(); i++) {
- tmpIndy = (InterfaceGAIndividual)((AbstractEAIndividual)examples.get(i)).clone();
+ tmpIndy = (InterfaceGAIndividual)(examples.getEAIndividual(i)).clone();
tmpBitSet = tmpIndy.getBGenotype();
for (int j = 0; j < this.m_ProbabilityVector.length; j++) {
this.m_ProbabilityVector[j] = this.m_ProbabilityVector[j] * (1.0 - learnRate);
diff --git a/src/javaeva/server/go/problems/AbstractMultiModalProblemKnown.java b/src/javaeva/server/go/problems/AbstractMultiModalProblemKnown.java
index e7d6fa47..c5706fb1 100644
--- a/src/javaeva/server/go/problems/AbstractMultiModalProblemKnown.java
+++ b/src/javaeva/server/go/problems/AbstractMultiModalProblemKnown.java
@@ -229,8 +229,12 @@ public abstract class AbstractMultiModalProblemKnown extends AbstractProblemDoub
* @return double
*/
public double getMaximumPeakRatio(Population pop) {
+ return getMaximumPeakRatio(pop, m_Epsilon);
+ }
+
+ public double getMaximumPeakRatio(Population pop, double epsilon) {
double optimaInvertedSum = 0, foundInvertedSum = 0;
- AbstractEAIndividual[] optsFound = PostProcess.getFoundOptimaArray(pop, m_Optima, m_Epsilon, true);
+ AbstractEAIndividual[] optsFound = PostProcess.getFoundOptimaArray(pop, m_Optima, epsilon, true);
for (int i=0; i 0) { // avoid evil case setting dim to 0 during object init
- ((ESIndividualDoubleData)this.m_Template).setDoubleDataLength(getProblemDimension());
- ((ESIndividualDoubleData)this.m_Template).SetDoubleRange(makeRange());
+ ((InterfaceDataTypeDouble)this.m_Template).setDoubleDataLength(getProblemDimension());
+ ((InterfaceDataTypeDouble)this.m_Template).SetDoubleRange(makeRange());
}
}
diff --git a/src/javaeva/server/go/problems/MatlabProblem.java b/src/javaeva/server/go/problems/MatlabProblem.java
index 1dfacf16..e0a70857 100644
--- a/src/javaeva/server/go/problems/MatlabProblem.java
+++ b/src/javaeva/server/go/problems/MatlabProblem.java
@@ -35,6 +35,7 @@ public class MatlabProblem extends AbstractProblemDouble implements InterfaceTex
boolean forwardStatisticsOutput = false;
private MatlabEvalMediator handler = null;
+ public static boolean hideFromGOE = true;
private F1Problem f1 = new F1Problem(); // TODO
diff --git a/src/javaeva/server/go/strategies/ClusterBasedNichingEA.java b/src/javaeva/server/go/strategies/ClusterBasedNichingEA.java
index 425cf486..6605050f 100644
--- a/src/javaeva/server/go/strategies/ClusterBasedNichingEA.java
+++ b/src/javaeva/server/go/strategies/ClusterBasedNichingEA.java
@@ -832,7 +832,7 @@ public class ClusterBasedNichingEA implements InterfacePopulationChangedEventLis
this.m_ShowCycle = b;
}
public String showCycleTipText() {
- return "Determines how often show is performed.";
+ return "Determines how often show is performed (generations); set to zero to deactivate.";
}
/** Determines the size of the initial population.
* @return This number gives initial population size.
diff --git a/src/javaeva/server/go/strategies/HillClimbing.java b/src/javaeva/server/go/strategies/HillClimbing.java
index 021325e7..b5309e57 100644
--- a/src/javaeva/server/go/strategies/HillClimbing.java
+++ b/src/javaeva/server/go/strategies/HillClimbing.java
@@ -1,5 +1,6 @@
package javaeva.server.go.strategies;
+import javaeva.gui.BeanInspector;
import javaeva.server.go.InterfacePopulationChangedEventListener;
import javaeva.server.go.individuals.AbstractEAIndividual;
import javaeva.server.go.operators.mutation.InterfaceMutation;
@@ -87,7 +88,9 @@ public class HillClimbing implements InterfaceOptimizer, java.io.Serializable {
if (((AbstractEAIndividual)original.get(i)).isDominatingDebConstraints(((AbstractEAIndividual)this.m_Population.get(i)))) {
this.m_Population.remove(i);
this.m_Population.add(i, original.get(i));
- } // else: mutation improved the individual
+ } else {
+ // else: mutation improved the individual
+ }
}
this.m_Population.incrGeneration();
// for (int i = 0; i < this.m_Population.size(); i++) {
diff --git a/src/javaeva/server/go/strategies/IslandModelEA.java b/src/javaeva/server/go/strategies/IslandModelEA.java
index 7a53e30c..bee15af2 100644
--- a/src/javaeva/server/go/strategies/IslandModelEA.java
+++ b/src/javaeva/server/go/strategies/IslandModelEA.java
@@ -26,6 +26,12 @@ import wsi.ra.jproxy.RMIServer;
* island-model has been implemented too to allow fast and reliabel computation.
* This is still usefull, since it is less prone to premature convergence and also
* an heterogenuous island model can be used.
+ *
+ * A population of the same size is sent to all nodes and evaluated there independently
+ * for a cycle (more precisely: for MigrationRate generations) after which a communication
+ * step is performed according to the migration model. Only after migration is a main
+ * cycle complete, the statistics updated etc.
+ *
* Created by IntelliJ IDEA.
* User: streiche
* Date: 12.09.2004
@@ -91,7 +97,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
this.m_Optimizer.SetProblem(this.m_Problem);
InterfacePopulationChangedEventListener myLocal = null;
if (this.m_Parallelize) {
- // this is running on remote maschines
+ // this is running on remote machines
if (this.m_LocalServer == null) this.m_LocalServer = RMIServer.getInstance();
try {
myLocal = (InterfacePopulationChangedEventListener) RMIProxyLocal.newInstance(this);
diff --git a/src/javaeva/server/go/strategies/PopulationBasedIncrementalLearning.java b/src/javaeva/server/go/strategies/PopulationBasedIncrementalLearning.java
index 6f3bc54c..4afb66de 100644
--- a/src/javaeva/server/go/strategies/PopulationBasedIncrementalLearning.java
+++ b/src/javaeva/server/go/strategies/PopulationBasedIncrementalLearning.java
@@ -2,10 +2,12 @@ package javaeva.server.go.strategies;
import javaeva.server.go.InterfacePopulationChangedEventListener;
import javaeva.server.go.individuals.AbstractEAIndividual;
+import javaeva.server.go.individuals.InterfaceGAIndividual;
import javaeva.server.go.operators.selection.InterfaceSelection;
import javaeva.server.go.operators.selection.SelectBestIndividuals;
import javaeva.server.go.populations.PBILPopulation;
import javaeva.server.go.populations.Population;
+import javaeva.server.go.problems.AbstractOptimizationProblem;
import javaeva.server.go.problems.B1Problem;
import javaeva.server.go.problems.InterfaceOptimizationProblem;
@@ -64,6 +66,9 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
* @param reset If true the population is reset.
*/
public void initByPopulation(Population pop, boolean reset) {
+ if (!(pop.getEAIndividual(0) instanceof InterfaceGAIndividual)) {
+ System.err.println("Error: PBIL only works with GAIndividuals!");
+ }
this.m_Population = new PBILPopulation();
if (reset) this.m_Population.init();
this.m_Population.addPopulation((Population)pop.clone());
@@ -120,6 +125,11 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
*/
public void SetProblem (InterfaceOptimizationProblem problem) {
this.m_Problem = problem;
+ if (m_Problem instanceof AbstractOptimizationProblem) {
+ if (!(((AbstractOptimizationProblem)m_Problem).getIndividualTemplate() instanceof InterfaceGAIndividual)) {
+ System.err.println("Error: PBIL only works with GAIndividuals!");
+ }
+ }
}
public InterfaceOptimizationProblem getProblem () {
return this.m_Problem;
diff --git a/src/javaeva/server/go/strategies/Tribes.java b/src/javaeva/server/go/strategies/Tribes.java
index d8ce4e25..700b6953 100644
--- a/src/javaeva/server/go/strategies/Tribes.java
+++ b/src/javaeva/server/go/strategies/Tribes.java
@@ -723,16 +723,13 @@ public class Tribes implements InterfaceOptimizer, java.io.Serializable {
public String globalInfo() {
return "TRIBES: a parameter free PSO implementation by Maurice Clerc.";
}
-
- public void incEvalCnt(int k) {
- population.incrFunctionCallsby(k);
- if (notifyAfter(population.getFunctionCalls())) {
- firePropertyChangedEvent("NextGenerationPerformed");
- }
- }
public void incEvalCnt() {
- incEvalCnt(1);
+ population.incrFunctionCalls();
+ if (notifyAfter(population.getFunctionCalls())) {
+// System.out.println("Notifying after " + population.getFunctionCalls());
+ firePropertyChangedEvent("NextGenerationPerformed");
+ }
}
public double getObjectiveFirstDim() {
diff --git a/src/javaeva/server/go/strategies/tribes/TribesExplorer.java b/src/javaeva/server/go/strategies/tribes/TribesExplorer.java
index f311d5e4..2a105aee 100644
--- a/src/javaeva/server/go/strategies/tribes/TribesExplorer.java
+++ b/src/javaeva/server/go/strategies/tribes/TribesExplorer.java
@@ -2,12 +2,13 @@ package javaeva.server.go.strategies.tribes;
import javaeva.server.go.individuals.AbstractEAIndividual;
import javaeva.server.go.individuals.InterfaceDataTypeDouble;
+import javaeva.server.go.individuals.InterfaceESIndividual;
import javaeva.server.go.populations.Population;
import javaeva.server.go.problems.InterfaceOptimizationProblem;
import javaeva.server.go.strategies.Tribes;
import javaeva.server.go.tools.RandomNumberGenerator;
-public class TribesExplorer extends AbstractEAIndividual implements InterfaceDataTypeDouble {
+public class TribesExplorer extends AbstractEAIndividual implements InterfaceESIndividual, InterfaceDataTypeDouble {
/**
*
*/
@@ -82,11 +83,11 @@ public class TribesExplorer extends AbstractEAIndividual implements InterfaceDat
// }
public double[] getFitness() {
- return position.fitness;
+ return position.getFitness();
}
public double getFitness(int index) {
- return position.fitness[index];
+ return position.getFitness()[index];
}
/**
@@ -95,6 +96,7 @@ public class TribesExplorer extends AbstractEAIndividual implements InterfaceDat
*/
public void SetFitness(double[] fitness) {
position.fitness = fitness;
+ super.SetFitness(fitness);
fitness[0] -= objectiveValueFirstDim;
position.setTotalError();
}
@@ -104,6 +106,7 @@ public class TribesExplorer extends AbstractEAIndividual implements InterfaceDat
* by reducing the fitness (in the first dimension).
*/
public void SetFitness(int index, double fitness) {
+ super.SetFitness(index, fitness);
if (index > position.fitness.length) {
double[] newFit = new double[index+1];
System.arraycopy(position.fitness, 0, newFit, 0, position.fitness.length);
@@ -440,11 +443,11 @@ public class TribesExplorer extends AbstractEAIndividual implements InterfaceDat
// pb.fitnessSize, eval);
} else { // Artificial fitness by using penalties
for (n = 0; n < position.fitness.length; n++) {
- position.fitness[n] = swarm.tribes[fromTribe].memory[
+ SetFitness(n, swarm.tribes[fromTribe].memory[
contact].
getPos().
fitness[n] +
- keepInPenalty(range, position);
+ keepInPenalty(range, position));
}
// position.totalError(position.fitness); // MK: this wont actually do anything
}
@@ -1016,4 +1019,20 @@ v[d] = cmin * v[d];
public int size() {
return position.x.length;
}
+
+ public void SetDGenotype(double[] b) {
+ position.setDoubleArray(b);
+ }
+
+ public void defaultInit() {
+ System.err.println("defaultInit not available for TribesExplorer!");
+ }
+
+ public void defaultMutate() {
+ System.err.println("defaultMutate not available for TribesExplorer!");
+ }
+
+ public double[] getDGenotype() {
+ return position.getDoubleArray().clone();
+ }
}
diff --git a/src/javaeva/server/go/strategies/tribes/TribesMemory.java b/src/javaeva/server/go/strategies/tribes/TribesMemory.java
index b692a521..a950c1b1 100644
--- a/src/javaeva/server/go/strategies/tribes/TribesMemory.java
+++ b/src/javaeva/server/go/strategies/tribes/TribesMemory.java
@@ -65,7 +65,7 @@ public class TribesMemory implements java.io.Serializable {
si la valeur de la position a diminué
*/
- if (position.firstIsBetter(position.fitness,positionPrev.fitness)) {
+ if (position.firstIsBetter(position.getFitness(),positionPrev.getFitness())) {
return 1;
}
return 0;
diff --git a/src/javaeva/server/go/strategies/tribes/TribesPosition.java b/src/javaeva/server/go/strategies/tribes/TribesPosition.java
index 10b3bd68..131e9679 100644
--- a/src/javaeva/server/go/strategies/tribes/TribesPosition.java
+++ b/src/javaeva/server/go/strategies/tribes/TribesPosition.java
@@ -54,10 +54,22 @@ public class TribesPosition implements java.io.Serializable {
return x;
}
+ /**
+ * This one makes a deep copy.
+ * @param vals
+ */
public void setDoubleArray(double[] vals) {
x = vals.clone();
}
+ /**
+ * This one makes a shallow copy.
+ * @param fit
+ */
+ public void setFitness(double[] fit) {
+ fitness = fit;
+ }
+
public int getMaxDimension() {
return x.length;
}
diff --git a/src/javaeva/server/go/strategies/tribes/TribesSwarm.java b/src/javaeva/server/go/strategies/tribes/TribesSwarm.java
index db0f40d7..a53939a5 100644
--- a/src/javaeva/server/go/strategies/tribes/TribesSwarm.java
+++ b/src/javaeva/server/go/strategies/tribes/TribesSwarm.java
@@ -105,11 +105,11 @@ public class TribesSwarm implements java.io.Serializable{
// swarmInitOption -> param option Options: 0 - random, 1 - on the bounds, 2 - sunny spell, 3 - around a center
// rangeInitType -> initType: for options 0,1: 1 means use initRange, 0 use default range
explorer[n] = generateExplorer(null, -1, swarmInitOption, -1, rangeInitType, prob, false);
-
+ masterTribe.incEvalCnt();
// Note : le contact sera défini durant la génération de la tribu
}
- masterTribe.incEvalCnt(initNb);
+// masterTribe.incEvalCnt(initNb);
addTribe(initNb, explorer);
}
@@ -141,8 +141,8 @@ public class TribesSwarm implements java.io.Serializable{
updateQueen(range, prob); // this costs an evaluation
// evals++;
- if (queen.position.firstIsBetter(queen.position.fitness,
- bestMem.getPos().fitness)) {
+ if (queen.position.firstIsBetter(queen.position.getFitness(),
+ bestMem.getPos().getFitness())) {
int[] worst = findWorst();
@@ -176,14 +176,14 @@ public class TribesSwarm implements java.io.Serializable{
int[] found = new int[2];
found[0] = 0;
found[1] = 0;
- double[] f = tribes[found[0]].memory[found[1]].getPos().fitness;
+ double[] f = tribes[found[0]].memory[found[1]].getPos().getFitness();
double[] f2;
for (n = 0; n < tribeNb; n++) {
for (m = 0; m < tribes[n].memoryNb; m++) {
// System.arraycopy(tribes[n].memory[m].position.fitness, 0, f2,
// 0, fitnessSize);
- f2 = tribes[n].memory[m].getPos().fitness;
+ f2 = tribes[n].memory[m].getPos().getFitness();
// this is not XOR! (for multi-objective fitness, betterThan is not symmetrical)
if ((switchBest && tribes[n].memory[m].getPos().firstIsBetter(f2, f))
|| (!switchBest && tribes[n].memory[m].getPos().firstIsBetter(f, f2))) {
diff --git a/src/javaeva/server/modules/GenericModuleAdapter.java b/src/javaeva/server/modules/GenericModuleAdapter.java
index c8313b06..a83ed152 100644
--- a/src/javaeva/server/modules/GenericModuleAdapter.java
+++ b/src/javaeva/server/modules/GenericModuleAdapter.java
@@ -2,7 +2,7 @@ package javaeva.server.modules;
import javaeva.server.go.InterfaceGOParameters;
import javaeva.server.stat.StatisticsWithGUI;
-import javaeva.server.stat.StatisticsParameter;
+import javaeva.server.stat.InterfaceStatisticsParameter;
import javaeva.server.EvAServer;
import javaeva.gui.GenericObjectEditor;
import javaeva.gui.JTabbedModuleFrame;
@@ -53,7 +53,7 @@ public class GenericModuleAdapter extends AbstractModuleAdapter implements Seria
public JTabbedModuleFrame getModuleFrame() {
if (TRACE) System.out.println("GenericModulAdapter.getModuleFrame");
ArrayList