Documentation > Explore > Samplings
Aggregating Results of a Direct Sampling 🔗
In Arrays 🔗
Direct sampling and offers a way to aggregate the multiple output value of the model generated by the multiple execution of the model. This is done by settings the argument aggregation of theDirect Sampling
or Replication
method.
The simplest usage is to generate an array of all the computed outputs. You can then store it using a hook or pass it to a subsequent task:
val input_i = Val[Int]
val input_j = Val[Double]
val output1 = Val[Double]
val output2 = Val[Double]
val postProcessingTask =
ScalaTask("""
// my post processing code
""") set (
inputs += (output1.array, output2.array)
)
DirectSampling(
evaluation = my_own_model,
sampling =
(input_i in (0 to 10 by 2)) x
(input_j in (0.0 to 5.0 by 0.5)),
aggregation = Seq(output1, output2)
) -- postProcessingTask
Statistic Indicators 🔗
OpenMOLE provides a bunch on statistic function you can use to aggregate you outputs. The list of these function is available in the doc. You can use these function either in aScalaTask
to post process your results or using the evaluate
keyword:
val input_i = Val[Int]
val input_j = Val[Double]
val output1 = Val[Double]
val output2 = Val[Double]
DirectSampling(
evaluation = my_own_model,
sampling =
(input_i in (0 to 10 by 2)) x
(input_j in (0.0 to 5.0 by 0.5)),
aggregation = Seq(
output1 evaluate median,
output2 evaluate average
)
)
You own function 🔗
You can also provide your own scala function to aggregate the data, as it is shown in the following example:val input_i = Val[Int]
val input_j = Val[Double]
val output1 = Val[Double]
val output2 = Val[Double]
DirectSampling(
evaluation = my_own_model,
sampling =
(input_i in (0 to 10 by 2)) x
(input_j in (0.0 to 5.0 by 0.5)),
aggregation = Seq(
output1 evaluate "output1.sum / 3.0",
output2 evaluate "output2.sum / 3.0"
)
)
Or:
val input_i = Val[Int]
val input_j = Val[Double]
val output1 = Val[Double]
val output2 = Val[Double]
def myAggregation(d: Array[Double]) = d.sum / 3.0
DirectSampling(
evaluation = my_own_model,
sampling =
(input_i in (0 to 10 by 2)) x
(input_j in (0.0 to 5.0 by 0.5)),
aggregation = Seq(
output1 evaluate myAggregation,
output2 evaluate myAggregation
)
)