Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cut Management

Purpose

This spec defines the complete Benders cut lifecycle in Cobre: what cuts represent mathematically, how cut coefficients relate to LP dual variables, how per-scenario cuts are aggregated into a single cut, under what conditions cuts are valid, and what selection strategies are available to control cut pool growth. For cut pool persistence and in-memory layout, see Binary Formats §3–4.

1. Cut Definition

A Benders cut at stage is a linear inequality that provides a lower bound on the cost-to-go function :

where:

  • is the future cost variable in the stage LP
  • is the cut intercept
  • is the storage coefficient for hydro (marginal value of water)
  • is the AR lag coefficient for hydro , lag (marginal value of inflow history)
  • , are the state variables (see LP Formulation §4, §5)

The cut coefficients are dense — every state variable (all storage volumes and all AR lags) has a non-zero coefficient in every cut. See Binary Formats §3.4 for the implications on memory layout.

2. Dual Variable Extraction

After solving the stage subproblem for trial state and scenario , the cut coefficients are derived from the LP dual variables of the fixing constraints — the equality constraints that bind each state variable to its incoming value.

Both storage and inflow lags use the same pattern: an incoming-state LP variable is fixed to the trial value via an equality constraint, and the dual of that constraint gives the cut coefficient directly:

ConstraintDual VariableCut CoefficientUnits
Storage fixing (hydro )$/hm³
AR lag fixing (hydro , lag )$/(m³/s)

The cut intercept ensures the cut passes through the trial point:

where is the optimal objective value of the stage subproblem.

Sign convention: By the LP envelope theorem, where is the dual of the fixing constraint . Since the incoming state appears on the RHS of its fixing constraint with coefficient , the cut coefficient equals the fixing constraint dual directly — no scaling factors are needed for either storage or inflow lags. The fixing constraint dual automatically captures all downstream effects: for storage, this includes contributions from the water balance, FPHA hyperplanes, and any generic constraints that reference the incoming storage variable (see LP Formulation §4a).

Design note: This “fishing constraint” approach (introducing an incoming-state LP variable fixed to the trial value) is the standard technique used by SDDP.jl and other modern SDDP implementations. It eliminates the need to combine duals from multiple constraint types (water balance, FPHA, generic) to compute storage cut coefficients — the LP solver handles this automatically through the fixing constraint dual. See LP Formulation §4a for the constraint definition.

3. Single-Cut Aggregation

In the single-cut formulation, per-scenario cuts from the backward pass are aggregated into one cut per trial point by taking the probability-weighted expectation:

where is the probability of scenario .

Opening tree correspondence: The per-scenario cuts , correspond to the noise vectors in the fixed opening tree — a pre-generated set of branchings created once before training begins. The backward pass always evaluates all openings, so the aggregation probabilities are uniform: . See Scenario Generation §2.3.

The aggregated cut is added to stage ’s cut pool.

Discount factor: When the problem uses stage-dependent discount rates, discounting is applied to the variable in the stage objective function (i.e., ), rather than scaling the cut coefficients directly. This is simpler — the cuts remain unmodified and the discount factor appears only in the objective. See Discount Rate for the discounted Bellman equation and how discount factors interact with cut generation.

Multi-cut formulation: An alternative formulation creates one cut per scenario instead of aggregating, with per-scenario future cost variables . This is deferred — see Deferred Features §C.3.

4. Cut Validity

A cut is valid if it is a lower bound on the true cost-to-go function everywhere in the feasible state space:

Validity conditions: The cuts generated by SDDP are valid under:

  1. Convexity of stage subproblems — guaranteed because all subproblems are LPs
  2. Relatively complete recourse — feasibility for all states and scenarios. In Cobre, this is guaranteed by the recourse slack system (Category 1 penalties): every constraint that could be violated by exogenous uncertainty has a penalty slack variable, ensuring the LP is always feasible. See Penalty System.
  3. Correct dual extraction — duals must come from an optimal LP solution (not an infeasible or unbounded one)

5. Cut Growth and Selection Motivation

The number of cuts grows as . Many older cuts become redundant as newer, tighter cuts are generated. Without selection, LP solve time increases linearly with iteration count.

Cut selection removes inactive cuts to:

  1. Reduce LP solve time (fewer constraint rows)
  2. Improve numerical stability (remove near-parallel constraints)
  3. Control memory consumption

Deactivation mechanism: Cuts are not deleted — they are deactivated by relaxing their bound to . This preserves cut indices for reproducibility and allows reactivation if needed. See Binary Formats §4 for the preallocation strategy.

6. Cut Activity

A cut at stage is active at state if it is binding at the optimal LP solution:

Equivalently, the dual multiplier of the cut constraint is positive ().

Activity threshold: A threshold parameter relaxes the binding condition:

ThresholdEffect
0Only strictly binding cuts are active
1e-6Near-binding cuts included (numerical tolerance)
1e-3Moderately loose cuts retained
LargeAll cuts considered active (no selection)

7. Selection Strategies

Three cut selection strategies are available, in increasing order of aggressiveness:

7.1 Level-1

A cut is Level-1 active if it was binding at least once during the entire algorithm execution. Periodically (every iterations), cuts that have never been active are deactivated. This strategy was originally proposed by de Matos, Philpott & Finardi (2015).

Properties:

  • Least aggressive — retains any cut that was ever useful
  • May keep some cuts that were active early but are now permanently dominated
  • Preserves convergence guarantee (see §8)

7.2 Limited Memory Level-1 (LML1)

Each cut is timestamped with the most recent iteration at which it was active. Periodically, cuts whose timestamp is older than a configurable memory window (in iterations) are deactivated.

Properties:

  • More aggressive than Level-1 — forgets cuts that haven’t been active recently
  • Memory window controls the trade-off between retention and aggressiveness
  • Preserves convergence guarantee (see §8)

7.3 Dominated Cut Detection

A cut is dominated if no other cut in the pool is ever tighter at any visited state. Formally, cut is dominated by the remaining cuts if:

Since checking this globally is intractable, domination is assessed at visited states only: a cut is dominated if at every visited state , some other cut achieves a higher (or equal within ) value:

Properties:

  • Most aggressive — directly identifies cuts that provide no value at any known operating point
  • Computational cost is per stage per check
  • May remove cuts that would be active at unvisited states (acceptable as the visited set grows dense)

8. Convergence Guarantee

Theorem (Bandarra & Guigues, 2021): Under Level-1 or LML1 cut selection, SDDP with finitely many scenarios converges to the optimal value function with probability 1.

Key insight: Removing cuts that are never active at any visited state does not affect the outer approximation quality at those states. As the set of visited states becomes dense over iterations, the approximation converges.

Bandarra, M., & Guigues, V. (2021). “Single cut and multicut stochastic dual dynamic programming with cut selection for multistage stochastic linear programs: convergence proof and numerical experiments.” Computational Management Science, 18(2), 125-148. https://doi.org/10.1007/s10287-021-00387-8

9. Selection Parameters

The cut selection strategy is configured with the following parameters:

ParameterDescriptionApplies to
methodSelection strategy: "level1", "lml1", or "domination"All
thresholdLevel1: activity count (u64). Dominated: epsilon tolerance (f64). LML1: maps to memory_windowLevel1, Dominated
check_frequencyIterations between selection runsAll
memory_windowIterations to retain inactive cuts (LML1 only; the JSON threshold field is mapped to this)LML1 only

See Configuration Reference for the JSON schema.

Cross-References