Notation
This page defines the complete mathematical notation used across the Cobre documentation: index sets, parameters, decision variables, and dual variables. It is the canonical reference for symbol meanings, ensuring consistency across all mathematical and data model content.
1. General Notation Conventions
This document follows SDDP.jl notation conventions for consistency with the broader SDDP literature:
| Convention | Meaning |
|---|---|
| Stage index | |
| Scenario realization at stage | |
| State variables at end of stage | |
| Incoming state (from previous stage) | |
| Value function (cost-to-go) at stage | |
| Epigraph variable approximating | |
| Dual variables (Lagrange multipliers) | |
| Cut intercept and coefficients | |
| Iteration counter |
2. Index Sets
| Symbol | Description | Typical Size | Notes |
|---|---|---|---|
| Stages | 60-120 | 5-10 year monthly horizon | |
| Blocks within stage | 1-24 | 3 typical (LEVE/MÉDIA/PESADA) | |
| Buses | 4-10 | 4-5 for SIN subsystems | |
| Hydro plants | 160 | All plants in system | |
| Operating hydros (can generate) | Most/all plants typically operating | ||
| Filling hydros (no generation) | 0 | Usually 0; rare for new plants under commissioning | |
| Hydros using FPHA production model | 50 | Subset with fitted hyperplanes | |
| Hydros using constant productivity | Complement of within | ||
| Thermal plants | 130 | ||
| Non-controllable generation sources | 0 | Renewable curtailment entities | |
| Transmission lines | 10 | Regional interconnections | |
| All contracts () | 10 | Unified contract set | |
| , | Import/export contracts | 5 | |
| Pumping stations | 5 | ||
| Generic constraints | 50 | User-defined | |
| Deficit segments for bus | 1 | Multiple segments optional | |
| FPHA planes for hydro | 125 | Typical value; depends on grid resolution | |
| Upstream hydros of | 1-2 | Immediate upstream in cascade | |
| Scenario realizations at stage | 20 | Standard branching factor |
3. Parameters
3.1 Time and Conversion
| Symbol | Units | Description |
|---|---|---|
| hours | Duration of block | |
| - | Block weight (fraction of stage) | |
| hm³/(m³/s) | Time conversion: m³/s over stage → hm³ |
Time Conversion Factor Derivation
The factor converts a flow rate in m³/s to a volume in hm³ accumulated over the stage duration.
Fundamental Relationship:
Unit Conversion Chain:
- Flow rate: [m³/s]
- Time period: [hours]
- Target volume: [hm³] = m³
For a stage with multiple blocks: If the stage has blocks with durations hours, and the flow is assumed constant across the stage (parallel blocks), the total time is hours:
Dimensional Analysis:
Worked Example (Monthly Stage):
| Block | Name | Duration (h) |
|---|---|---|
| 1 | LEVE | 200 |
| 2 | MÉDIA | 300 |
| 3 | PESADA | 228 |
| Total | 728 |
Verification: A constant inflow of m³/s over the month yields:
Direct calculation: ✓
3.2 Load and Costs
| Symbol | Units | Description |
|---|---|---|
| MW | Load at bus , block | |
| $/MWh | Deficit cost at bus , segment | |
| MW | Deficit segment depth | |
| $/MWh | Excess generation cost | |
| $/MWh | Thermal cost at plant , segment | |
| $/(m³/s·h) | Spillage cost | |
| $/(m³/s·h) | Diversion cost | |
| $/MWh | Exchange (transmission) cost | |
| , | $/MWh | Contract import cost / export revenue |
3.3 Hydro Parameters
| Symbol | Units | Description |
|---|---|---|
| hm³ | Incoming storage (state from previous stage) | |
| , | hm³ | Storage bounds |
| , | m³/s | Turbined flow bounds |
| , | MW | Generation bounds |
| , | m³/s | Outflow bounds |
| MW/(m³/s) | Productivity (constant model) | |
| - | FPHA plane coefficients |
3.4 Transmission and Contract Parameters
| Symbol | Units | Description |
|---|---|---|
| , | MW | Line capacity (direct/reverse) |
| - | Line efficiency | |
| , | MW | Contract capacity bounds |
3.5 Inflow Model Parameters
Note on Periodicity: The PAR(p) model uses periodic parameters that repeat with a cycle length . Common configurations:
- Monthly stages: (seasons = months)
- Weekly stages: (seasons = weeks)
- Custom resolution: = number of distinct periods in the cycle
We use “season ” as a generic term for the position within the cycle, avoiding the term “month” which is resolution-specific. The mapping converts stage index to season index .
| Symbol | Units | Description |
|---|---|---|
| m³/s | Seasonal mean inflow for season | |
| - | AR coefficient for season , lag | |
| m³/s | Residual standard deviation for season | |
| m³/s | Incoming AR lag (state) |
4. Decision Variables
Notation Convention:
- Generation variables use with entity subscript: (hydro at plant ), (thermal at plant )
- Flow variables use intuitive single letters: (turbined), (spillage), (diversion/bypass)
- Total outflow is explicitly defined: (downstream channel flow)
- Contract variables use (chi) with direction superscript: ,
- Slack variables use with constraint-type superscript
Symbol Selection Rationale:
- (turbined): from “vazão turbinada” (Portuguese) or “discharge through turbines”
- (spillage): standard hydrology notation
- (diversion): “bypass” or “desvio” — avoids confusion with demand or deficit
- (outflow): total downstream flow affecting tailrace level
- (withdrawal): “retirada” — consumptive removal from the system
- (contract): Greek chi, visually distinct from cost symbol
4.1 Per-Block Variables
Per-block variables are indexed by :
| Variable | Domain | Units | Description |
|---|---|---|---|
| MW | Deficit at bus , segment | ||
| MW | Excess generation at bus | ||
| MW | Direct flow on line | ||
| MW | Reverse flow on line | ||
| MW | Thermal generation at plant , segment | ||
| m³/s | Turbined flow at hydro | ||
| m³/s | Spillage at hydro | ||
| MW | Hydro generation at plant | ||
| m³/s | Diversion/bypass flow (to separate channel) | ||
| - | m³/s | Total downstream outflow: | |
| free | m³/s | Evaporation (can be negative for condensation) | |
| m³/s | Water withdrawal (consumptive use) | ||
| m³/s | Pumped flow at station | ||
| MW | Contract import | ||
| MW | Contract export |
4.2 Stage-Level State Variables
| Variable | Domain | Units | Description |
|---|---|---|---|
| hm³ | End-of-stage storage | ||
| - | hm³ | Average storage during stage: | |
| fixed | m³/s | AR lag (fixed by state transition) | |
| $ | Future cost (cost-to-go approximation) |
4.3 Slack Variables
Slack variables for soft constraints:
| Variable | Domain | Units | Constraint |
|---|---|---|---|
| hm³ | Storage below minimum | ||
| hm³ | Filling target shortfall | ||
| m³/s | Turbined flow below minimum | ||
| m³/s | Outflow below minimum | ||
| m³/s | Outflow above maximum | ||
| MW | Generation below minimum | ||
| , | m³/s | Evaporation violation | |
| m³/s | Water withdrawal violation | ||
| m³/s | Inflow non-negativity (if enabled) |
5. Dual Variables
Dual variables are essential for cut coefficient computation in the SDDP backward pass. This section describes how state-linking constraints are formulated in the LP for efficient solver updates, and how the resulting dual variables map to cut coefficients.
5.1 LP Formulation Strategy for Efficient Hot-Path Updates
In the SDDP algorithm, each subproblem solve requires setting the incoming state values (storage volumes and AR lags from the previous stage). For computational efficiency with solvers like HiGHS, we formulate constraints so that:
Design Principle: All incoming state variables are isolated on the right-hand side (RHS) of their respective constraints.
This allows the hot path (forward/backward passes) to update subproblems by simply modifying row bounds via changeRowBounds() without rebuilding constraint matrices. The LP matrix coefficients remain constant across all subproblem solves within a stage.
5.2 Water Balance: LP Form
The water balance is mathematically:
For LP implementation, we rearrange to isolate on the RHS:
Expanding the net flows and collecting all LP variables on the LHS:
LP Structure:
- LHS: Linear combination of LP variables (storage , flows , , , etc.)
- RHS: Incoming state only (set via row bounds in hot path)
- Constraint type: Equality ()
5.3 AR Lag Constraints: LP Form
For autoregressive inflow state variables, the constraint fixes the current-stage lag variable to the incoming value:
LP Structure:
- LHS: Single LP variable (coefficient = 1)
- RHS: Incoming lag value (set via row bounds in hot path)
- Constraint type: Equality ()
5.4 Cut Coefficient Derivation from Duals
The SDDP cut at stage has the form:
where is the intercept and are the coefficients with respect to state variables.
Key principle: For a constraint written as , the dual variable represents:
where is the optimal objective value. This is the marginal cost with respect to increasing the RHS.
Storage Dual ()
For the storage fixing constraint (see LP Formulation §4a):
The dual measures: “How does optimal cost change if incoming storage increases by 1 hm³?”
Economic interpretation:
- More incoming storage means more water available for generation
- Water has value (can displace thermal generation or avoid deficit)
- Therefore, increasing decreases cost:
- By LP convention (minimization), this gives
Cut coefficient:
No sign change is needed because the incoming state appears directly on the RHS with coefficient . By the LP envelope theorem, this dual automatically captures all downstream effects — water balance, FPHA hyperplanes, and generic constraints — without manual combination of duals from multiple constraint types. See Cut Management.
AR Lag Dual ()
For the lag fixing constraint:
The dual measures: _“How does optimal cost change if incoming lag increases by 1 m³/s?”_
Economic interpretation:
- Higher historical inflow (in the PAR model) correlates with higher expected current inflow
- Higher inflows reduce cost (more hydro generation possible)
- Therefore, (increasing the lag decreases cost)
Cut coefficient:
The cut coefficient for lag is the dual variable directly, since appears on the RHS with coefficient . No sign change or scaling is needed.
5.5 Summary Table
| Symbol | Constraint (LP Form) | RHS | Cut Coefficient |
|---|---|---|---|
| (storage fixing) | (captures all downstream effects) | ||
| (direct) | |||
| Load balance | Marginal cost of energy | ||
| Water balance | - | Not used directly for cut coefficients | |
| FPHA hyperplane | - | Captured via automatically | |
| Generic constraint | - | Captured via automatically | |
| Benders cut | Cut activity indicator |
5.6 Implementation Notes
The hot-path solver update pattern (modifying RHS via changeRowBounds for incoming state, extracting duals via getRowDual for cut coefficients) is documented in the Solver HiGHS Implementation and Solver Abstraction specs. The key property: since incoming state variables appear on the RHS of fixing constraints with coefficient , no sign change is needed when mapping duals to cut coefficients (; for AR lags, is used directly). Cut coefficient extraction is a single contiguous slice read: dual[0..n_state].
Verification check: In a typical hydrothermal system:
- (water has value, more storage reduces cost)
- (cut value increases as storage decreases — future is more expensive with less water)
- The cut correctly penalizes low storage
Cross-References
- Theory: SDDP Theory — Algorithm overview and cut generation process
- Theory: Cut Management — Cut coefficient computation and aggregation details
- Theory: PAR(p) Autoregressive Models — Detailed PAR(p) model using inflow parameters defined here
- Specs: LP Formulation — Complete LP subproblem using this notation
- Specs: Cut Management — Formal cut management specification
- Specs: PAR Inflow Model — PAR(p) inflow model specification
- Specs: Hydro Production Models — FPHA plane coefficients and productivity
- Specs: Equipment Formulations — Thermal, contract, pumping variable notation