Stochastic Parameters and Variables

The set AllStochasticScenarios

To allow the storage of scenario-dependent parameter and variable data for multiple scenarios in a stochastic model, all such scenarios should be added to the predefined set AllStochasticScenarios. If your application contains multiple stochastic models-each with different scenario sets-the set AllStochasticScenarios should be the union of all these scenario sets. For each stochastic model you can then define an associated subset of AllStochasticScenarios to use with that particular stochastic model.

Stochastic parameters

Stochastic events are modeled in AIMMS as numeric Parameters for which the Stochastic property has been set (see also Parameter Declaration and Attributes). For stochastic parameters AIMMS provides an additional .Stochastic suffix, which you can use to store scenario-dependent stochastic event outcomes. The data stored in the suffix is used by AIMMS when generating the stochastic model. The index domain of the .Stochastic suffix is, therefore, the set AllStochasticScenarios plus the original domain of the parameter.


Consider the following declarations

Set MyScenarios {
    SubsetOf     : AllStochasticScenarios;
    Index        : sc;
Parameter Demand {
    IndexDomain  : (c,t);
    Property     : Stochastic;

These declarations will cause AIMMS to create a .Stochastic suffix for the parameter Demand(c,t). To use, or assign values to, Demand.Stochastic, you must use an additional index into (a subset of) AllStochasticScenarios. The following statement provides an example of such a statement.

Demand.Stochastic(sc,c,t) := Uniform(10,20);

If a constraint contains a reference to the parameter Demand, AIMMS will use the data in Demand.Stochastic to generate the appropriate demand constraint for every scenario.

Stochastic variables

By setting the Stochastic property for a Variable in your model, you indicate to AIMMS that this variable may have multiple, scenario-dependent, solutions when used in a stochastic model. Consequently, when generating a matrix for the stochastic model, a column will be generated conceptually for every single scenario.

The Stage attribute

For stochastic variables you must also specify the mandatory Stage attribute. Through the Stage attribute you specify the stage at the end of which the decision corresponding to the stochastic variable is to be taken. The value of the Stage attribute must be an explicit positive integer value, or a parameter reference involving some or all of the indices on the index list of the declared variable.

Non-anticipativity constraints…

As discussed in the previous section, for every scenario \(s_0\), a stochastic variable \(x\) gets its value \(x_{s_0}\) at the end of stage \(n\) as specified in the Stage attribute of the variable. In addition, its value is based on the specific outcomes of the stochastic events for that scenario taking place during stages \(1,\dots,n\), but only on the distribution of the stochastic event outcomes for any further stages. Therefore, the value \(x_s\) must be equal to \(x_{s_0}\) for every other scenario \(s\) that passes through the same node in the scenario tree at the end of stage \(n\) as \(s_0\). The constraints enforcing this equality are called non-anticipativity constraints-they do not allow the solution to anticipate on stochastic outcomes that lie beyond the stage as specified by the Stage suffix.

…enforced explicitly or implicitly

When generating a stochastic model, AIMMS will automatically enforce the non-anticipativity constraints, either by explicitly adding them to the generated matrix, or implicitly by substituting a single representative \(x_{s_0}\) for every other variable \(x_s\). While enforcing non-anticipativity in an implicit manner will drastically reduce the matrix size, an explicit representation may be helpful for solvers able to decompose the generated matrix.

Non-stochastic variables

If a variable in a stochastic model has not been declared stochastic, it is deterministic in the sense that it assumes the same value for every scenario, as is the case with first stage variables.

The .Stochastic suffix for variables

Variables can also have a .Stochastic suffix in AIMMS. It follows the same rules for its index domain as the .Stochastic suffix of parameters. AIMMS uses the .Stochastic suffix of variables to store the solution data of a stochastic model after solving it. However, contrary to stochastic parameters, AIMMS will not only create the .Stochastic suffix for stochastic variables, but for all variables that are involved in a stochastic model.

Contents of .Stochastic suffix

The values stored in the .Stochastic suffix after solving a stochastic model for each type of variable are as follows:

  • for stochastic variables, the .Stochastic suffix will contain the solution of the variable for each scenario,

  • for the objective variable, the .Stochastic suffix will contain the contribution to the objective of each scenario, as well as the weighted objective value of the stochastic model itself,

  • for any other non-stochastic variable, the .Stochastic suffix will contain the deterministic solution of that variable for the stochastic model.

As the solution of a stochastic model is entirely stored in the .Stochastic suffix, the solution of the underlying deterministic model remains completely intact after solving the stochastic model. This makes it easy to visually, and/or programmatically, compare the solutions of the deterministic and stochastic model.

Non-stochastic solution data

As the objective value and solution of the non-stochastic variables of the stochastic model cannot be coupled directly with one specific scenario in the scenario set, AIMMS creates an extra element in the set AllStochasticScenarios for this purpose. You must specify the name of this element when solving the stochastic model (see also Solving Stochastic Models).