Internal Pages

Login to access




PES: Parallelized Evolution System

This system is being developed in conjunction with IRIDIA within our collaboration on the Swarm-bots project. The system parallelizes the execution of evolutionary methods over multiple computers connected via a network. PES is based upon PVM, a popular parallel programming library.

The figure below shows the overview of PES architecture:


  • Simple usage
  • Load balancing
  • Fundamental genetic algorithm facilities
  • improved fault tolerance via built-in ping mechanism
  • Multi platform support and interoperability


PES runs GA centrally on the server but distributes function evaluations to the clients. This scheme is more effective when the fitness evaluations dominate the execution time of program. Following figure demonstrates the architecture of a PES application.

To use PES library two applications should be implemented: server and client. Both programs share some of the library codes but also have distinct parts. Thus, PES is composed of two main components:

  • a server component, named PES-S. This component is used for server application:
    • Fundamental GA functionality: crossover/mutation and selection mechanisms for binary strings and built-in neural network class. These mechanisms can be replaced with custom ones for specific applications.
    • Task management: sending tasks. A task is defined as data required to evaluate a fitness. This can range from a simple bit string to a neural network controller together with definition of world it operates. PES-S provides functions to serialize and deserialize tasks to send to clients. PES also handles simple load balancing so that the faster clients receive more work whereas slower clients receive less.
    • Result management: Receiving tasks from clients and matching results with tasks.
    • Ping mechanism: This mechanism keeps track of active clients. PES-S functions send and receive ping packets to clients while evaluating fitness functions. This allows not responding clients to be detected and dropped. With this mechanism allows server to keep a stable rate of execution and also allows more fault tolerance.
    • Configuration manager: this class encapsulates options for PES. These include execution environment specific options and configurations. PES-S can load these options from a predefined file. This reduces requirement for building for different applications.
  • Client component, named PES-C. This components is used for client application:
    • Task Management: receiving tasks from server.
    • Ping mechanism: updating server about status of current task.
    • Result management: sending result of execution to server.

Server uses PES-S functionality to distribute tasks and collect results. Server implementer need not worry about details on how tasks distributed or how results are collected. A single library call handles this task. So server program looks exactly like a serial program, free of inter-process communication.

Client on the other hand uses PES-C to receive tasks and send results. Only part that requires special care in client programming is checking messages (a single function call from PES) so that pings are replied appropriately and new tasks are received.

PES is used on our application in evolutionary robotics. This application evolves robots capable of clustering. The robots are simulated on Open Dynamics Engine (ODE). ODE allows dynamic simulation of bodies and is suitable for problems that cause lots of collisions between robots.


  • Manual of PES is available here.
  • Reference of PES is available here.
  • Technical report on PES here.
  • sources/binaries pes-0.9.3.tar.gz
  • A simple example application for PES here.
  • Our application on PES together with ODE (client code is poorly documented) here.
  • Presentation we made on PES in ISCIS'03. download it here.
  • Movie of results used in presentation. download it here.
  • If you have trouble installing pvm on cygwin, you can download cygwin pvm 3.4.4 binaries here

For older files: click here.

This page was last modified on 24 December 2009, at 12:21. This page has been accessed 13,747 times.