Papareto: a Java framework for
and Self-Adaptive Evolutionary Computing

Last release done on January 28 2016 at 13:32

Papareto is a object-oriented Java framework for the development of evolutionary solutions to computational problems. The primary motivation for developing an (ad hoc at that time) evoluationary framework was to give the Grph graph library the ability to generate particular graph instances. Once done, the code was extracted from the source code of Grph and was made available as a separate project called Papareto. Other evolutionary frameworks for Java include ECJ, WatchMaker, JGAP, etc. Papareto differs from these projects in the following ways.

No or any representation
Papareto is not a framework for genetic algorithms (GAs) solely as it does not impose a genetic representation (via chromosomes) of individuals. Instead, it can deal with any representation, or even no representation at all, which allows better performance and more meaningful operators. Furthermore, the representation of individuals can be changed at runtime.

(A)synchronous evolution
The evolution of populations in Papareto can be either synchronous, asynchronous or both.

Multi-objective optimization
The evolutionary process of Papareto assumes an arbitrary number of objectives. Numerical values for these objectives can be aggregated as any linear or non-linear combination. The combination may vary over time.

Papareto takes advantage of multicore computers by parallelizing the generation of new individuals. This is done by a multi-threaded parallel execution model that dynamically adapts the number of threads in accordance to the constantly evolving load of the computer.

Papareto relies on the Octojus cluster executor, thereby allowing populations to be migrated to other computers for remote evolution. Multiple populations can hence be processed in parallel on several computers, as described by the distributed islands model.

At any stage of its evolution, a population can be stored to disk for later restore. In case of failure, an evolutionary process can be restarted from the last-stored iteration - no need to recompute it from the beginning. This also works for the distributed computations.

Self-adaptive evolutionary process
All along the evolution process, Papareto self-evaluates the performance of its operators, and gives greater priority to most efficient ones.

Accessible and proficient
Papareto does not aim at providing an encyclopedic set of implementations for evolutionary algorithms. Instead it provides, through the most natural model and Object-Oriented API possible, a strong set of functionalities enabling researchers and engineers to build upon!