Discount Rate Formulation
Purpose
This spec defines how discount rates are incorporated into the Cobre SDDP solver: the discounted Bellman equation, stage-dependent discount factors, effect on the future cost variable , cumulative discounting, and the effect on lower/upper bound computation.
For the infinite periodic horizon formulation (where discounting is required for convergence), see Infinite Horizon.
For notation conventions (index sets, parameters, decision variables, dual variables), see Notation Conventions.
Symbol convention: This spec uses for the discount factor. The deficit variable uses a different symbol (lowercase delta), so there is no conflict.
1 Motivation
The discount factor captures the time value of money or risk preference, where future costs are valued less than present costs. This is essential for:
- Infinite horizon problems: Ensuring convergence of the value function
- Economic consistency: Reflecting opportunity cost of capital
- Risk adjustment: Implicitly reducing weight of distant uncertain outcomes
2 Discounted Bellman Equation
The standard risk-neutral Bellman recursion with discount factor is:
where:
- is the immediate cost at stage
- is the future cost function (cost-to-go)
- is the discount factor for the transition from stage to
Formulation Note: The discount factor multiplies only the future cost , not the immediate cost . This is the standard SDDP convention:
- Immediate cost : Not discounted (incurred “now” at stage )
- Future cost : Discounted to present value at stage
This is mathematically equivalent to computing all costs at “time 0” (stage 1) present value, where stage costs are multiplied by in the objective. The Bellman formulation above is the recursive form that SDDP exploits.
3 Input Specification
Discount rates are specified as an annual rate in stages.json, within the policy_graph section:
{
"policy_graph": {
"type": "finite_horizon",
"annual_discount_rate": 0.06,
"transitions": [
{ "source_id": 0, "target_id": 1, "probability": 1.0 },
{ "source_id": 1, "target_id": 2, "probability": 1.0 }
]
}
}
The system converts the annual rate to a per-transition discount factor based on each stage’s duration:
- Stage duration is derived from
end_date - start_date, expressed in years - Transition discount factor:
- The duration used is that of the source stage (the stage whose future cost is being discounted)
A value of 0.0 means no discounting ( for all transitions).
Individual transitions may override the global rate:
{
"source_id": 59,
"target_id": 48,
"probability": 1.0,
"annual_discount_rate": 0.1
}
For the complete policy_graph schema, see Input Scenarios §1.2.
4 Discount Factor in the Stage Subproblem
The discount factor is applied to the future cost variable in the stage objective, not to the cut coefficients:
subject to all standard constraints (load balance, hydro balance, etc.) and Benders cuts:
The cut coefficients are the undiscounted values from the backward pass. Cuts are stored and managed in undiscounted form — the discount factor appears only in the objective coefficient of . See Cut Management for cut generation and aggregation details.
Why discount on , not on cuts: Applying the discount factor to the variable rather than scaling each cut individually is simpler and avoids modifying cut coefficients. The mathematical result is identical — if and appears in the objective, it is equivalent to having with in the objective.
5 Cumulative Discounting
For a path from stage 1 to stage , the cumulative discount factor is:
The present value at stage 1 of costs incurred at stage is:
where .
6 Lower Bound with Discounting
The deterministic lower bound at iteration is:
where is the optimal value of the future cost variable at stage 1. Because the discount factor cascades through at each stage, the lower bound already reflects cumulative discounting to stage 1 present value.
7 Upper Bound (Simulation) with Discounting
When simulating the policy to estimate the upper bound:
Each stage’s immediate cost is explicitly discounted to stage 1 present value using the cumulative discount factor.
For stopping rules that use these bounds, see Stopping Rules.
8 Reporting
Both the lower bound and upper bound represent total expected cost expressed in present value at stage 1:
- A lower bound of $100M means the optimal policy costs at least $100M in stage-1 dollars
- Future costs are already discounted: a $1M cost at stage 12 with contributes $0.95M to the bounds
- Comparisons between bounds and between iterations are valid because they use consistent discounting
- When reporting per-stage costs in simulation outputs, Cobre reports both nominal (undiscounted) and present value costs
9 Infinite Horizon Considerations
For cyclic policy graphs (infinite periodic horizon), discounting is required for convergence. The cumulative discount around one full cycle must satisfy:
This ensures the value function remains finite: .
Typical setup: An annual discount rate of 6% gives per 12-month cycle.
For the complete infinite horizon formulation — including cut sharing within cycles, modified forward/backward passes, and convergence criteria — see Infinite Horizon.
Cross-References
- Input Scenarios §1.2 —
policy_graphschema withannual_discount_rateand per-transition overrides - SDDP Algorithm — Core Bellman equation and forward/backward pass structure that discount rates modify
- Cut Management — Cut coefficients remain undiscounted; discount applied to in objective
- Stopping Rules — Convergence criteria using discounted lower/upper bounds
- Upper Bound Evaluation — Inner approximation uses discounted vertex values
- Infinite Horizon — Cycle detection, cut sharing, modified passes, convergence for periodic problems
- Configuration Reference —
stages.jsontransition discount rates