A modeling framework for stochastic programming problems


Stochastic programming models recourse problems where an initial decision is taken, uncertain parameters are observed, followed by recourse decisions to correct any inaccuracy in the initial decision. StochasticPrograms.jl is a general purpose modeling framework for stochastic programming. The framework includes both modeling tools and structure-exploiting optimization algorithms. The underlying optimization problems are formulated using JuMP.jl. Stochastic programming models can be efficiently formulated using an expressive syntax and models can be instantiated, inspected, and analyzed interactively. The framework scales seamlessly to distributed environments. Small instances of a model can be run locally to ensure correctness, while larger instances are automatically distributed in a memory-efficient way onto supercomputers or clouds and solved using parallel optimization algorithms. These structure-exploiting solvers are based on variations of the classical L-shaped, progressive-hedging, and quasi-gradient algorithms.

The framework will prove useful to researchers, educators and industrial users alike. Researchers will benefit from the readily extensible open-source framework, where they can formulate complex stochastic models or quickly typeset and test novel optimization algorithms. Educators of stochastic programming will benefit from the clean and expressive syntax. Moreover, the framework supports analysis tools and stochastic programming constructs, such as expected value of perfect information (EVPI) and value of the stochastic solution (VSS), from classical theory and leading textbooks. Industrial practitioners can make use of StochasticPrograms.jl to rapidly formulate complex models, analyze small instances locally, and then run large-scale instances in production. In doing so, they get distributed capabilities for free, without changing the code, and access to well-tested state-of-the-art implementations of parallel structure-exploiting solvers. A good introduction to recourse models, and to the stochastic programming constructs provided in this package, is given in Introduction to Stochastic Programming.


  • Flexible problem definition
  • Deferred model instantiation
  • Scenario data injection
  • Comprehensive collection of stochastic programming methods
  • Natively distributed
  • Interface to structure-exploiting solver algorithms
  • Efficient parallel implementations of classical algorithms

Consider Quick start for a tutorial explaining how to get started using StochasticPrograms.

Some examples of models written in StochasticPrograms can be found on the Examples page.

See the Index for the complete list of documented functions and types.


If you use StochasticPrograms, please cite the following preprint:

  title     = {Efficient Stochastic Programming in {J}ulia},
  author    = {Martin Biel and Mikael Johansson},
  journal   = {arXiv preprint arXiv:1909.10451},
  year      = {2019}

If you use the cut aggregation funcionality for L-shaped, please cite the following preprint

  title     = {Dynamic cut aggregation in {L}-shaped algorithms},
  author    = {Martin Biel and Mikael Johansson},
  journal   = {arXiv preprint arXiv:1910.13752},
  year      = {2019}

Manual Outline

Library Outline