Julia package for formulating and analyzing stochastic recourse models.
64 Stars
Updated Last
1 Year Ago
Started In
April 2018


A modeling framework for stochastic programming problems

Build Status


pkg> add StochasticPrograms


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 and value of the stochastic solution, 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. To learn more about the package, consider the documentation.

Project Status

The package is tested against Julia 1.6, 1.8 and nightly branches on Linux, macOS, and Windows. See NEWS for release notes.

An older version for Julia 0.6 is available on the compat-0.6 branch, but backwards compatibility can not be promised.


If you use StochasticPrograms, please cite the following preprint:

  title={Efficient stochastic programming in Julia},
  author={Biel, Martin and Johansson, Mikael},
  journal={INFORMS Journal on Computing},