gtopt::SDDPIterationResult struct

Result of a single SDDP iteration (forward + backward pass)

Public variables

double backward_pass_s
Wall-clock time in seconds for the backward pass (all scenes).
bool converged
int cuts_added
Number of Benders cuts added this iteration.
bool feasibility_issue
True if elastic filter was activated.
double forward_pass_s
Wall-clock time in seconds for the forward pass (all scenes).
double gap
double gap_change
int infeasible_cuts_added
IterationIndex iteration
Iteration number (0-based)
double iteration_s
Total wall-clock time in seconds for this iteration.
double lower_bound
Lower bound (phase 0 obj including a)
std::vector<double> scene_lower_bounds
std::vector<double> scene_upper_bounds
Per-scene upper bounds (forward-pass costs). Size = num_scenes.
bool stationary_converged
bool statistical_converged
double upper_bound
Upper bound (sum of actual phase costs)

Variable documentation

bool gtopt::SDDPIterationResult::converged

True if gap < convergence tolerance

double gtopt::SDDPIterationResult::gap

Relative gap: (UB - LB) / max(1, |UB|)

double gtopt::SDDPIterationResult::gap_change

Relative change in gap vs. stationary_window iterations ago. Populated only when stationary_tol > 0 and enough iterations have elapsed; 1.0 otherwise (meaning "not yet checked / not applicable").

int gtopt::SDDPIterationResult::infeasible_cuts_added

Number of successful elastic-filter solves this iteration. Each elastic-filter solve corresponds to an LP infeasibility event; in the backward pass these become Benders feasibility cuts.

std::vector<double> gtopt::SDDPIterationResult::scene_lower_bounds

Per-scene lower bounds (phase-0 objective values). Size = num_scenes.

bool gtopt::SDDPIterationResult::stationary_converged

True when convergence was declared by the stationary-gap criterion (gap_change < stationary_tol) rather than the primary criterion.

bool gtopt::SDDPIterationResult::statistical_converged

True when convergence was declared by the statistical CI criterion (|UB - LB| <= z_{a/2} * s / sqrt(N)) rather than the primary criterion.