SML (Structured Modelling Language) is an implementation of a structure-conveying extension to the AMPL modelling language. SML extends AMPL with features that allow to construct models from sub-models and facilitate the formulation of stochastic programming problems with recourse.

Constraints in large-scale problems are usually generated by replicating a limited number of constraint prototypes over large index sets: this process leads to matrices in which the sparsity pattern displays a structure, that is a discernible pattern in the non-zero entries of the constraint matrix. In such cases, it is possible to partition the matrix into blocks, only some of which contain non-zero elements, while the rest are empty.

The AMPL language is extended by the block keyword that groups together model entities and allows them to be repeated over indexing sets. Unlike traditional modelling languages, the new approach does not scramble the block structure of the problem, and thus it enables the passing of this structure on to the solver. Its design allows the problem generation phase to be parallelisable.


SML was first released to the public as version 0.7 on 24 March 2009. Version 0.7.1 was released on 12 August 2009.

SML is currently at version 0.7.2, released on 18 February 2011.

This version has been developed and tested on 32 bit Gnu/Linux systems. It has been made to compile and run also with MinGW on Window (XP and Vista). Despite our best efforts, it may not work right away on different systems: if that's the case, please report it to us.


SML is released under the LGPLv3 license. SML is distributed with a demo version of OOPS (Object-Orientated Parallel Solver) limited to 5000 variables and constraints. The OOPS library is distributed under a closed-source license and may only be linked with the LGPL SML library. Its use without SML is not allowed.


Development and justification of SML has been documented in the following research papers: