Update of IslandModelEA; small bugfix.
This commit is contained in:
parent
b1676bd2b0
commit
c872b61c41
@ -43,6 +43,7 @@ public class GenericRemoteServersEditor extends JPanel implements PropertyEditor
|
||||
private JTextField[] m_Names;
|
||||
private JComboBox[] m_CPUs;
|
||||
private JButton[] m_Delete;
|
||||
private int prefEditorHeight = 200;
|
||||
|
||||
public GenericRemoteServersEditor() {
|
||||
|
||||
@ -51,149 +52,79 @@ public class GenericRemoteServersEditor extends JPanel implements PropertyEditor
|
||||
/** This method will init the CustomEditor Panel
|
||||
*/
|
||||
private void initCustomEditor() {
|
||||
this.m_Editor = new JPanel();
|
||||
// This is the upper panel
|
||||
this.m_ParameterPanel = new JPanel();
|
||||
GridBagConstraints gbc = new GridBagConstraints();
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridwidth = 1;
|
||||
gbc.gridx = 0;
|
||||
gbc.gridy = 0;
|
||||
gbc.weightx = 1;
|
||||
this.m_ParameterPanel.setLayout(new GridBagLayout());
|
||||
this.m_ParameterPanel.add(new JLabel("Login: "), gbc);
|
||||
this.m_Login = new JTextField(""+this.m_RemoteServers.getLogin());
|
||||
this.m_Login.addKeyListener(loginListener);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridwidth = 2;
|
||||
gbc.gridx = 1;
|
||||
gbc.gridy = 0;
|
||||
gbc.weightx = 100;
|
||||
this.m_ParameterPanel.add(this.m_Login, gbc);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridwidth = 1;
|
||||
gbc.gridx = 3;
|
||||
gbc.gridy = 0;
|
||||
gbc.weightx = 1;
|
||||
this.m_ParameterPanel.add(new JLabel("Password: "), gbc);
|
||||
this.m_Password = new JPasswordField(""+this.m_RemoteServers.getPassword());
|
||||
this.m_Password.addKeyListener(passwordListener);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridwidth = 2;
|
||||
gbc.gridx = 4;
|
||||
gbc.gridy = 0;
|
||||
gbc.weightx = 100;
|
||||
this.m_ParameterPanel.add(this.m_Password, gbc);
|
||||
this.m_Editor = new JPanel();
|
||||
// This is the upper panel
|
||||
this.m_ParameterPanel = new JPanel();
|
||||
GridBagConstraints gbc = new GridBagConstraints();
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 1, 0, 0, 1);
|
||||
this.m_ParameterPanel.setLayout(new GridBagLayout());
|
||||
this.m_ParameterPanel.add(new JLabel("Login: "), gbc);
|
||||
this.m_Login = new JTextField(""+this.m_RemoteServers.getLogin());
|
||||
this.m_Login.addKeyListener(loginListener);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 2, 1, 0, 100);
|
||||
this.m_ParameterPanel.add(this.m_Login, gbc);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 1, 3, 0, 1);
|
||||
this.m_ParameterPanel.add(new JLabel("Password: "), gbc);
|
||||
this.m_Password = new JPasswordField(""+this.m_RemoteServers.getPassword());
|
||||
this.m_Password.addKeyListener(passwordListener);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 2, 4, 0, 100);
|
||||
this.m_ParameterPanel.add(this.m_Password, gbc);
|
||||
|
||||
JButton tmpB;
|
||||
BasicResourceLoader loader = BasicResourceLoader.instance();
|
||||
byte[] bytes;
|
||||
bytes = loader.getBytesFromResourceLocation("resources/images/Add24.gif");
|
||||
try {
|
||||
tmpB = new JButton("", new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)));
|
||||
} catch (java.lang.NullPointerException e) {
|
||||
System.out.println("Could not find Add24 icon, please move resources folder to working directory!");
|
||||
tmpB = new JButton("Add");
|
||||
}
|
||||
tmpB.addActionListener(addServer);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridwidth = 1;
|
||||
gbc.gridx = 0;
|
||||
gbc.gridy = 1;
|
||||
gbc.weightx = 1;
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
bytes = loader.getBytesFromResourceLocation("resources/images/Export24.gif");
|
||||
try {
|
||||
tmpB = new JButton("Load", new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)));
|
||||
} catch (java.lang.NullPointerException e) {
|
||||
System.out.println("Could not find Export24 icon, please move resources folder to working directory!");
|
||||
tmpB = new JButton("Load");
|
||||
}
|
||||
tmpB.addActionListener(loadServers);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridx = 1;
|
||||
gbc.gridy = 1;
|
||||
gbc.weightx = 1;
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
bytes = loader.getBytesFromResourceLocation("resources/images/Import24.gif");
|
||||
try {
|
||||
tmpB = new JButton("Save", new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)));
|
||||
} catch (java.lang.NullPointerException e) {
|
||||
System.out.println("Could not find Import24 icon, please move resources folder to working directory!");
|
||||
tmpB = new JButton("Save");
|
||||
}
|
||||
tmpB.addActionListener(saveServers);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridx = 2;
|
||||
gbc.gridy = 1;
|
||||
gbc.weightx = 1;
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
bytes = loader.getBytesFromResourceLocation("resources/images/Refresh24.gif");
|
||||
try {
|
||||
tmpB = new JButton("Update Status", new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)));
|
||||
} catch (java.lang.NullPointerException e) {
|
||||
System.out.println("Could not find Refresh24 icon, please move resources folder to working directory!");
|
||||
tmpB = new JButton("Update Status");
|
||||
}
|
||||
tmpB.addActionListener(updateServers);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridx = 3;
|
||||
gbc.gridy = 1;
|
||||
gbc.weightx = 1;
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
bytes = loader.getBytesFromResourceLocation("resources/images/Play24.gif");
|
||||
try {
|
||||
tmpB = new JButton("Start Server", new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)));
|
||||
} catch (java.lang.NullPointerException e) {
|
||||
System.out.println("Could not find Play24 icon, please move resources folder to working directory!");
|
||||
tmpB = new JButton("Start Server");
|
||||
}
|
||||
tmpB.addActionListener(startServers);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridx = 4;
|
||||
gbc.gridy = 1;
|
||||
gbc.weightx = 1;
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
bytes = loader.getBytesFromResourceLocation("resources/images/Stop24.gif");
|
||||
try {
|
||||
tmpB = new JButton("Stop Server", new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)));
|
||||
} catch (java.lang.NullPointerException e) {
|
||||
System.out.println("Could not find Stop24 icon, please move resources folder to working directory!");
|
||||
tmpB = new JButton("Stop Server");
|
||||
}
|
||||
tmpB.addActionListener(killServers);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.gridx = 5;
|
||||
gbc.gridy = 1;
|
||||
gbc.weightx = 1;
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
JButton tmpB;
|
||||
tmpB = makeButtonWith("resources/images/Add24.gif", "add");
|
||||
tmpB.addActionListener(addServer);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 1, 0, 1, 1);
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
tmpB = makeButtonWith("resources/images/Export24.gif", "Load");
|
||||
tmpB.addActionListener(loadServers);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 1, 1, 1, 1);
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
tmpB = makeButtonWith("resources/images/Import24.gif", "Save");
|
||||
tmpB.addActionListener(saveServers);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 1, 2, 1, 1);
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
tmpB = makeButtonWith("resources/images/Refresh24.gif", "Update Status");
|
||||
tmpB.addActionListener(updateServers);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 1, 3, 1, 1);
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
tmpB = makeButtonWith("resources/images/Play24.gif", "Start Server");
|
||||
tmpB.addActionListener(startServers);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 1, 4, 1, 1);
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
tmpB = makeButtonWith("resources/images/Stop24.gif", "Stop Server");
|
||||
tmpB.addActionListener(killServers);
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 1, 5, 1, 1);
|
||||
this.m_ParameterPanel.add(tmpB, gbc);
|
||||
|
||||
this.m_ServerList = new JPanel();
|
||||
this.updateServerList();
|
||||
JScrollPane scrollServer = new JScrollPane(this.m_ServerList);
|
||||
this.m_ServerList = new JPanel();
|
||||
this.updateServerList();
|
||||
JScrollPane scrollServer = new JScrollPane(this.m_ServerList);
|
||||
scrollServer.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
|
||||
scrollServer.setPreferredSize(new Dimension(200,prefEditorHeight));
|
||||
|
||||
this.m_Editor.setLayout(new BorderLayout());
|
||||
this.m_Editor.add(this.m_ParameterPanel, BorderLayout.NORTH);
|
||||
this.m_Editor.add(scrollServer, BorderLayout.CENTER);
|
||||
|
||||
this.updateEditor();
|
||||
this.m_Editor.setLayout(new BorderLayout());
|
||||
this.m_Editor.add(this.m_ParameterPanel, BorderLayout.NORTH);
|
||||
this.m_Editor.add(scrollServer, BorderLayout.CENTER);
|
||||
this.updateEditor();
|
||||
}
|
||||
|
||||
private JButton makeButtonWith(String iconSrc, String title) {
|
||||
JButton tmpB;
|
||||
byte[] bytes;
|
||||
bytes = BasicResourceLoader.instance().getBytesFromResourceLocation(iconSrc);
|
||||
try {
|
||||
tmpB = new JButton(title, new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)));
|
||||
} catch (java.lang.NullPointerException e) {
|
||||
System.err.println("Could not find icon " + iconSrc + ", please move resources folder to working directory!");
|
||||
tmpB = new JButton(title);
|
||||
}
|
||||
return tmpB;
|
||||
}
|
||||
|
||||
/** This method updates the server list
|
||||
*
|
||||
*/
|
||||
private void updateServerList() {
|
||||
BasicResourceLoader loader = BasicResourceLoader.instance();
|
||||
byte[] bytes;
|
||||
ServerNode t;
|
||||
this.m_ServerList.removeAll();
|
||||
@ -206,33 +137,22 @@ public class GenericRemoteServersEditor extends JPanel implements PropertyEditor
|
||||
String[] cups = new String[8];
|
||||
for (int i = 0; i < cups.length; i++) cups[i] = ""+(i+1);
|
||||
// The head title
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.BOTH;
|
||||
gbc.gridx = 0;
|
||||
gbc.weightx = 1;
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.BOTH, 0, 1);
|
||||
this.m_ServerList.add(new JLabel("Status"), gbc);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.BOTH;
|
||||
gbc.gridx = 1;
|
||||
gbc.weightx = 80;
|
||||
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.BOTH, 1, 80);
|
||||
this.m_ServerList.add(new JLabel("Server Name"), gbc);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.BOTH;
|
||||
gbc.gridx = 2;
|
||||
gbc.weightx = 10;
|
||||
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.BOTH, 2, 10);
|
||||
this.m_ServerList.add(new JLabel("CPUs"), gbc);
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.REMAINDER;
|
||||
gbc.gridx = 3;
|
||||
gbc.weightx = 10;
|
||||
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.REMAINDER, 3, 10);
|
||||
this.m_ServerList.add(new JLabel("Remove"), gbc);
|
||||
|
||||
for (int i = 0; i < this.m_RemoteServers.size(); i++) {
|
||||
t = this.m_RemoteServers.get(i);
|
||||
// the status indicator
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.BOTH;
|
||||
gbc.gridx = 0;
|
||||
gbc.weightx = 1;
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.BOTH, 0, 1);
|
||||
this.m_Status[i] = new JButton(" ");
|
||||
this.m_Status[i].setEnabled(false);
|
||||
if (this.m_RemoteServers.isServerOnline(t.m_ServerName)) this.m_Status[i].setBackground(Color.GREEN);
|
||||
@ -240,42 +160,46 @@ public class GenericRemoteServersEditor extends JPanel implements PropertyEditor
|
||||
this.m_ServerList.add(this.m_Status[i], gbc);
|
||||
// the server name
|
||||
gbc = new GridBagConstraints();
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.BOTH;
|
||||
gbc.gridx = 1;
|
||||
gbc.weightx = 80;
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.BOTH, 1, 80);
|
||||
this.m_Names[i] = new JTextField(""+t.m_ServerName);
|
||||
this.m_Names[i].addKeyListener(serverNameListener);
|
||||
this.m_ServerList.add(this.m_Names[i], gbc);
|
||||
// the number of CPUs
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.BOTH;
|
||||
gbc.gridx = 2;
|
||||
gbc.weightx = 10;
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.BOTH, 2, 10);
|
||||
this.m_CPUs[i] = new JComboBox(cups);
|
||||
this.m_CPUs[i].setSelectedIndex(t.m_CPUs-1);
|
||||
this.m_CPUs[i].addItemListener(cpuStateListener);
|
||||
this.m_ServerList.add(this.m_CPUs[i], gbc);
|
||||
// The delete button
|
||||
gbc.anchor = GridBagConstraints.WEST;
|
||||
gbc.fill = GridBagConstraints.REMAINDER;
|
||||
gbc.gridx = 3;
|
||||
gbc.weightx = 10;
|
||||
bytes = loader.getBytesFromResourceLocation("resources/images/Sub24.gif");
|
||||
setGBC(gbc, GridBagConstraints.WEST, GridBagConstraints.REMAINDER, 3, 10);
|
||||
bytes = BasicResourceLoader.instance().getBytesFromResourceLocation("resources/images/Sub24.gif");
|
||||
this.m_Delete[i] = new JButton("", new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)));
|
||||
this.m_Delete[i].addActionListener(deleteServer);
|
||||
this.m_ServerList.add(this.m_Delete[i], gbc);
|
||||
}
|
||||
String[] h = this.m_RemoteServers.getCheckedServerNodes();
|
||||
System.out.println("My active nodes: ");
|
||||
for (int i = 0; i < h.length; i++) {
|
||||
System.out.println(""+h[i]);
|
||||
}
|
||||
// System.out.println("My active nodes: ");
|
||||
// for (int i = 0; i < h.length; i++) {
|
||||
// System.out.println(""+h[i]);
|
||||
// }
|
||||
this.m_ServerList.repaint();
|
||||
this.m_ServerList.validate();
|
||||
}
|
||||
|
||||
/** This action listener,...
|
||||
private void setGBC(GridBagConstraints gbc, int anchor, int fill, int gridx, int weightx) {
|
||||
gbc.anchor = anchor;
|
||||
gbc.fill = fill;
|
||||
gbc.gridx = gridx;
|
||||
gbc.weightx = weightx;
|
||||
}
|
||||
|
||||
private void setGBC(GridBagConstraints gbc, int anchor, int fill, int gridwidth, int gridx, int gridy, int weightx) {
|
||||
setGBC(gbc, anchor, fill, gridx, weightx);
|
||||
gbc.gridwidth = gridwidth;
|
||||
gbc.gridy = gridy;
|
||||
}
|
||||
|
||||
/** This action listener,...
|
||||
*/
|
||||
ActionListener saveServers = new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
@ -290,9 +214,9 @@ public class GenericRemoteServersEditor extends JPanel implements PropertyEditor
|
||||
OutputFile.write(text);
|
||||
OutputFile.close();
|
||||
} catch (FileNotFoundException t) {
|
||||
System.out.println("Could not open output file! Filename: " + file.getName());
|
||||
System.err.println("Could not open output file! Filename: " + file.getName());
|
||||
} catch (java.io.IOException t) {
|
||||
System.out.println("Could not write to output file! Filename: " + file.getName());
|
||||
System.err.println("Could not write to output file! Filename: " + file.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -329,8 +253,9 @@ public class GenericRemoteServersEditor extends JPanel implements PropertyEditor
|
||||
*/
|
||||
ActionListener addServer = new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
m_RemoteServers.addServerNode("none", 1);
|
||||
m_RemoteServers.addServerNode("noname-"+m_RemoteServers.size(), 1);
|
||||
updateServerList();
|
||||
updateEditor();
|
||||
}
|
||||
};
|
||||
|
||||
@ -342,6 +267,7 @@ public class GenericRemoteServersEditor extends JPanel implements PropertyEditor
|
||||
if (event.getSource().equals(m_Delete[i])) m_RemoteServers.removeServerNode(m_RemoteServers.get(i).m_ServerName);
|
||||
}
|
||||
updateServerList();
|
||||
updateEditor();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -33,7 +33,7 @@ class ServerNode implements java.io.Serializable {
|
||||
|
||||
public class PropertyRemoteServers implements java.io.Serializable {
|
||||
|
||||
private ServerNode[] m_AvailableNodes;
|
||||
private ServerNode[] m_AvailableNodes=null;
|
||||
// private String m_ClassToStart = "eva2.tools.jproxy.RMIServer";
|
||||
private transient String m_password = "";
|
||||
private String m_Login = "";
|
||||
@ -48,6 +48,7 @@ public class PropertyRemoteServers implements java.io.Serializable {
|
||||
}
|
||||
|
||||
public PropertyRemoteServers(PropertyRemoteServers e) {
|
||||
this();
|
||||
if (e.m_AvailableNodes != null) {
|
||||
this.m_AvailableNodes = new ServerNode[e.m_AvailableNodes.length];
|
||||
for (int i = 0; i < e.m_AvailableNodes.length; i++) {
|
||||
|
@ -181,7 +181,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java.
|
||||
// checking in mutation/crossover operators
|
||||
if (!this.m_MutationOperator.equals(indy.m_MutationOperator)) return false;
|
||||
if (!this.m_CrossoverOperator.equals(indy.m_CrossoverOperator)) return false;
|
||||
System.err.println("Check whether this is semantically meant by equality!!! (AbstractEAIndividual.equals())");
|
||||
// System.err.println("Check whether this is semantically meant by equality!!! (AbstractEAIndividual.equals())");
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -133,7 +133,7 @@ public class MOCCOParameterizeRefPoint extends MOCCOPhase implements InterfacePr
|
||||
this.m_EIMEA = new GeneralGOEProperty();
|
||||
this.m_Island = new IslandModelEA();
|
||||
this.m_Island.setHeterogenuousProblems(true);
|
||||
this.m_Island.setParallelize(false);
|
||||
this.m_Island.setLocalOnly(true);
|
||||
this.m_Island.setMigrationRate(2);
|
||||
this.m_Island.setMigrationStrategy(new SOBestMigration());
|
||||
this.m_Island.setNumberLocalCPUs(this.m_Perturbations);
|
||||
@ -223,16 +223,16 @@ public class MOCCOParameterizeRefPoint extends MOCCOPhase implements InterfacePr
|
||||
System.out.println("The selected MOSO conversion is not suited for the reference point approach!");
|
||||
}
|
||||
// then set the values
|
||||
if (m_Island.getParallelize()) {
|
||||
// if (!m_Island.getLocalOnly()) {
|
||||
PropertyRemoteServers t = m_Island.getServers();
|
||||
String[] servers = t.getServerNodes();
|
||||
if (servers.length != m_Perturbations) {
|
||||
System.out.println("Warning: Number of servers overrides number of perturbations!");
|
||||
m_Perturbations = servers.length;
|
||||
}
|
||||
} else {
|
||||
m_Island.setNumberLocalCPUs(m_Perturbations);
|
||||
}
|
||||
// } else {
|
||||
// m_Island.setNumberLocalCPUs(m_Perturbations);
|
||||
// }
|
||||
m_Mocco.m_State.m_Optimizer = m_Island;
|
||||
m_Mocco.m_State.m_Optimizer.SetProblem(m_Mocco.m_State.m_CurrentProblem);
|
||||
m_Island.init();
|
||||
|
@ -110,7 +110,7 @@ public class MOCCOParameterizeTchebycheff extends MOCCOPhase implements Interfac
|
||||
this.m_EIMEA = new GeneralGOEProperty();
|
||||
this.m_Island = new IslandModelEA();
|
||||
this.m_Island.setHeterogenuousProblems(true);
|
||||
this.m_Island.setParallelize(false);
|
||||
this.m_Island.setLocalOnly(true);
|
||||
this.m_Island.setMigrationRate(2);
|
||||
this.m_Island.setMigrationStrategy(new SOBestMigration());
|
||||
this.m_Island.setNumberLocalCPUs(this.m_Perturbations);
|
||||
@ -230,16 +230,16 @@ public class MOCCOParameterizeTchebycheff extends MOCCOPhase implements Interfac
|
||||
System.out.println("The selected optimizer does not allow heterogenuous multi-starts!");
|
||||
}
|
||||
// then set the values
|
||||
if (m_Island.getParallelize()) {
|
||||
PropertyRemoteServers t = m_Island.getServers();
|
||||
String[] servers = t.getServerNodes();
|
||||
// if (!m_Island.getLocalOnly()) {
|
||||
PropertyRemoteServers servs = m_Island.getServers();
|
||||
String[] servers = servs.getServerNodes();
|
||||
if (servers.length != m_Perturbations) {
|
||||
System.out.println("Warning: Number of servers overrides number of perturbations!");
|
||||
m_Perturbations = servers.length;
|
||||
}
|
||||
} else {
|
||||
m_Island.setNumberLocalCPUs(m_Perturbations);
|
||||
}
|
||||
// } else {
|
||||
// m_Island.setNumberLocalCPUs(m_Perturbations);
|
||||
// }
|
||||
m_Mocco.m_State.m_Optimizer = m_Island;
|
||||
m_Mocco.m_State.m_Optimizer.SetProblem(m_Mocco.m_State.m_CurrentProblem);
|
||||
m_Island.init();
|
||||
|
@ -82,7 +82,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
||||
}
|
||||
this.withConstraints=o.withConstraints;
|
||||
this.doRotation = o.doRotation;
|
||||
this.rotation = (Matrix)o.rotation.clone();
|
||||
this.rotation = (o.rotation==null) ? null : (Matrix)o.rotation.clone();
|
||||
this.rotAngle = o.rotAngle;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package eva2.server.go.strategies;
|
||||
|
||||
import eva2.gui.BeanInspector;
|
||||
import eva2.gui.Plot;
|
||||
import eva2.gui.PropertyRemoteServers;
|
||||
import eva2.server.go.InterfacePopulationChangedEventListener;
|
||||
@ -52,9 +53,9 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
private PropertyRemoteServers m_Servers = new PropertyRemoteServers();
|
||||
|
||||
// These are the processor to run on
|
||||
private int m_LocalCPUs = 4;
|
||||
private boolean m_Parallelize = false;
|
||||
private InterfaceOptimizer[] m_Islands;
|
||||
private int m_numLocalCPUs = 1;
|
||||
private boolean m_localOnly = false;
|
||||
transient private InterfaceOptimizer[] m_Islands;
|
||||
transient private RMIServer m_LocalServer = null;
|
||||
|
||||
// This is for debugging
|
||||
@ -64,6 +65,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
|
||||
transient private String m_Identifier = "";
|
||||
transient private InterfacePopulationChangedEventListener m_Listener;
|
||||
transient private final boolean TRACE = false;
|
||||
|
||||
|
||||
public IslandModelEA() {
|
||||
@ -75,8 +77,10 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
this.m_Optimizer = (InterfaceOptimizer)a.m_Optimizer.clone();
|
||||
this.m_Migration = (InterfaceMigration)a.m_Migration.clone();
|
||||
this.m_Servers = (PropertyRemoteServers)a.m_Servers.clone();
|
||||
this.m_LocalCPUs = a.m_LocalCPUs;
|
||||
this.m_Parallelize = a.m_Parallelize;
|
||||
this.m_MigrationRate = a.m_MigrationRate;
|
||||
this.m_HeterogenuousProblems = a.m_HeterogenuousProblems;
|
||||
this.m_numLocalCPUs = a.m_numLocalCPUs;
|
||||
this.m_localOnly = a.m_localOnly;
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
@ -93,21 +97,35 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
}
|
||||
}
|
||||
|
||||
this.m_Population = new Population();
|
||||
this.m_Population.incrGeneration();
|
||||
// this.m_Population = new Population();
|
||||
this.m_Population.clear();
|
||||
this.m_Population.init();
|
||||
this.m_Optimizer.init();
|
||||
this.m_Optimizer.SetProblem(this.m_Problem);
|
||||
this.m_Optimizer.setPopulation((Population)m_Population.clone());
|
||||
InterfacePopulationChangedEventListener myLocal = null;
|
||||
if (this.m_Parallelize) {
|
||||
if (this.m_localOnly) {
|
||||
// this is running on the local machine
|
||||
this.m_Islands = new InterfaceOptimizer[this.m_numLocalCPUs];
|
||||
for (int i = 0; i < this.m_numLocalCPUs; i++) {
|
||||
this.m_Islands[i] = (InterfaceOptimizer) this.m_Optimizer.clone();
|
||||
this.m_Islands[i].SetIdentifier(""+i);
|
||||
this.m_Islands[i].init();
|
||||
if (this.m_LogLocalChanges)
|
||||
this.m_Islands[i].addPopulationChangedEventListener(this);
|
||||
}
|
||||
} else {
|
||||
// this is running on remote machines
|
||||
if (this.m_LocalServer == null) this.m_LocalServer = RMIServer.getInstance();
|
||||
try {
|
||||
myLocal = (InterfacePopulationChangedEventListener) RMIProxyLocal.newInstance(this);
|
||||
} catch(Exception e) {
|
||||
System.out.println("Island Model EA warning on local RMIServer... but i'll start anyway!");
|
||||
System.err.println("Island Model EA warning on local RMIServer... but i'll start anyway!");
|
||||
}
|
||||
String[] nodesList = this.m_Servers.getCheckedServerNodes();
|
||||
if ((nodesList == null) || (nodesList.length == 0)) return;
|
||||
if ((nodesList == null) || (nodesList.length == 0)) {
|
||||
throw new RuntimeException("Error, no active remote servers available! Activate servers or use localOnly mode.");
|
||||
}
|
||||
this.m_Islands = new InterfaceOptimizer[nodesList.length];
|
||||
for (int i = 0; i < nodesList.length; i++) {
|
||||
this.m_Islands[i] = (InterfaceOptimizer) RMIProxyRemoteThread.newInstance(this.m_Optimizer, nodesList[i]);
|
||||
@ -116,24 +134,19 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
if (this.m_LogLocalChanges)
|
||||
this.m_Islands[i].addPopulationChangedEventListener(myLocal);
|
||||
}
|
||||
} else {
|
||||
// this is running on the local machine
|
||||
this.m_Islands = new InterfaceOptimizer[this.m_LocalCPUs];
|
||||
for (int i = 0; i < this.m_LocalCPUs; i++) {
|
||||
this.m_Islands[i] = (InterfaceOptimizer) this.m_Optimizer.clone();
|
||||
this.m_Islands[i].SetIdentifier(""+i);
|
||||
this.m_Islands[i].init();
|
||||
if (this.m_LogLocalChanges)
|
||||
this.m_Islands[i].addPopulationChangedEventListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
this.m_Migration.initMigration(this.m_Islands);
|
||||
Population pop;
|
||||
this.m_Population.incrGeneration(); // the island-initialization has increased the island-pop generations.
|
||||
|
||||
for (int i = 0; i < this.m_Islands.length; i++) {
|
||||
pop = (Population)this.m_Islands[i].getPopulation().clone();
|
||||
this.m_Population.addPopulation(pop);
|
||||
this.m_Population.incrFunctionCallsBy(pop.getFunctionCalls());
|
||||
if (m_Islands[i].getPopulation().getGeneration()!=m_Population.getGeneration()) {
|
||||
System.err.println("Error, inconsistent generations!");
|
||||
}
|
||||
}
|
||||
this.firePropertyChangedEvent(Population.nextGenerationPerformed, this.m_Optimizer.getPopulation());
|
||||
}
|
||||
@ -160,13 +173,23 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
this.m_Optimizer.init();
|
||||
this.m_Optimizer.SetProblem(this.m_Problem);
|
||||
InterfacePopulationChangedEventListener myLocal = null;
|
||||
if (this.m_Parallelize) {
|
||||
if (this.m_localOnly) {
|
||||
// this is running on the local machine
|
||||
this.m_Islands = new InterfaceOptimizer[this.m_numLocalCPUs];
|
||||
for (int i = 0; i < this.m_numLocalCPUs; i++) {
|
||||
this.m_Islands[i] = (InterfaceOptimizer) this.m_Optimizer.clone();
|
||||
this.m_Islands[i].SetIdentifier(""+i);
|
||||
this.m_Islands[i].init();
|
||||
if (this.m_LogLocalChanges)
|
||||
this.m_Islands[i].addPopulationChangedEventListener(this);
|
||||
}
|
||||
} else {
|
||||
// this is running on remote machines
|
||||
if (this.m_LocalServer == null) this.m_LocalServer = RMIServer.getInstance();
|
||||
try {
|
||||
myLocal = (InterfacePopulationChangedEventListener) RMIProxyLocal.newInstance(this);
|
||||
} catch(Exception e) {
|
||||
System.out.println("Island Model EA warning on local RMIServer... but i'll start anyway!");
|
||||
System.err.println("Island Model EA warning on local RMIServer... but i'll try to start anyway!");
|
||||
}
|
||||
String[] nodesList = this.m_Servers.getCheckedServerNodes();
|
||||
if ((nodesList == null) || (nodesList.length == 0)) return;
|
||||
@ -178,16 +201,6 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
if (this.m_LogLocalChanges)
|
||||
this.m_Islands[i].addPopulationChangedEventListener(myLocal);
|
||||
}
|
||||
} else {
|
||||
// this is running on the local machine
|
||||
this.m_Islands = new InterfaceOptimizer[this.m_LocalCPUs];
|
||||
for (int i = 0; i < this.m_LocalCPUs; i++) {
|
||||
this.m_Islands[i] = (InterfaceOptimizer) this.m_Optimizer.clone();
|
||||
this.m_Islands[i].SetIdentifier(""+i);
|
||||
this.m_Islands[i].init();
|
||||
if (this.m_LogLocalChanges)
|
||||
this.m_Islands[i].addPopulationChangedEventListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
this.m_Migration.initMigration(this.m_Islands);
|
||||
@ -204,14 +217,17 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
*/
|
||||
public void optimize() {
|
||||
for (int i = 0; i < this.m_Islands.length; i++) {
|
||||
if (this.m_Islands[i].getPopulation().size() > 0) this.m_Islands[i].optimize();
|
||||
else this.m_Islands[i].getPopulation().incrGeneration();
|
||||
if (this.m_Islands[i].getPopulation().size() > 0) {
|
||||
this.m_Islands[i].optimize();
|
||||
if (TRACE ) System.out.println(BeanInspector.toString(m_Islands[i].getPopulation()));
|
||||
} else this.m_Islands[i].getPopulation().incrGeneration();
|
||||
if (TRACE) System.out.println("----");
|
||||
}
|
||||
this.m_Population.incrGeneration();
|
||||
if ((this.m_Population.getGeneration() % this.m_MigrationRate) == 0) {
|
||||
this.communicate();
|
||||
}
|
||||
// this is necessary for heterogeneuous islands
|
||||
// this is necessary for heterogeneous islands
|
||||
if (this.m_HeterogenuousProblems) {
|
||||
for (int i = 0; i < this.m_Islands.length; i++) {
|
||||
this.m_Islands[i].getProblem().evaluate(this.m_Islands[i].getPopulation());
|
||||
@ -220,7 +236,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
System.gc();
|
||||
}
|
||||
|
||||
/** This method will manage comunication between the
|
||||
/** This method will manage communication between the
|
||||
* islands
|
||||
*/
|
||||
private void communicate() {
|
||||
@ -299,7 +315,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
result += "Using:\n";
|
||||
result += " Migration Strategy = " + this.m_Migration.getClass().toString() + "\n";
|
||||
result += " Migration rate = " + this.m_MigrationRate + "\n";
|
||||
result += " Truely Parallel = " + this.m_Parallelize + "\n";
|
||||
result += " Local only = " + this.m_localOnly + "\n";
|
||||
result += " Het. Problems = " + this.m_HeterogenuousProblems + "\n";
|
||||
if (this.m_HeterogenuousProblems) {
|
||||
result += " Heterogenuous Optimizers: \n";
|
||||
@ -331,7 +347,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
s.startServers();
|
||||
IslandModelEA imea = new IslandModelEA();
|
||||
imea.m_Show = true;
|
||||
imea.m_Parallelize = true;
|
||||
imea.m_localOnly = false;
|
||||
imea.setServers(s);
|
||||
if (false) {
|
||||
imea.m_Optimizer = new MultiObjectiveEA();
|
||||
@ -431,27 +447,29 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
* @return description
|
||||
*/
|
||||
public String globalInfo() {
|
||||
return "This is general Evolutionary Multi-Criteria Optimization Framework.";
|
||||
return "This is an island model EA distributing the individuals across several (remote) CPUs for optimization.";
|
||||
}
|
||||
/** This method will return a naming String
|
||||
* @return The name of the algorithm
|
||||
*/
|
||||
public String getName() {
|
||||
return "Island EA";
|
||||
return "IslandEA";
|
||||
}
|
||||
|
||||
/** This method allows you to toggle between a truly parallel
|
||||
* and a serial implementation.
|
||||
* @return The current optimzation mode
|
||||
* @return The current optimization mode
|
||||
*/
|
||||
public boolean getParallelize() {
|
||||
return this.m_Parallelize;
|
||||
// TODO Deactivated from GUI because the current implementation does not really parallelize on a multicore.
|
||||
// Instead, the new direct problem parallelization can be used.
|
||||
// public boolean isLocalOnly() {
|
||||
// return this.m_localOnly;
|
||||
// }
|
||||
public void setLocalOnly(boolean b){
|
||||
this.m_localOnly = b;
|
||||
}
|
||||
public void setParallelize(boolean b){
|
||||
this.m_Parallelize = b;
|
||||
}
|
||||
public String parallelizeTipText() {
|
||||
return "Toggle between parallel and serial implementation.";
|
||||
public String localOnlyTipText() {
|
||||
return "Toggle between usage of local CPUs and remote servers.";
|
||||
}
|
||||
|
||||
/** This will show the local performance
|
||||
@ -543,12 +561,15 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
|
||||
* @param n Number of processors.
|
||||
*/
|
||||
public void setNumberLocalCPUs(int n) {
|
||||
this.m_LocalCPUs = n;
|
||||
}
|
||||
public int getNumberLocalCPUs() {
|
||||
return this.m_LocalCPUs;
|
||||
if (n>=1) this.m_numLocalCPUs = n;
|
||||
else System.err.println("Number of CPUs must be at least 1!");
|
||||
}
|
||||
// TODO Deactivated from GUI because the current implementation does not really parallelize on a multicore.
|
||||
// Instead, the new direct problem parallelization can be used.
|
||||
// public int getNumberLocalCPUs() {
|
||||
// return this.m_LocalCPUs;
|
||||
// }
|
||||
public String numberLocalCPUsTipText() {
|
||||
return "Set the number of local CPUS (only active in non-parallelized mode).";
|
||||
return "Set the number of local CPUS (>=1, only used in local mode).";
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user