OpenMOLE a DSL to explore complex-system models

Romain Reuillon
Clasyco

Complex-systems models are not invertible in general.


That's why numerical experimentation on models is a widespread tool.


It is very CPU consuming:

As a matter of fact many experiments exhibit naturally parallel aspects:

OpenMOLE proposes a naturally parallel DSL to design model experiments.





Prototype small and scale transparently.



The OpenMOLE DSL is workflow oriented.

The OpenMOLE exposes both a graphical DSL as well as a scripted one.

The central component: the task


Black box:
Tasks are:

Tasks


Scripted DSL: a task

// Declare the variable
val i1 = new Prototype[Int]("i1")
val i2 = new Prototype[Int]("i2")
val j = new Prototype[Int]("j")

// Hello task
val hello = GroovyTask("hello", "j = Model.compute(i1, i2)")

hello addInput i1
hello addInput i2
hello addOutput j
hello addLib "/path/to/model.jar"

Transition




Exploration transition



The exploration transition unrolls a design of experiment.


It creates one execution stream by sample in the design of experiment.


Aggregation transition



The aggregation transition gathers the results of a model exploration.


It allows to compute global indicators upon multiple parallel execution streams.


Scripted DSL: exploration

val exploration = 
  ExplorationTask(
    "exploration",
    new Factor(i1, 0 to 100 by 2 toDomain) x 
    new Factor(i2, new UniformIntDistribution take 10)
  )

val ex = exploration -< hello toExecution
                
//execute the workflow locally
ex.start               
                

Scripted DSL: delegate to a cluster

val pbs = new PBSEnvironment(
  "rreuillo",
  "avakas.mcia.univ-bordeaux.fr",
  "/home/rreuillo/tmp/")

val ex = exploration -< (hello on pbs by 10) toExecution

//execute the workflow on a PBS cluster
ex.start

Environments

Scale declaratively at a multi-thread, multiple desktop, multi-core server, cluster, grid, cloud level.


State of the development: