Islands : a Custom Distribution Method for GA on distributed environments

For distributed environments the island distribution scheme is well adapted. Islands of population evolve for a while on a remote node. When an island is finished, its final population is merged back into a global archive. A new island is then generated until the termination criterion: i.e. the total number of islands to generate is met.

Islands scheme is used via a specific task, IslandEvolution to be added in the workflow.


The task take three parameters:
val evolution =
  SteadyStateEvolution(
    // Definition of the optimisation algorithm
    // mu is the size of the population
    // genome is the inputs prototype and their variation ranges
    // objectives are the objectives to minimise
    algorithm =
      NSGA2(
        mu = 100,
        genome = Seq(x in (0.0, 1.0), y in (0.0, 1.0)),
        objectives = Seq(o1, o2)
      ),
    evaluation = model,
    termination = 100
  )

// Generate a workflow that orchestrates 100 concurrent islands.
// The workflow stops when 10,000 islands have completed.
val island =
  IslandEvolution(
    evolution,
    parallelism = 100,
    termination = 10000
  )

// Definition of a hook to save the population of solutions on the local machine running OpenMOLE
val savePopulation = SavePopulationHook(island, workDirectory / "evolution")

// Construction of the complete mole with the execution environment, and the hook.
// Here the generated workflow will run using 4 threads of the local machine.
(island on LocalEnvironment(4) hook savePopulation)