A Spark implementation of the island-based parallel Differential Evolution

This is the first release of the implementation of an island-based model for the Differential Evolution algorithm presented for the first time at EvoPAR2016. It has been coded in Scala and uses Spark for being executed on commodity clusters or Cloud resources.

Main features

The following is included in this release:

  • Two implementations for the Differential Evolution in Scala: the sequential and the island-based model. The island-based implementation includes two enhancements to what has been presented at EvoPar:

    1. An optional asynchronous Local Solver (NL2SOL solver is used).
    2. Support for heterogeneous island configurations.

    These enhancements are documented in this technical report that currently is under review after being submitted for publication.

  • Support for different benchmarking functions:

    1. Our own implementations for the Sphere, Schwefel, Rosenbrock, Rastrigin, Ackley and Griewank functions
    2. Functions from the BBOB benchmark: Rosenbrock (f8), Rastrigin (f15), Schaffers (f17), GriewankRosenbrock (f19), Schwefel (f20) and Gallagher (f22)
    3. Biological Systems models: Circadian, Mendes, Nfkb
    4. Your own custom function
  • All that is necessary to run the program in a cluster or in the AWS and Azure clouds using Spark.


Please see the README file at each directory and comments in the source files for more information.


Please see the file called LICENSE.


All publications mentioning features or use of this software are asked to credit the authors by citing the following references:

  • Diego Teijeiro, Xoán C. Pardo, Patricia González, Julio R. Banga, Ramón Doallo: Implementing Parallel Differential Evolution on Spark. EvoApplications (2) 2016: 75-90 DBLP DOI

Known issues

Original BBOB ( and Biological Systems ( libraries are not thread safe. Although we provide a thread-safe interface to these libraries, it is a very early version not completely bug-free. To avoid bad results or even application crashes use them with Spark configurations containing single-threaded executors only.


This work is the result of a collaboration between the Computer Architecture Group (GAC) at Universidade da Coruña (UDC) and the (Bio)Processing Engineering Group (GIngProg) at IIM-CSIC.