This experiment helps you to explore how sensitive are the simulation results to changes of the model parameters. The experiment runs the model multiple times varying one of the parameters and shows how the simulation output depends on it. For a single value type of output the chart "output vs parameter" is displayed. If the simulation output is a dataset (e.g. dynamics of a certain process in time), a series of curves is shown on one chart for comparison.
Name – The name of the experiment.
Ignore – If selected, the experiment is excluded from the model.
Top-level agent – Using the drop-down list, choose the top-level agent type for the experiment. The agent of this type will play a role of a root for the hierarchical tree of agents in your model.
Maximum available memory – The maximum size of Java heap allocated for the model.Create default UI – The button creates the default UI for the experiment.
Varied in range – If selected, you should explicitly define the range of values for each parameter you want to vary. Namely, you define minimum and maximum values for a parameter and also the step this parameter will increase its value to reach the maximum.
Freeform – If selected, model is run for the fixed number of iterations you specify and the parameter values are calculated according to the expressions you define. Using the index keyword in the parameter value expression you can refer to the current model run number. Thus this mode also allows defining dependencies between the parameter value and other parameters and/or the number of the current model run.
Parameters – Here the user defines the set of varied parameters. The table lists all the parameters of the top level agent. To make a parameter a decision variable, click in the Type field and choose range there. If it is a numeric parameter, then specify the range for the parameter. Enter the parameter’s lower bound in the Min field, the parameter’s upper bound in the Max field, and specify the increment value in the Step field.
Stop – Defines, whether the model will Stop at specified time, Stop at specified date, or it will Never stop. In the first two cases, the stop time is specified using the Stop time/Stop date controls.
Start time – The initial time for the simulation time horizon.
Start date – The initial calendar date for the simulation time horizon.
Stop time – The final time for the simulation time horizon (the number of model time units for model to run before it will be stopped).
Stop date – The initial calendar date for the simulation time horizon.
Additional experiment stop conditions – Here you can define any number of additional experiment stop conditions. When any of these conditions will become true, experiment will be stopped. Condition can include checks of dataset mean confidence, variable values, etc. The top-level agent of the experiment can be accessed here as root, so if you want e.g. to stop the experiment when the variable plainVar of the experiment's top-level agent steps over the threshold, type here, say, root.plainVar>11. To make the condition active, select the checkbox in the corresponding row of the table.
Random number generator – Here you specify, whether you want to initialize random number generator for this model randomly or with some fixed seed. This makes sense for stochastic models. Stochastic models require a random seed value for the pseudorandom number generator. In this case model runs cannot be reproduced since the model random number generator is initialized with different values for each model run. Specifying the fixed seed value, you initialize the model random number generator with the same value for each model run, thus the model runs are reproducible. Moreover, here you can substitute AnyLogic default RNG with your own RNG.
Random seed (unique simulation runs) – If selected, the seed value of the random number generator is random. In this case random number generator is initialized with the same value for each model run, and the model runs are unique (non-reproducible).
Fixed seed (reproducible simulation runs) – If selected, the seed value of the random number generator is fixed (specify it in the Seed value field). In this case random number generator is initialized with the same value for each model run, and the model runs are reproducible.
Custom generator (subclass of
Random) – If for any reason you are not satisfied with the
quality of the default random number generator Random, you can substitute it
with your own one. Just prepare your custom RNG (it should be a
subclass of the Java class Random,
e.g. MyRandom),
choose this particular option and type the expression returning an
instance of your RNG in the field on the right, for example: new MyRandom() or new MyRandom( 1234 ) You can
find more information here.
Use replications – if selected, the OptQuest Engine will run several replications per one simulation.
Fixed number of replications – if selected, fixed number of replications will be run per each simulation.
Replications per iteration – [enabled if Fixed number of replications is set] the fixed number of replications, which will be run per each simulation.
Varying
number of replications (stop replications after minimum replications,
when confidence level is reached)
– if selected, varying number of replications will be run per each
simulation. When running a varying number of replications, you will
specify minimum and maximum number of replications to be run. The
OptQuest Engine will always run the minimum number of replications for
a solution. OptQuest then determines if more replications are needed.
The OptQuest Engines stops evaluating a solution when one of the
following occurs:
Minimum replications – [enabled if Varying number of replications is set] – the minimum number of replications the OptQuest Engine will always run per one simulation.
Maximum replications – [enabled if Varying number of replications is set] – the maximum number of replications the OptQuest Engine can run per one simulation.
Confidence level – [enabled if Varying number of replications is set] – the confidence level to be evaluated for the objective.
Error percent – [enabled if Varying number of replications is set] – the percent of the objective for which the confidence level is determined.
Window properties define the appearance of the model window, that will be shown, when the user starts the experiment. Note that the size of the experiment window is defined using the model frame and applies to all experiments and agent types of the model
Title – The title of the model window.
Enable zoom and panning – If selected, the user will be allowed to pan and zoom the model window.
Enable developer panel – Select/clear the checkbox to enable/disable the developer panel in the model window.
Show developer panel on start – [Enabled only if the Enable developer panel checkbox is selected] If selected, the developer panel will be shown by default in the model window every time you run the experiment.
Initial experiment setup – The code executed on experiment setup.
Before each experiment run – The code executed before each simulation run.
Before simulation run – The code executed before simulation run. This code is run on setup of the model. At this moment the top-level agent of the model is already created, but the model is not started yet. You may perform here some actions with elements of the top-level agent, e.g assign actual parameter values here.
After simulation run – The code executed after simulation run. This code is executed when simulation engine finishes the model execution (Engine.finished() function is called). This code is not executed when you stop your model by clicking the Terminate execution button.
After iteration – The code executed after iteration run.
After experiment – The code executed after experiment run.
Imports section – import statements needed for correct compilation of the experiment class' code. When Java code is generated, these statements are inserted before definition of the Java class.
Additional class code – Arbitrary member variables, nested classes, constants, and methods are defined here. This code will be inserted into the experiment class definition. You can access these class data members anywhere within this experiment.
Java machine arguments – Specify here Java machine arguments you want to apply on launching your model. You can find the detailed information on possible arguments at Java Sun Microsystems web site: http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html
Command-line arguments – Here you can specify command line arguments you want to pass to your model. You can get the values of passed argument values in the experiment's Additional class code using the method String[] getCommandLineArguments()
Allow
parallel evaluations
– If the option is selected and the processor has several cores,
AnyLogic will run several experiment iterations in parallel on
different processor cores. Thereby performance is multiply increased
and the experiment is performed significantly quicker.
This feature is made controllable because in some rare cases parallel
evaluations may affect the optimizer strategy so that more iterations
are required to find the optimal solution.
Do not use static
variables, collections, table functions and custom distributions (check
that their advanced option Static
is deselected), if you turn on parallel evaluations here.
Load top-level agent from snapshot – If selected, the experiment will load the model state from the snapshot file specified in the control to the right. The experiment will be started from the time when the model state was saved.
You can use the following functions to control the experiment, retrieve the data on its execution status and use it as a framework for creating custom experiment UI.
Function |
Description |
void run() |
Starts the experiment execution from the current state. If the model does not exist yet, the function resets the experiment, creates and starts the model. |
void pause() |
Pauses the experiment execution. |
void step() |
Performs one step of experiment execution. If the model does not exist yet, the function resets the experiment, creates and starts the model. |
void stop() |
Terminates the experiment execution. |
void close() |
This function returns immediately and performs the following actions in a separate thread:
|
Experiment.State getState() |
Returns the current state of the experiment: IDLE, PAUSED, RUNNING, FINISHED, ERROR, or PLEASE_WAIT. |
double getRunTimeSeconds() |
Returns the duration of the experiment execution in seconds, excluding pause times. |
int getRunCount() |
Returns the number of the current simulation run, i.e., the number of times the model was destroyed. |
double getProgress() |
Returns the progress of the experiment: a number between 0 and 1 corresponding to the currently completed part of the experiment (a proportion of completed iterations of the total number of iterations), or -1 if the progress cannot be calculated. |
int getParallelEvaluatorsCount() |
Returns the number of parallel evaluators used in this experiment. On multicore / multiprocessor systems that allow parallel execution this number may be greater than 1. |
Function |
Description |
int getCurrentIteration() |
Returns the current value of iteration counter. |
int getMaximumIterations() |
Returns the total number of iterations. |
int getNumberOfCompletedIterations() |
Returns the number of completed iterations. |
Before calling the Sensitivity Analysis experiment functions you may need to ensure that replications are used (call the isUseReplications() function).
Function |
Description |
boolean isUseReplications() |
Returns true if the experiment uses replications; returns false otherwise. |
int getCurrentReplication() |
Returns the number of replications run so far for the current iteration. |
Function |
Description |
Engine getEngine() |
Returns the engine executing the model. To access the model's top-level agent (typically, Main), call getEngine().getRoot(); |
IExperimentHost getExperimentHost() |
Returns the experiment host object of the model, or some dummy object without functionality if the host object does not exist. |
Function |
Description |
void
setLoadRootFromSnapshot( String snapshotFileName) |
Tells the simulation experiment to load the top-level agent from AnyLogic snapshot file. This function is only available in AnyLogic Professional. Parameter: |
boolean isLoadRootFromSnapshot() |
Returns true if the experiment is configured to start the simulation from the state loaded from the snapshot file; returns false otherwise. |
String getSnapshotFileName() |
Returns the name of the snapshot file, from which this experiment is configured to start the simulation. |
Function |
Description |
RuntimeException |
Signals an error during the model run by throwing a RuntimeException with errorText preceded by the agent full name. This
function never returns, it throws runtime exception by itself. The
return type is defined for the cases when you would like to use the
following form of call: Parameters: |
RuntimeException |
Signals a model logic error during the model run by throwing a ModelException with specified error text preceded by the agent full name. This
function never returns, it throws runtime exception by itself. The
return type is defined for the cases when you would like to use the
following form of call: This function differs from error() in the way of displaying error message: model logic errors are 'softer' than other errors, they use to happen in the models and signal the modeler that model might need some parameters adjustments. Examples are 'agent was unable to leave flowchart block because subsequent block was busy', 'insufficient capacity of pallet rack' etc. Parameters: |
void onError |
This function may be overridden to perform custom handling of the errors that occurred during the model execution (i.e., errors in the action code of events, dynamic events, transitions, entry/exit codes of states, formulas, etc.). By default, this function does nothing as its definition is empty. To override it, you can add a function to the experiment, name it onError and define a single argument of the java.lang.Throwable for it. Parameter: |
void
onError (Throwable error, Agent root) |
Similar to onError(Throwable error) function except that it provides one more argument to access the top-level (root) agent of the model. Parameters: |
Function |
Description |
String[] getCommandLineArguments() |
Returns an array of command-line arguments passed to this experiment on model start. Never returns null: if no arguments are passed, an empty array is returned. You can call this function in the experiment's Additional class code. |