You can program tasks in Scala using the
ScalaTask. For instance the following workflow sums all the elements of an array using a
ScalaTask and displays the results. Similarly, you could use such a task to generate some model parameter values or perform some data analysis. To get more details on the hook part you can check the doc on hooks.
You can embed you own Scala/Java code and libraries in OpenMOLE using an OpenMOLE Plugin.
val array = Val[Array[Double]] val result = Val[Double] val sum = ScalaTask("val result = array.sum") set ( inputs += array, outputs += result, array := Array(8.0, 9.0, 10.0) ) (sum hook ToStringHook())
Multiple ScalaTasks can be joined to compose a workflow. Lets imagine that you want to perform an expensive computation on every element of an array. For the sake of simplicity, the "expensive computation" is here a multiplication by 2.
val element = Val[Double] val multiplied = Val[Double] val result = Val[Double] val expensive = ScalaTask("val multiplied = element * 2") set ( inputs += element, outputs += multiplied ) val exploration = ExplorationTask(element in List(8.0, 9.0, 10.0)) val sum = ScalaTask("val result = multiplied.sum") set ( inputs += multiplied.toArray, outputs += result ) exploration -< expensive >- (sum hook ToStringHook())
The execution of this workflow can be distributed using OpenMOLE's environments. Check the page dedicated to environments to learn more on this process.