Getting Started with IslandEv

IslandEv adopts a client server model. The clients connect to the server, downloads the code for running a single evolutionary process and starts running it. These evolving islands then connect regularly to the server to inform it of their progress and to exchange migratory individuals with their neighbours. In the case that the evolutionary process you want to distribute uses multiple coevolving populations then each island will hold all these populations and migration across islands will occur only between populations of the same type.

If you will use IslandEv to distribute JaGa then you can skip the next section. Otherwise read on to find out how to plug in your evolutionary package to IslandEv.

Plugging in a Custom Evolutionary Package into IslandEv

IslandEv is capable of distributing your evolutionary package across the internet. It will do this by setting up your evolutionary process on each host and then exchanging individuals from their populations. To interface IslandEv with your evolutionary process you must implement the following interfaces found in the islandev package:

Once you've made your evolutionary package implement these interfaces you can start distributing it with IslandEv. Read the next section to find out how.

Setting up your Distributed Islands Evolutionary Process

This section will assume that you know how to create an object of type EvolutionaryInteractiveTask. If you are using JaGa then this will be the Monica object, see the code in the JaGa Getting Started guide to find out how to create a Monica object. If you are using a custom evolutionary package then this is the object implementing the EvolutionaryInteractiveTask as mentioned in the previous section.

Creating the Server Object

The Islands Evolutionary Server can be given a queue of evolutionary tasks to go through in order. As soon as an individual is found superior or equal to the solution template, the server moves on to the next task and updates all clients. The server keeps log files showing when it starts a problem, when it finds a solution, when clients connect, etc.. The migration rate between islands is configurable by setting the probability that a migration event will succeed. You can think of this as specifying how far apart islands are.

Here goes an example code setting up a server class using the IslandsEvolutionServerWrapper helper class included with IslandEv:

import islandev.*;
import distrit.*;
import java.util.Vector;

public class IslandEvExample extends IslandsEvolutionServerWrapper
{

}

Now that we have our server class IslandEvExample.

Starting the Server

IslandEv uses RMI. What we first need is to configure our Java Security Policy. This is done with a policy file such as java.policy which allows the server to use various sockets and to have file access to the /home/username/log directory.

Now every time we want to start our server we must do the following things:

  1. Start the rmiregistry: type rmiregistry at the command line. Important you must do this from a directory without direct access to your class files.
  2. Start a webserver with its root at the root of your class file structure. If your webserver is running on host host on port port then http://host:port/islandev/Individual.class should point to the class file.
  3. Start your server. This can be done using the SingleServerWrapper class included with DistrIT by typing at the command line:
    java -Djava.rmi.codebase=http://host:port/ -Djava.rmi.server.hostname=host -Djava.security.policy=java.policy distrit.server.SingleServerWrapper IslandEvExample IES
    where IES is the RMI binding name and can be changed to whatever you choose.

Now the islands evolution server will be up and running waiting for clients to connect.

Connecting the Clients

All the clients need to have is the 5Kb DistrIT client and a java.policy file. You must replace host in the policy file by the hostname of the server. Now you can launch the client with:

java -Djava.security.policy=java.policy -jar ITClient.jar host IES clientName
where clientName is a unique name used by the server to refer to this client.

Now this client should connect to your Islands Evolution Server, download the evolutionary process and start running it. You can check what's happening at the server console.

Help!

Please do not hesitate to contact the project administrator for troubleshooting or advice on using IslandEv.