# SDOM Formulation > **Storage Deployment Optimization Model (SDOM)**: a mixed-integer linear program that co-optimizes > investment in renewable generation, balancing units, and storage technologies while dispatching > all resources to meet electrical demand at minimum annualized system cost subject to a clean-energy > target. --- ## Sets | Notation | Index | Description | | --------------------------------------- | ----- | ------------------------------------ | | $\mathcal{P}$ | $p$ | PV plants | | $\mathcal{W}$ | $w$ | Wind plants | | $\mathcal{K}$ | $k$ | Balancing units (dispatchable) | | $\mathcal{H}$ | $h$ | Hours (time steps) | | $\mathcal{B}$ | $b$ | Hydro budget periods | | $\mathcal{H}_b \subseteq \mathcal{H}$ | $h$ | Hours belonging to budget period $b$ | | $\mathcal{J}$ | $j$ | Storage technologies | | $\mathcal{J}^{c} \subseteq \mathcal{J}$ | $j$ | Coupled storage technologies | --- ## Parameters ### Derived quantities The **capital recovery factor** annualizes a lump-sum investment over lifetime $l$ at discount rate $r$: $$ \text{CRF}(l) = \frac{r\,(1+r)^{l}}{(1+r)^{l} - 1} $$ ### System | Notation | Description | Units | Domain | | -------- | ------------------------------------- | ----- | -------------- | | $d_h$ | Electrical demand at hour $h$ | MW | $\mathbb{R}_+$ | | $r$ | Discount rate | — | $\mathbb{R}_+$ | | $\tau$ | Minimum clean-energy generation share | — | $[0, 1]$ | ### Fixed generation profiles Exogenous time series scaled by activation parameters $\alpha$. | Notation | Description | Units | Domain | | -------------- | ---------------------------------- | ----- | -------------- | | $\rho_h$ | Run-of-river hydro generation | MW | $\mathbb{R}_+$ | | $\nu_h$ | Nuclear generation profile | MW | $\mathbb{R}_+$ | | $\omega_h$ | Other renewable generation profile | MW | $\mathbb{R}_+$ | | $\alpha^{nuc}$ | Nuclear activation scalar | — | $\{0, 1\}$ | | $\alpha^{hyd}$ | Hydro activation scalar | — | $\{0, 1\}$ | | $\alpha^{oth}$ | Other renewables activation scalar | — | $\{0, 1\}$ | ### Renewable investment | Notation | Description | Units | Domain | | -------------------- | ----------------------------------------------- | -------- | -------------- | | $\sigma_{ph}$ | Solar capacity factor for plant $p$ at hour $h$ | — | $[0, 1]$ | | $\zeta_{wh}$ | Wind capacity factor for plant $w$ at hour $h$ | — | $[0, 1]$ | | $\bar{p}^{pv}_p$ | Max allowed PV capacity for plant $p$ | MW | $\mathbb{R}_+$ | | $\bar{p}^{wind}_w$ | Max allowed wind capacity for plant $w$ | MW | $\mathbb{R}_+$ | | $\kappa^{pv}_p$ | PV CAPEX | \$/MW | $\mathbb{R}_+$ | | $\kappa^{wind}_w$ | Wind CAPEX | \$/MW | $\mathbb{R}_+$ | | $\kappa^{tc,pv}_p$ | PV transmission capital cost | \$/MW | $\mathbb{R}_+$ | | $\kappa^{tc,wind}_w$ | Wind transmission capital cost | \$/MW | $\mathbb{R}_+$ | | $\phi^{pv}_p$ | PV fixed O\&M | \$/MW-yr | $\mathbb{R}_+$ | | $\phi^{wind}_w$ | Wind fixed O\&M | \$/MW-yr | $\mathbb{R}_+$ | | $l^{vre}$ | VRE lifetime (shared across all PV and wind) | yr | $\mathbb{Z}_+$ | ### Balancing units | Notation | Description | Units | Domain | | ----------------------- | -------------------------------------------------- | -------- | -------------- | | $\underline{p}^{bal}_k$ | Min balancing capacity | MW | $\mathbb{R}_+$ | | $\bar{p}^{bal}_k$ | Max allowed balancing capacity | MW | $\mathbb{R}_+$ | | $\kappa^{bal}_k$ | Balancing unit CAPEX | \$/MW | $\mathbb{R}_+$ | | $\gamma_k$ | Marginal fuel cost (fuel price $\times$ heat rate) | \$/MWh | $\mathbb{R}_+$ | | $\phi^{bal}_k$ | Balancing fixed O\&M | \$/MW-yr | $\mathbb{R}_+$ | | $\psi^{bal}_k$ | Balancing variable O\&M | \$/MWh | $\mathbb{R}_+$ | | $l^{bal}_k$ | Balancing unit lifetime | yr | $\mathbb{Z}_+$ | ### Hydro | Notation | Description | Units | Domain | | ----------------------- | ----------------------------------------------- | ----- | -------------- | | $\underline{g}^{hyd}_h$ | Hourly hydro lower bound | MW | $\mathbb{R}_+$ | | $\overline{g}^{hyd}_h$ | Hourly hydro upper bound | MW | $\mathbb{R}_+$ | | $\epsilon_b$ | Energy budget for period $b$ (from time series) | MWh | $\mathbb{R}_+$ | ### Trade | Notation | Description | Units | Domain | | --------------- | ------------------------------- | ------ | -------------- | | $\bar{\iota}_h$ | Max import capacity at hour $h$ | MW | $\mathbb{R}_+$ | | $\bar{\xi}_h$ | Max export capacity at hour $h$ | MW | $\mathbb{R}_+$ | | $c^{imp}_h$ | Import price at hour $h$ | \$/MWh | $\mathbb{R}_+$ | | $c^{exp}_h$ | Export price at hour $h$ | \$/MWh | $\mathbb{R}_+$ | ### Storage | Notation | Description | Units | Domain | | ---------------------- | ------------------------------------------------- | -------- | -------------- | | $\kappa^{P}_j$ | CAPEX power | \$/MW | $\mathbb{R}_+$ | | $\kappa^{E}_j$ | CAPEX energy | \$/MWh | $\mathbb{R}_+$ | | $\eta_j$ | Roundtrip efficiency (charge $\times$ discharge) | — | $(0, 1]$ | | $\underline{\delta}_j$ | Min duration | hr | $\mathbb{R}_+$ | | $\overline{\delta}_j$ | Max duration | hr | $\mathbb{R}_+$ | | $\bar{p}^{stor}_j$ | Max installable power capacity | MW | $\mathbb{R}_+$ | | $\alpha_j$ | Cost ratio: fraction of power cost on charge side | — | $[0, 1]$ | | $\phi^{stor}_j$ | Fixed O\&M | \$/MW-yr | $\mathbb{R}_+$ | | $\psi^{stor}_j$ | Variable O\&M (applied to discharge only) | \$/MWh | $\mathbb{R}_+$ | | $l^{stor}_j$ | Lifetime | yr | $\mathbb{Z}_+$ | | $\kappa^{cyc}_j$ | Max lifetime cycles | — | $\mathbb{R}_+$ | > **Coupled vs decoupled storage.** > A **coupled** technology (e.g. Li-Ion battery, pumped hydro) uses shared equipment for > charge and discharge, so the power ratings are forced equal: $P^{ch}_j = P^{dis}_j$. > A **decoupled** technology (e.g. CAES, hydrogen) has separate input and output equipment, > so $P^{ch}_j$ and $P^{dis}_j$ can be independently sized. > > The cost ratio $\alpha_j$ distributes power-related costs (CAPEX, FOM) between the charge > side (fraction $\alpha_j$) and the discharge side (fraction $1 - \alpha_j$). For coupled > storage where $P^{ch}_j = P^{dis}_j$, the split is immaterial. --- ## Variables ### Renewable (investment and dispatch) | Variable | Description | Units | Domain | | ------------ | -------------------------------------- | ----- | -------------- | | $F^{pv}_p$ | Fraction of max PV capacity to build | — | $[0, 1]$ | | $F^{wind}_w$ | Fraction of max wind capacity to build | — | $[0, 1]$ | | $G^{pv}_h$ | Aggregate PV generation | MW | $\mathbb{R}_+$ | | $G^{wind}_h$ | Aggregate wind generation | MW | $\mathbb{R}_+$ | | $C^{pv}_h$ | PV curtailment | MW | $\mathbb{R}_+$ | | $C^{wind}_h$ | Wind curtailment | MW | $\mathbb{R}_+$ | ### Balancing units (investment and dispatch) | Variable | Description | Units | Domain | | -------------- | ---------------------------- | ----- | -------------- | | $P^{bal}_k$ | Installed balancing capacity | MW | $\mathbb{R}_+$ | | $G^{bal}_{kh}$ | Balancing unit generation | MW | $\mathbb{R}_+$ | ### Storage (investment and operations) Both charge and discharge power capacity variables exist for **all** storage technologies. | Variable | Description | Units | Domain | | -------------- | ---------------------------------- | ----- | -------------- | | $P^{dis}_j$ | Installed discharge power capacity | MW | $\mathbb{R}_+$ | | $P^{ch}_j$ | Installed charge power capacity | MW | $\mathbb{R}_+$ | | $E_j$ | Installed energy capacity | MWh | $\mathbb{R}_+$ | | $D^{ch}_{jh}$ | Charge power | MW | $\mathbb{R}_+$ | | $D^{dis}_{jh}$ | Discharge power | MW | $\mathbb{R}_+$ | | $S_{jh}$ | State of charge | MWh | $\mathbb{R}_+$ | | $U_{jh}$ | Charge indicator ($1$ = charging) | — | $\{0, 1\}$ | ### Hydro | Variable | Description | Units | Domain | | ----------- | ----------------------------- | ----- | -------------- | | $G^{hyd}_h$ | Dispatchable hydro generation | MW | $\mathbb{R}_+$ | ### Trade | Variable | Description | Units | Domain | | -------- | ----------------------------------------------- | ----- | -------------- | | $M_h$ | Imports | MW | $\mathbb{R}_+$ | | $X_h$ | Exports | MW | $\mathbb{R}_+$ | | $V_h$ | Net-load sign indicator ($1$ if net load $> 0$) | — | $\{0, 1\}$ | --- ## Objective Function $$ \min \; Z \;=\; Z^{pv} + Z^{wind} + Z^{bal} + Z^{stor} + Z^{trade} $$ ### PV cost Annualized CAPEX (including transmission) and FOM. VRE shares a single lifetime $l^{vre}$: $$ Z^{pv} = \sum_{p \in \mathcal{P}} \Bigl[ \bigl(\text{CRF}(l^{vre}) \cdot (\kappa^{pv}_p + \kappa^{tc,pv}_p) + \phi^{pv}_p\bigr) \;\bar{p}^{pv}_p \; F^{pv}_p \Bigr] $$ | Symbol | Type | Description | | ------------------ | --------- | ------------------------------------ | | $\mathcal{P}$ | Set | PV plants | | $p$ | Index | PV plant | | $l^{vre}$ | Parameter | VRE lifetime (yr) | | $\kappa^{pv}_p$ | Parameter | PV CAPEX (\$/MW) | | $\kappa^{tc,pv}_p$ | Parameter | PV transmission capital cost (\$/MW) | | $\phi^{pv}_p$ | Parameter | PV fixed O\&M (\$/MW-yr) | | $\bar{p}^{pv}_p$ | Parameter | Max allowed PV capacity (MW) | | $F^{pv}_p$ | Variable | Fraction of max PV capacity to build | ### Wind cost $$ Z^{wind} = \sum_{w \in \mathcal{W}} \Bigl[ \bigl(\text{CRF}(l^{vre}) \cdot (\kappa^{wind}_w + \kappa^{tc,wind}_w) + \phi^{wind}_w\bigr) \;\bar{p}^{wind}_w \; F^{wind}_w \Bigr] $$ | Symbol | Type | Description | | -------------------- | --------- | -------------------------------------- | | $\mathcal{W}$ | Set | Wind plants | | $w$ | Index | Wind plant | | $l^{vre}$ | Parameter | VRE lifetime (yr) | | $\kappa^{wind}_w$ | Parameter | Wind CAPEX (\$/MW) | | $\kappa^{tc,wind}_w$ | Parameter | Wind transmission capital cost (\$/MW) | | $\phi^{wind}_w$ | Parameter | Wind fixed O\&M (\$/MW-yr) | | $\bar{p}^{wind}_w$ | Parameter | Max allowed wind capacity (MW) | | $F^{wind}_w$ | Variable | Fraction of max wind capacity to build | ### Balancing unit cost Per-unit CRF based on individual lifetimes. Marginal cost includes fuel and VOM: $$ Z^{bal} = \sum_{k \in \mathcal{K}} \Bigl[ \bigl(\text{CRF}(l^{bal}_k) \cdot \kappa^{bal}_k + \phi^{bal}_k\bigr) \; P^{bal}_k \;+\; \sum_{h \in \mathcal{H}} \bigl(\gamma_k + \psi^{bal}_k\bigr) \; G^{bal}_{kh} \Bigr] $$ | Symbol | Type | Description | | ---------------- | --------- | --------------------------------- | | $\mathcal{K}$ | Set | Balancing units (dispatchable) | | $k$ | Index | Balancing unit | | $\mathcal{H}$ | Set | Hours (time steps) | | $h$ | Index | Hour | | $l^{bal}_k$ | Parameter | Balancing unit lifetime (yr) | | $\kappa^{bal}_k$ | Parameter | Balancing unit CAPEX (\$/MW) | | $\phi^{bal}_k$ | Parameter | Balancing fixed O\&M (\$/MW-yr) | | $\gamma_k$ | Parameter | Marginal fuel cost (\$/MWh) | | $\psi^{bal}_k$ | Parameter | Balancing variable O\&M (\$/MWh) | | $P^{bal}_k$ | Variable | Installed balancing capacity (MW) | | $G^{bal}_{kh}$ | Variable | Balancing unit generation (MW) | ### Storage cost The cost ratio $\alpha_j$ distributes power CAPEX and FOM between the charge side (fraction $\alpha_j$) and the discharge side (fraction $1 - \alpha_j$). This applies uniformly to all storage technologies: $$ Z^{stor} = \sum_{j \in \mathcal{J}} \Bigl[ \text{CRF}(l^{stor}_j) \Bigl( \kappa^{P}_j \bigl(\alpha_j \; P^{ch}_j + (1 - \alpha_j) \; P^{dis}_j\bigr) \;+\; \kappa^{E}_j \; E_j \Bigr) \;+\; \phi^{stor}_j \bigl(\alpha_j \; P^{ch}_j + (1 - \alpha_j) \; P^{dis}_j\bigr) \;+\; \sum_{h \in \mathcal{H}} \psi^{stor}_j \; D^{dis}_{jh} \Bigr] $$ > VOM is charged on **discharge only**. | Symbol | Type | Description | | --------------- | --------- | ------------------------------------------------- | | $\mathcal{J}$ | Set | Storage technologies | | $j$ | Index | Storage technology | | $\mathcal{H}$ | Set | Hours (time steps) | | $h$ | Index | Hour | | $l^{stor}_j$ | Parameter | Storage lifetime (yr) | | $\kappa^{P}_j$ | Parameter | CAPEX power (\$/MW) | | $\kappa^{E}_j$ | Parameter | CAPEX energy (\$/MWh) | | $\alpha_j$ | Parameter | Cost ratio: fraction of power cost on charge side | | $\phi^{stor}_j$ | Parameter | Storage fixed O\&M (\$/MW-yr) | | $\psi^{stor}_j$ | Parameter | Storage variable O\&M (\$/MWh) | | $P^{ch}_j$ | Variable | Installed charge power capacity (MW) | | $P^{dis}_j$ | Variable | Installed discharge power capacity (MW) | | $E_j$ | Variable | Installed energy capacity (MWh) | | $D^{dis}_{jh}$ | Variable | Discharge power (MW) | ### Trade cost Import cost minus export revenue: $$ Z^{trade} = \sum_{h \in \mathcal{H}} \bigl( c^{imp}_h \; M_h \;-\; c^{exp}_h \; X_h \bigr) $$ | Symbol | Type | Description | | ------------- | --------- | --------------------------------- | | $\mathcal{H}$ | Set | Hours (time steps) | | $h$ | Index | Hour | | $c^{imp}_h$ | Parameter | Import price at hour $h$ (\$/MWh) | | $c^{exp}_h$ | Parameter | Export price at hour $h$ (\$/MWh) | | $M_h$ | Variable | Imports (MW) | | $X_h$ | Variable | Exports (MW) | --- ## Constraints ### System constraints #### Energy supply balance $$ \forall\, h \in \mathcal{H}: \quad \underbrace{ G^{pv}_h + G^{wind}_h + \sum_{k \in \mathcal{K}} G^{bal}_{kh} + G^{hyd}_h + \alpha^{nuc} \nu_h + \alpha^{oth} \omega_h + \sum_{j \in \mathcal{J}} D^{dis}_{jh} + M_h }_{\text{supply}} \;=\; \underbrace{ d_h + \sum_{j \in \mathcal{J}} D^{ch}_{jh} + X_h }_{\text{demand + charging + exports}} $$ > Curtailment does not appear in the energy balance. It is handled per-technology by the > VRE balance constraints below. #### Carbon-free generation target Total balancing-unit generation plus imports must not exceed $(1 - \tau)$ of adjusted demand (demand plus net storage loading). This ensures that both thermal generation and imported electricity count against the clean-energy target: $$ \sum_{k \in \mathcal{K}} \sum_{h \in \mathcal{H}} G^{bal}_{kh} + \sum_{h \in \mathcal{H}} M_h \;\leq\; (1 - \tau) \sum_{h \in \mathcal{H}} \Bigl( d_h + \sum_{j \in \mathcal{J}} D^{ch}_{jh} - \sum_{j \in \mathcal{J}} D^{dis}_{jh} \Bigr) $$ > **Note:** Imports are treated as non-clean energy in this constraint. If imports are not > modeled (i.e., the Imports formulation is set to "NotModel"), only thermal generation > is constrained. **Symbols used in system constraints:** | Symbol | Type | Description | | -------------- | --------- | --------------------------------------- | | $\mathcal{H}$ | Set | Hours (time steps) | | $\mathcal{K}$ | Set | Balancing units (dispatchable) | | $\mathcal{J}$ | Set | Storage technologies | | $h$ | Index | Hour | | $k$ | Index | Balancing unit | | $j$ | Index | Storage technology | | $d_h$ | Parameter | Electrical demand at hour $h$ (MW) | | $\alpha^{nuc}$ | Parameter | Nuclear activation scalar | | $\alpha^{oth}$ | Parameter | Other renewables activation scalar | | $\nu_h$ | Parameter | Nuclear generation profile (MW) | | $\omega_h$ | Parameter | Other renewable generation profile (MW) | | $\tau$ | Parameter | Minimum clean-energy generation share | | $G^{pv}_h$ | Variable | Aggregate PV generation (MW) | | $G^{wind}_h$ | Variable | Aggregate wind generation (MW) | | $G^{bal}_{kh}$ | Variable | Balancing unit generation (MW) | | $G^{hyd}_h$ | Variable | Dispatchable hydro generation (MW) | | $D^{ch}_{jh}$ | Variable | Charge power (MW) | | $D^{dis}_{jh}$ | Variable | Discharge power (MW) | | $M_h$ | Variable | Imports (MW) | | $X_h$ | Variable | Exports (MW) | ### VRE balance constraints Generation plus curtailment equals total available resource. Per-technology equality: #### PV balance $$ \forall\, h \in \mathcal{H}: \qquad G^{pv}_h + C^{pv}_h \;=\; \sum_{p \in \mathcal{P}} \sigma_{ph} \;\bar{p}^{pv}_p \; F^{pv}_p $$ #### Wind balance $$ \forall\, h \in \mathcal{H}: \qquad G^{wind}_h + C^{wind}_h \;=\; \sum_{w \in \mathcal{W}} \zeta_{wh} \;\bar{p}^{wind}_w \; F^{wind}_w $$ **Symbols used in VRE balance constraints:** | Symbol | Type | Description | | ------------------ | --------- | ----------------------------------------------- | | $\mathcal{H}$ | Set | Hours (time steps) | | $\mathcal{P}$ | Set | PV plants | | $\mathcal{W}$ | Set | Wind plants | | $h$ | Index | Hour | | $p$ | Index | PV plant | | $w$ | Index | Wind plant | | $\sigma_{ph}$ | Parameter | Solar capacity factor for plant $p$ at hour $h$ | | $\bar{p}^{pv}_p$ | Parameter | Max allowed PV capacity (MW) | | $\zeta_{wh}$ | Parameter | Wind capacity factor for plant $w$ at hour $h$ | | $\bar{p}^{wind}_w$ | Parameter | Max allowed wind capacity (MW) | | $G^{pv}_h$ | Variable | Aggregate PV generation (MW) | | $C^{pv}_h$ | Variable | PV curtailment (MW) | | $F^{pv}_p$ | Variable | Fraction of max PV capacity to build | | $G^{wind}_h$ | Variable | Aggregate wind generation (MW) | | $C^{wind}_h$ | Variable | Wind curtailment (MW) | | $F^{wind}_w$ | Variable | Fraction of max wind capacity to build | ### Balancing unit constraints #### Dispatch limit $$ \forall\, k \in \mathcal{K} \;\; \forall\, h \in \mathcal{H}: \qquad G^{bal}_{kh} \;\leq\; P^{bal}_k $$ #### Capacity bounds $$ \forall\, k \in \mathcal{K}: \qquad \underline{p}^{bal}_k \;\leq\; P^{bal}_k \;\leq\; \bar{p}^{bal}_k $$ **Symbols used in balancing unit constraints:** | Symbol | Type | Description | | ----------------------- | --------- | ----------------------------------- | | $\mathcal{K}$ | Set | Balancing units (dispatchable) | | $\mathcal{H}$ | Set | Hours (time steps) | | $k$ | Index | Balancing unit | | $h$ | Index | Hour | | $\underline{p}^{bal}_k$ | Parameter | Min balancing capacity (MW) | | $\bar{p}^{bal}_k$ | Parameter | Max allowed balancing capacity (MW) | | $P^{bal}_k$ | Variable | Installed balancing capacity (MW) | | $G^{bal}_{kh}$ | Variable | Balancing unit generation (MW) | ### Storage constraints #### Coupled power equality For coupled technologies, charge and discharge power capacity must be equal: $$ \forall\, j \in \mathcal{J}^{c}: \qquad P^{ch}_j \;=\; P^{dis}_j $$ #### Power capacity bounds $$ \forall\, j \in \mathcal{J}: \qquad P^{ch}_j \;\leq\; \bar{p}^{stor}_j \;, \quad P^{dis}_j \;\leq\; \bar{p}^{stor}_j $$ #### Charge and discharge hourly limits $$ \forall\, j \in \mathcal{J} \;\; \forall\, h \in \mathcal{H}: \qquad D^{ch}_{jh} \;\leq\; P^{ch}_j \;, \quad D^{dis}_{jh} \;\leq\; P^{dis}_j $$ #### Charge or discharge only A storage unit cannot simultaneously charge and discharge. Enforced with binary indicator $U_{jh}$ using $\bar{p}^{stor}_j$ as a tight big-$\mathcal{M}$: $$ \forall\, j \in \mathcal{J} \;\; \forall\, h \in \mathcal{H}: \qquad D^{ch}_{jh} \;\leq\; \bar{p}^{stor}_j \;\cdot\; U_{jh} $$ $$ \forall\, j \in \mathcal{J} \;\; \forall\, h \in \mathcal{H}: \qquad D^{dis}_{jh} \;\leq\; \bar{p}^{stor}_j \;\cdot\; (1 - U_{jh}) $$ #### State-of-charge balance $$ \forall\, j \in \mathcal{J} \;\; \forall\, h \in \mathcal{H} \setminus \{1\}: \qquad S_{jh} \;=\; S_{j(h-1)} \;+\; \sqrt{\eta_j}\; D^{ch}_{jh} \;-\; \frac{1}{\sqrt{\eta_j}}\; D^{dis}_{jh} $$ Cyclic boundary condition (SOC wraps around): $$ \forall\, j \in \mathcal{J}: \qquad S_{j1} \;=\; S_{j|\mathcal{H}|} \;+\; \sqrt{\eta_j}\; D^{ch}_{j1} \;-\; \frac{1}{\sqrt{\eta_j}}\; D^{dis}_{j1} $$ #### State-of-charge limits $$ \forall\, j \in \mathcal{J} \;\; \forall\, h \in \mathcal{H}: \qquad 0 \;\leq\; S_{jh} \;\leq\; E_j $$ #### Duration limits The energy-to-power ratio must lie within the allowable duration window. Duration is defined relative to discharge power corrected for discharge efficiency: $$ \forall\, j \in \mathcal{J}: \qquad \frac{\underline{\delta}_j \; P^{dis}_j}{\sqrt{\eta_j}} \;\leq\; E_j \;\leq\; \frac{\overline{\delta}_j \; P^{dis}_j}{\sqrt{\eta_j}} $$ #### Cycle limits Total discharge throughput is bounded by the annualized maximum number of full cycles (lifetime cycles divided by lifetime): $$ \forall\, j \in \mathcal{J}: \qquad \sum_{h \in \mathcal{H}} D^{dis}_{jh} \;\leq\; \frac{\kappa^{cyc}_j}{l^{stor}_j} \;\cdot\; E_j $$ **Symbols used in storage constraints:** | Symbol | Type | Description | | ---------------------- | --------- | --------------------------------------- | | $\mathcal{J}$ | Set | Storage technologies | | $\mathcal{J}^{c}$ | Set | Coupled storage technologies | | $\mathcal{H}$ | Set | Hours (time steps) | | $j$ | Index | Storage technology | | $h$ | Index | Hour | | $\bar{p}^{stor}_j$ | Parameter | Max installable power capacity (MW) | | $\eta_j$ | Parameter | Roundtrip efficiency | | $\underline{\delta}_j$ | Parameter | Min duration (hr) | | $\overline{\delta}_j$ | Parameter | Max duration (hr) | | $\kappa^{cyc}_j$ | Parameter | Max lifetime cycles | | $l^{stor}_j$ | Parameter | Storage lifetime (yr) | | $P^{ch}_j$ | Variable | Installed charge power capacity (MW) | | $P^{dis}_j$ | Variable | Installed discharge power capacity (MW) | | $E_j$ | Variable | Installed energy capacity (MWh) | | $D^{ch}_{jh}$ | Variable | Charge power (MW) | | $D^{dis}_{jh}$ | Variable | Discharge power (MW) | | $S_{jh}$ | Variable | State of charge (MWh) | | $U_{jh}$ | Variable | Charge indicator ($1$ = charging) | ### Hydro budget constraints #### Hourly bounds $$ \forall\, h \in \mathcal{H}: \qquad \alpha^{hyd} \; \underline{g}^{hyd}_h \;\leq\; G^{hyd}_h \;\leq\; \alpha^{hyd} \; \overline{g}^{hyd}_h $$ #### Energy budget (equality) Total dispatchable hydro generation within each budget period must **equal** the available energy budget: $$ \forall\, b \in \mathcal{B}: \qquad \sum_{h \in \mathcal{H}_b} G^{hyd}_h \;=\; \epsilon_b $$ **Symbols used in hydro budget constraints:** | Symbol | Type | Description | | ----------------------- | --------- | ------------------------------------ | | $\mathcal{H}$ | Set | Hours (time steps) | | $\mathcal{B}$ | Set | Hydro budget periods | | $\mathcal{H}_b$ | Set | Hours belonging to budget period $b$ | | $h$ | Index | Hour | | $b$ | Index | Budget period | | $\alpha^{hyd}$ | Parameter | Hydro activation scalar | | $\underline{g}^{hyd}_h$ | Parameter | Hourly hydro lower bound (MW) | | $\overline{g}^{hyd}_h$ | Parameter | Hourly hydro upper bound (MW) | | $\epsilon_b$ | Parameter | Energy budget for period $b$ (MWh) | | $G^{hyd}_h$ | Variable | Dispatchable hydro generation (MW) | ### Import and export constraints #### Capacity limits $$ \forall\, h \in \mathcal{H}: \qquad M_h \;\leq\; \bar{\iota}_h \;, \quad X_h \;\leq\; \bar{\xi}_h $$ #### Net-load indicator Define the **net load** as demand minus all VRE availability, fixed clean generation, and dispatchable hydro: $$ \Lambda_h \;=\; d_h - (G^{pv}_h + C^{pv}_h) - (G^{wind}_h + C^{wind}_h) - \alpha^{nuc} \nu_h - \alpha^{oth} \omega_h - G^{hyd}_h $$ A binary indicator $V_h$ encodes whether the system is a net importer ($\Lambda_h > 0$) or net exporter ($\Lambda_h \leq 0$). An $\varepsilon$ offset prevents numerical degeneracy at $\Lambda_h = 0$: $$ \forall\, h \in \mathcal{H}: \qquad \Lambda_h \;\leq\; \mathcal{M} \;\cdot\; V_h $$ $$ \forall\, h \in \mathcal{H}: \qquad -\Lambda_h + \varepsilon \;\leq\; \mathcal{M} \;\cdot\; (1 - V_h) $$ #### Import allowed only when net load is positive $$ \forall\, h \in \mathcal{H}: \qquad M_h \;\leq\; d_h \;\cdot\; V_h $$ #### Export allowed only when net load is negative $$ \forall\, h \in \mathcal{H}: \qquad X_h \;\leq\; \Bigl(\max_{h' \in \mathcal{H}} \bar{\xi}_{h'}\Bigr) \;\cdot\; (1 - V_h) $$ **Symbols used in import and export constraints:** | Symbol | Type | Description | | --------------- | --------- | ----------------------------------------------- | | $\mathcal{H}$ | Set | Hours (time steps) | | $h$ | Index | Hour | | $d_h$ | Parameter | Electrical demand at hour $h$ (MW) | | $\bar{\iota}_h$ | Parameter | Max import capacity at hour $h$ (MW) | | $\bar{\xi}_h$ | Parameter | Max export capacity at hour $h$ (MW) | | $\alpha^{nuc}$ | Parameter | Nuclear activation scalar | | $\alpha^{oth}$ | Parameter | Other renewables activation scalar | | $\nu_h$ | Parameter | Nuclear generation profile (MW) | | $\omega_h$ | Parameter | Other renewable generation profile (MW) | | $\mathcal{M}$ | Parameter | Big-M constant | | $\varepsilon$ | Parameter | Small offset to prevent numerical degeneracy | | $\Lambda_h$ | Derived | Net load at hour $h$ (MW) | | $G^{pv}_h$ | Variable | Aggregate PV generation (MW) | | $C^{pv}_h$ | Variable | PV curtailment (MW) | | $G^{wind}_h$ | Variable | Aggregate wind generation (MW) | | $C^{wind}_h$ | Variable | Wind curtailment (MW) | | $G^{hyd}_h$ | Variable | Dispatchable hydro generation (MW) | | $M_h$ | Variable | Imports (MW) | | $X_h$ | Variable | Exports (MW) | | $V_h$ | Variable | Net-load sign indicator ($1$ if net load $> 0$) |