gtopt/sddp_method.hpp file

SDDP (Stochastic Dual Dynamic Programming) method for multi-phase planning problems with state variable coupling.

Implements a forward/backward iterative decomposition similar to the PLP SDDP methodology. Each gtopt-phase corresponds to a PLP-stage and is solved as an independent LP subproblem. State variables (reservoir volumes, capacity expansion variables, and future irrigation rights) link consecutive phases:

efin[t] → eini[t+1] (reservoir volume) capainst[t] → capainst_ini[t+1] (installed capacity)

The solver uses the existing SimulationLP::state_variables() map to discover all state-variable linkages generically, without hard-coding any specific component type.

Forward pass – phases are solved in order; state variable values propagate from source columns in phase t to dependent columns in phase t+1.

Backward pass – starting from the last phase, optimality (Benders) cuts are generated from the reduced costs of the dependent state variables and added to the previous phase's LP. An elastic filter ensures feasibility when the trial point from the forward pass would otherwise make the downstream LP infeasible. Feasibility issues propagate backward iteratively: if adding a cut makes phase k infeasible, the solver builds a feasibility cut for phase k-1, and continues all the way to phase 0 if necessary.

Multi-scene support – each scene is an independent trajectory (like a PLP scenario). Scenes are solved in parallel via the work pool.

Cut sharing – optimality cuts generated in one scene can be shared with other scenes at the same phase level. Three modes are supported:

  • None: cuts stay in their originating scene (default)
  • Expected: an average cut across scenes is computed and added to all
  • Max: all cuts from all scenes are added to all scenes

Cut persistence – cuts can be saved to and loaded from JSON files for hot-start capability.

The solver iterates until the gap between the upper bound (forward-pass cost) and the lower bound (with future-cost approximation) falls below a configurable tolerance, or a maximum iteration count is reached.

Namespaces

namespace gtopt

Classes

class gtopt::SDDPMethod
Iterative SDDP solver for multi-phase power system planning.
class gtopt::SDDPPlanningMethod
Adapter that wraps SDDPMethod behind the PlanningMethod interface.