A package for discrete-time optimal stochastic control
Clone or download
Latest commit d9b339d Sep 17, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc changing ubound nstage xbound accross files May 17, 2017
examples Merge branch 'sddpdual' into fp/refact May 11, 2018
src Merge previous branch Sep 17, 2018
test fix unittests May 11, 2018
.travis.yml remove julia 0.5 in travis May 11, 2018
LICENSE.md [UPD] Add LICENSE.md to package May 25, 2016
NEWS.md [UPD] Update NEWS.md Nov 15, 2017
README.md Update Discourse logo Feb 28, 2018
REQUIRE minor fixes May 11, 2018



WARNING: This package is currently in development. Any help or feedback is appreciated.

Latest release: v0.5.0

Documentation Build Status Social
Build Status Gitter
Codecov branch

This is a Julia package for optimizing controlled stochastic dynamic system (in discrete time). It offers three methods of resolution :

  • Stochastic Dual Dynamic Programming (SDDP) algorithm.
  • Extensive formulation.
  • Stochastic Dynamic Programming.

It is built upon JuMP

What problem can we solve with this package ?

  • Stage-wise independent discrete noise
  • Linear dynamics
  • Linear or convex piecewise linear cost

Extension to non-linear formulation are under development. Extension to more complex alea dependance are under developpment.

Why Extensive formulation ?

An extensive formulation approach consists in representing the stochastic problem as a deterministic one with more variable and call a standard deterministic solver. Mainly usable in a linear setting. Computational complexity is exponential in the number of stages.

Why Stochastic Dynamic Programming ?

Dynamic Programming is a standard tool to solve stochastic optimal control problem with independent noise. The method require discretisation of the state space, and is exponential in the dimension of the state space.


SDDP is a dynamic programming algorithm relying on cutting planes. The algorithm require convexity of the value function but does not discretize the state space. The complexity is linear in the number of stage, and can accomodate higher dimension state than standard dynamic programming. The algorithm return exact lower bound and estimated upper bound as well as approximate optimal control strategies.


Installing StochDynamicProgramming is an easy process. Currently, the package depends upon StochasticDualDynamicProgramming.jl, which is not yet registered in Julia's METADATA. To install the package, open Julia and enter

julia> Pkg.update()
julia> Pkg.add("StochDynamicProgramming")


IJulia Notebooks will be provided to explain how this package work. A first example on a two dams valley here.


The documentation is built with Sphinx, so ensure that this package is installed:

sudo apt-get install python-sphinx

To build the documentation:

cd doc
make html


Released under Mozilla Public License (see LICENSE.md for further details).