Setup and run an experiment
This tutorial sections covers setting up an experiment and executing it.
This tutorial will use the setup of workspace, model, and analysis as:
workspace = client.create_workspace(<workspace name>)
model = workspace.get_model("Modelica.Blocks.Examples.PID_Controller")
dynamic = workspace.get_custom_function('dynamic')
See previous tutorial chapters for details.
Setting up an experiment
The experiment can be set up from the model by either creating a SimpleModelicaExperimentDefinition class by passing the model and the dynamic custom function object:
from modelon.impact.client import SimpleModelicaExperimentDefinition
experiment_definition = SimpleModelicaExperimentDefinition(model, dynamic)
or in an even simpler way by calling the new_experiment_definition()
method on the model with the dynamic
custom function
object as an argument:
experiment_definition = model.new_experiment_definition(dynamic)
This would again return a SimpleModelicaExperimentDefinition
class object.
To override the default parameters for the dynamic
simulation workflow, call the with_parameters()
method on the dynamic
custom function class:
experiment_definition = model.new_experiment_definition(dynamic.with_parameters(start_time=0.0, final_time=2.0))
The default set of parameters available for the custom function can be viewed by calling the property parameter_values
:
dynamic.parameter_values
The new_experiment_definition()
method takes the optional arguments solver_options
, simulation_options
and
simulation_log_level
. If the solver_options
and simulation_options
are not explicitly defined, they default to the dynamic
custom function defaults.
The simulation options can be set up as shown below:
simulation_options = dynamic.get_simulation_options().with_values(ncp=500)
solver_options = {'atol':1e-8}
experiment_definition = model.new_experiment_definition(
dynamic.with_parameters(start_time=0.0, final_time=2.0),
solver_options=solver_options,
simulation_options=simulation_options
)
It is also possible to setup a series of experiments. Here’s an example with Range operator to setup a multi-execution experiment:
from modelon.impact.client import Range
experiment_definition = experiment_definition.with_modifiers({'PI.k': Range(10, 100, 3)})
This would setup an experiment with 3 cases. There are multiple operator types as well as expansion algorithms, an experiments could be setup with. Please refer the multi-execution tutorial for more information on this. An example with Uniform operator with Sobol expansion algorithm can be found here.
Executing the experiment
Following either of the approaches listed below, the experiment definition set up could be executed:
One step execution
The experiment definition set up can now be passed to the execute()
function:
experiment = workspace.execute(experiment_definition).wait()
This approach couples both the creation and execution of the experiment in one step.
Two step execution
This approach isolates the creation and execution of an experiment as two methods:
experiment = workspace.create_experiment(experiment_definition)
experiment = experiment.execute().wait()
The benefit of this approach is that it allows the execution of a subset of the cases by passing them as
a list in the with_cases
argument to the execute
function. This is covered in detail here.
Note:
We have called the wait()
method after the execute()
method to ensure that the execution process reaches completion.
If wait()
is not called on the model an Operation
object is returned and is_complete()
can be used to check the status of the
execution. Calling the wait()
method returns a Experiment
object upon completion of the execution.