[If you're looking for a simple example of doing an island model, don't look here -- look instead in 3-Island.] This model is a special example of how to create a server that's not actually a client program -- the process SOLELY exists to be a server. Why would you want to do this? Well, we were running on a beowulf cluster maintained by a company that wouldn't allow us to know beforehand exactly what the IP address was of *any* node. (They were using a queueing system, argh). We got around this by putting our clients out on the cluster, but having a dedicated machine with a known IP address as the server. The company permitted this because the server doesn't have almost any network traffic going to it -- it's just for synchronization. So in this example we'll have two islands, Minoa and Crete, using minoa.params and crete.params, plus a separate server (in server.params). You need to launch the server differently than you'd normally launch an ECJ process. What you do here is launch the server as: java ec.exchange.IslandExchange -file server.params Then you launch your islands: java ec.Evolve -file crete.params java ec.Evolve -file minoa.params If you're running crete and minoa on separate machines from the server, you'll need to modify the parameter to tell them where the server is: java ec.Evolve -file crete.params \ -p exch.server-addr=address.of.server.com java ec.Evolve -file minoa.params \ -p exch.server-addr=address.of.server.com