StructDualDynProg.jl Documentation
This packages aims at providing an implementation of SDDP that is both efficient and modular/flexible. It features the following:
- Support for unfeasible problem by generating a feasibility cut.
- Support for unbounded problem by using an unbounded ray.
- Support for a variety of cut pruning algorithm through the CutPruners package.
- Support for any linear or conic solvers available through MathProgBase; see JuliaOpt's webpage for a list.
- Support modeling the problem using the StructJuMP modeling interface.
- Support specifying the problem using a low-level interface. This is used for example by the EntropicCone package.
The packages is built on top of StochOptInterface (SOI). It implements an representation of stochastic programming implementing SOI in the StructProg
submodule and provides the following function for transforming a StructJuMP model into an instance of this representation:
StochOptInterface.stochasticprogram
— Method.stochasticprogram(m::JuMP.Model, num_stages, solver,
pruningalgo::CutPruners.AbstractCutPruningAlgo,
cutgen::AbstractOptimalityCutGenerator=MultiCutGenerator(),
detectlb::Bool=true, newcut::Symbol=:InvalidateSolver)
Creates a StochasticProgram
from a StructJuMP model. The former can then be used by the SDDP algorithm. The master problem is assumed to have model m
and the scenarios are considered up to num_stages
stages. The pruningalgo
is as defined in CutPruners. If cutgen
is MultiCutGenerator
, one variable θ_i
is created for each scenario. Otherwise, if cutgen
is AvgCutGenerator
, only one variable θ
is created and it represents the expected value of the objective value of the scenarios. If cutgen
is NoOptimalityCut
then no θ
is created, only use this option if the objective of all models is zero except for the master model.
This packages also provides an implemention of the SDDP algorithm that can be run on any stochastic program implementing the SOI interface:
StructDualDynProg.SDDP.Algorithm
— Type.struct Algorithm{ST<:AbstractPathSampler}
K::Int
verbose::Int
pathsampler::ST
ztol::Float64
stopatinf::Bool
mergepaths::Bool
forwardcuts::Bool
backwardcuts::Bool
end
SDDP algorithm exploring K
paths per iteration stages. The paths will be selected according to pathsampler
and equivalent paths might be merged if their difference is smaller than ztol
and mergepaths
is true. The parameter ztol
is also used to check whether a new cut is useful. When a scenario is infeasible and stopatinf
is true then no other scenario with the same ancestor is run. Note that since the order in which the different scenarios is run is not deterministic, this might introduce nondeterminism even if the sampling is deterministic. By default, the cuts are added backward. However, if forwardcuts
is set to true
and backwardcuts
is set to false
the cuts are added forward.