Public API Reference

   

Device Formulations

Device formulations for hybrid systems (single PCC with renewable, thermal, and storage). Use with PowerSimulations.DeviceModel for unit commitment or economic dispatch.

HybridSystemsSimulations.HybridDispatchWithReservesType
HybridDispatchWithReserves

Device formulation for a hybrid system (single point of common coupling (PCC) with renewable, thermal, and storage) that participates in both energy and ancillary services markets. Implements the centralized production cost modeling (PCM) model where the hybrid plant's net power at the PCC is constrained by $P_{\max,\text{pcc}}$ and ancillary service allocations ($sb^{\text{out}}_{p,t}$, $sb^{\text{in}}_{p,t}$) are assigned to internal assets (thermal, renewable, charge, discharge) per the four-quadrant ancillary service model.

Use with a hybrid system in a PowerSimulations.DeviceModel for unit commitment or economic dispatch.

Variables:

Time Series Parameters:

ParameterDefault Time Series Name
RenewablePowerTimeSeries"RenewableDispatch__max_active_power"
ElectricLoadTimeSeries"PowerLoad__max_active_power"

Data requirements:

  • Device: A PowerSystems.HybridSystem with at least one of: thermal unit (PowerSystems.get_thermal_unit), renewable unit (PowerSystems.get_renewable_unit), storage (PowerSystems.get_storage), and optionally electric load (PowerSystems.get_electric_load).
  • Time series: Each hybrid must have forecast time series attached with the default names above (or custom names passed when adding parameters).

Static Parameters:

  • $P_{\max,\text{pcc}}$ = PowerSystems.get_output_active_power_limits(device).max
  • $P_{\max,\text{th}}$ = PowerSystems.get_active_power_limits(thermal_unit).max
  • $P_{\min,\text{th}}$ = PowerSystems.get_active_power_limits(thermal_unit).min
  • $P_{\max,\text{ch}}$ = PowerSystems.get_input_active_power_limits(storage).max
  • $P_{\max,\text{ds}}$ = PowerSystems.get_output_active_power_limits(storage).max
  • $\eta_{\text{ch}}$ = PowerSystems.get_efficiency(storage).in
  • $\eta_{\text{ds}}$ = PowerSystems.get_efficiency(storage).out
  • $E_{\max,\text{st}}$ = PowerSystems.get_storage_level_limits(storage).max × capacity
  • $E^{\text{st}}_0$ = initial storage energy
  • $R^{*}_{p,t}$ = ancillary service deployment forecast for service $p$ at time $t$
  • $F_p$ = fraction of $P_{\max,\text{pcc}}$ allowed for service $p$
  • $N_p$ = number of periods of compliance for service $p$

Expressions:

Adds $p^{\text{out}}_t$ and $p^{\text{in}}_t$ to PowerSimulations' ActivePowerBalance expression for use in network balance constraints. When services are present, adds reserve expressions (TotalReserveOutUpExpression, TotalReserveOutDownExpression, TotalReserveInUpExpression, TotalReserveInDownExpression) and served reserve expressions for tracking deployed reserves.

Constraints:

Let $\mathcal{T} = \{1, \dots, T\}$ denote the set of time steps.

PCC and status (PowerSimulations.InputActivePowerVariableLimitsConstraint, PowerSimulations.OutputActivePowerVariableLimitsConstraint, StatusOutOn, StatusInOn):

\[\begin{align*} & 0 \leq p^{\text{in}}_t \leq P_{\max,\text{pcc}}, \quad 0 \leq p^{\text{out}}_t \leq P_{\max,\text{pcc}}, \quad \forall t \in \mathcal{T} \\ & u^{\text{st}}_t \in \{0,1\} \quad \text{(output/input status at PCC)} \end{align*}\]

Energy asset balance (EnergyAssetBalance):

\[p^{\text{th}}_t + p^{\text{re}}_t + p^{\text{ds}}_t - p^{\text{ch}}_t - P^{\text{ld}}_t = p^{\text{out}}_t - p^{\text{in}}_t, \quad \forall t \in \mathcal{T}\]

Thermal limits (ThermalOnVariableUb, ThermalOnVariableLb):

\[u^{\text{th}}_t P_{\min,\text{th}} \leq p^{\text{th}}_t \leq u^{\text{th}}_t P_{\max,\text{th}}, \quad u^{\text{th}}_t \in \{0,1\}, \quad \forall t \in \mathcal{T}\]

Renewable limit (RenewableActivePowerLimitConstraint):

\[0 \leq p^{\text{re}}_t \leq P^{*,\text{re}}_t, \quad \forall t \in \mathcal{T}\]

Storage charge/discharge status (BatteryStatusChargeOn, BatteryStatusDischargeOn):

\[\begin{align*} & p^{\text{ch}}_t \leq (1 - ss^{\text{st}}_t) P_{\max,\text{ch}}, \quad p^{\text{ds}}_t \leq ss^{\text{st}}_t P_{\max,\text{ds}}, \quad \forall t \in \mathcal{T} \\ & ss^{\text{st}}_t \in \{0,1\} \quad \text{(0 = charge, 1 = discharge)} \end{align*}\]

Storage energy balance (BatteryBalance):

\[e^{\text{st}}_t = e^{\text{st}}_{t-1} + \Delta t \left( \eta_{\text{ch}} p^{\text{ch}}_t - \frac{p^{\text{ds}}_t}{\eta_{\text{ds}}} \right), \quad \forall t \in \mathcal{T}, \quad e^{\text{st}}_0 = E^{\text{st}}_0\]

When ancillary services are present: ThermalReserveLimit, RenewableReserveLimit, ChargingReservePowerLimit, DischargingReservePowerLimit, ReserveCoverageConstraint, ReserveCoverageConstraintEndOfPeriod, HybridReserveAssignmentConstraint, ReserveBalance.

Cycling limits (if "cycling" => true), (CyclingCharge, CyclingDischarge):

\[\begin{align*} & \eta_{\text{ch}} \Delta t \sum_{t \in \mathcal{T}} p^{\text{ch}}_t \leq C_{\text{st}} E_{\max,\text{st}} \\ & \frac{\Delta t}{\eta_{\text{ds}}} \sum_{t \in \mathcal{T}} p^{\text{ds}}_t \leq C_{\text{st}} E_{\max,\text{st}} \end{align*}\]

End-of-horizon energy target (if "energy_target" => true), (StateofChargeTargetConstraint):

\[e^{\text{st}}_T = E^{\text{st}}_T\]

Regularization (if "regularization" => true): ChargeRegularizationConstraint, DischargeRegularizationConstraint.

Objective:

Adds cost terms for thermal generation (variable and fixed costs), storage variable O&M, renewable variable cost, and penalties for energy target deviations (if enabled).

source
HybridSystemsSimulations.HybridEnergyOnlyDispatchType
HybridEnergyOnlyDispatch

Device formulation for a hybrid system that participates in energy only (no ancillary services). Net power at the point of common coupling (PCC) is $p^{\text{out}}_t - p^{\text{in}}_t$ from thermal, renewable, discharge, minus charge and load; subject to $P_{\max,\text{pcc}}$ and asset limits.

Variables:

  • PowerSimulations.ActivePowerOutVariable:

    • Bounds: [0.0, $P_{\max,\text{pcc}}$]
    • Symbol: $p^{\text{out}}_t$
  • PowerSimulations.ActivePowerInVariable:

    • Bounds: [0.0, $P_{\max,\text{pcc}}$]
    • Symbol: $p^{\text{in}}_t$
  • PowerSimulations.ReservationVariable:

    • Bounds: {0, 1}
    • Symbol: $u^{\text{st}}_t$
  • ThermalPower:

    • Bounds: [0.0, $P_{\max,\text{th}}$] when on
    • Symbol: $p^{\text{th}}_t$
  • PowerSimulations.OnVariable:

    • Bounds: {0, 1}
    • Symbol: $u^{\text{th}}_t$
  • RenewablePower:

    • Bounds: [0.0, $P^{*,\text{re}}_t$]
    • Symbol: $p^{\text{re}}_t$
  • BatteryCharge:

    • Bounds: [0.0, $P_{\max,\text{ch}}$] when charging
    • Symbol: $p^{\text{ch}}_t$
  • BatteryDischarge:

    • Bounds: [0.0, $P_{\max,\text{ds}}$] when discharging
    • Symbol: $p^{\text{ds}}_t$
  • PowerSimulations.EnergyVariable:

    • Bounds: [0.0, $E_{\max,\text{st}}$]
    • Symbol: $e^{\text{st}}_t$
  • BatteryStatus:

    • Bounds: {0, 1}
    • Symbol: $ss^{\text{st}}_t$ (0 = charge, 1 = discharge)

Time Series Parameters:

ParameterDefault Time Series Name
RenewablePowerTimeSeries"RenewableDispatch__max_active_power"
ElectricLoadTimeSeries"PowerLoad__max_active_power"

Data requirements:

  • Device: A PowerSystems.HybridSystem with at least one of: thermal unit (PowerSystems.get_thermal_unit), renewable unit (PowerSystems.get_renewable_unit), storage (PowerSystems.get_storage), and optionally electric load (PowerSystems.get_electric_load).
  • Time series: Each hybrid must have forecast time series attached with the default names above (or custom names passed when adding parameters).

Static Parameters:

  • $P_{\max,\text{pcc}}$ = PowerSystems.get_output_active_power_limits(device).max
  • $P_{\max,\text{th}}$ = PowerSystems.get_active_power_limits(thermal_unit).max
  • $P_{\min,\text{th}}$ = PowerSystems.get_active_power_limits(thermal_unit).min
  • $P_{\max,\text{ch}}$ = PowerSystems.get_input_active_power_limits(storage).max
  • $P_{\max,\text{ds}}$ = PowerSystems.get_output_active_power_limits(storage).max
  • $\eta_{\text{ch}}$ = PowerSystems.get_efficiency(storage).in
  • $\eta_{\text{ds}}$ = PowerSystems.get_efficiency(storage).out
  • $E_{\max,\text{st}}$ = PowerSystems.get_storage_level_limits(storage).max × capacity
  • $E^{\text{st}}_0$ = initial storage energy

Expressions:

Adds $p^{\text{out}}_t$ and $p^{\text{in}}_t$ to PowerSimulations' ActivePowerBalance expression for use in network balance constraints.

Constraints:

Let $\mathcal{T} = \{1, \dots, T\}$ denote the set of time steps.

PCC and status (PowerSimulations.InputActivePowerVariableLimitsConstraint, PowerSimulations.OutputActivePowerVariableLimitsConstraint, StatusOutOn, StatusInOn):

\[\begin{align*} & 0 \leq p^{\text{in}}_t \leq P_{\max,\text{pcc}}, \quad 0 \leq p^{\text{out}}_t \leq P_{\max,\text{pcc}}, \quad \forall t \in \mathcal{T} \\ & u^{\text{st}}_t \in \{0,1\} \quad \text{(output/input status at PCC)} \end{align*}\]

Energy asset balance (EnergyAssetBalance):

\[p^{\text{th}}_t + p^{\text{re}}_t + p^{\text{ds}}_t - p^{\text{ch}}_t - P^{\text{ld}}_t = p^{\text{out}}_t - p^{\text{in}}_t, \quad \forall t \in \mathcal{T}\]

Thermal limits (ThermalOnVariableUb, ThermalOnVariableLb):

\[u^{\text{th}}_t P_{\min,\text{th}} \leq p^{\text{th}}_t \leq u^{\text{th}}_t P_{\max,\text{th}}, \quad u^{\text{th}}_t \in \{0,1\}, \quad \forall t \in \mathcal{T}\]

Renewable limit (RenewableActivePowerLimitConstraint):

\[0 \leq p^{\text{re}}_t \leq P^{*,\text{re}}_t, \quad \forall t \in \mathcal{T}\]

Storage charge/discharge status (BatteryStatusChargeOn, BatteryStatusDischargeOn):

\[\begin{align*} & p^{\text{ch}}_t \leq (1 - ss^{\text{st}}_t) P_{\max,\text{ch}}, \quad p^{\text{ds}}_t \leq ss^{\text{st}}_t P_{\max,\text{ds}}, \quad \forall t \in \mathcal{T} \\ & ss^{\text{st}}_t \in \{0,1\} \quad \text{(0 = charge, 1 = discharge)} \end{align*}\]

Storage energy balance (BatteryBalance):

\[e^{\text{st}}_t = e^{\text{st}}_{t-1} + \Delta t \left( \eta_{\text{ch}} p^{\text{ch}}_t - \frac{p^{\text{ds}}_t}{\eta_{\text{ds}}} \right), \quad \forall t \in \mathcal{T}, \quad e^{\text{st}}_0 = E^{\text{st}}_0\]

Cycling limits (if "cycling" => true), (CyclingCharge, CyclingDischarge):

\[\begin{align*} & \eta_{\text{ch}} \Delta t \sum_{t \in \mathcal{T}} p^{\text{ch}}_t \leq C_{\text{st}} E_{\max,\text{st}} \\ & \frac{\Delta t}{\eta_{\text{ds}}} \sum_{t \in \mathcal{T}} p^{\text{ds}}_t \leq C_{\text{st}} E_{\max,\text{st}} \end{align*}\]

End-of-horizon energy target (if "energy_target" => true), (StateofChargeTargetConstraint):

\[e^{\text{st}}_T = E^{\text{st}}_T\]

Regularization (if "regularization" => true): ChargeRegularizationConstraint, DischargeRegularizationConstraint.

Objective:

Adds cost terms for thermal generation (variable and fixed costs), storage variable O&M, renewable variable cost, and penalties for energy target deviations (if enabled).

source
HybridSystemsSimulations.HybridFixedDAType
HybridFixedDA

Device formulation for a hybrid system with day-ahead (DA) energy bids/offers fixed; used in multi-step simulations when the real-time (RT) subproblem is solved with locked DA positions (e.g. merchant co-optimization with "then vs. now" RT adjustment).

Variables:

Data requirements:

Expressions:

Adds $p^{\text{out}}_t$ and $p^{\text{in}}_t$ to PowerSimulations' ActivePowerBalance expression for use in network balance constraints.

Constraints:

PCC power limits (PowerSimulations.InputActivePowerVariableLimitsConstraint, PowerSimulations.OutputActivePowerVariableLimitsConstraint):

\[0 \leq p^{\text{in}}_t \leq P_{\max,\text{pcc}}, \quad 0 \leq p^{\text{out}}_t \leq P_{\max,\text{pcc}}, \quad \forall t \in \mathcal{T}\]

When ancillary services are present: HybridReserveAssignmentConstraint links component reserves to total reserve at the PCC.

source
   

Decision Models

Decision problem types for merchant hybrid participation in day-ahead and real-time markets.

HybridSystemsSimulations.MerchantHybridEnergyCaseType
MerchantHybridEnergyCase

Decision problem for a merchant hybrid resource that co-optimizes energy bids/offers in day-ahead and real-time markets only (no ancillary services). The hybrid optimizer maximizes profit from energy (e.g. DA/RT spread) subject to internal asset limits.

Data requirements:

Horizons, resolutions, and DA↔RT step alignment come from model settings plus series metadata (not from System/Hybrid ext DataFrames or "λ_*" keys).

source
HybridSystemsSimulations.MerchantHybridCooptimizerCaseType
MerchantHybridCooptimizerCase

Decision problem for a merchant hybrid that co-optimizes energy and ancillary services in day-ahead and real-time markets. Maximizes $d'y - c_h' x$ (revenue from bids/offers minus operating cost) subject to market and asset constraints; ancillary services are committed in DA and fulfilled by internal asset allocation in RT.

Data requirements:

source
HybridSystemsSimulations.MerchantHybridBilevelCaseType
MerchantHybridBilevelCase

Decision problem implementing a bilevel formulation for the merchant hybrid (e.g. upper level: bids/offers, lower level: internal dispatch); used for equilibrium or regulatory analysis.

Data requirements:

source
   

Variables

Energy Bids

Day-ahead and real-time energy bid/offer variables at the PCC.

HybridSystemsSimulations.EnergyDABidOutType
EnergyDABidOut

Variable type for day-ahead energy offer (generating power) at the point of common coupling (PCC).

Docs abbreviation: $e^{\text{out}}_{\text{DA},t} \in [0, P_{\max,\text{pcc}}]$ [MW].

source
HybridSystemsSimulations.EnergyDABidInType
EnergyDABidIn

Variable type for day-ahead energy bid (consuming power) at the point of common coupling (PCC).

Docs abbreviation: $e^{\text{in}}_{\text{DA},t} \in [0, P_{\max,\text{pcc}}]$ [MW].

source
HybridSystemsSimulations.EnergyRTBidOutType
EnergyRTBidOut

Variable type for real-time energy offer at the point of common coupling (PCC).

Docs abbreviation: $e^{\text{out}}_{\text{RT},t}$. Net RT position with DA locked is used in the merchant profit expression (e.g. DART spread).

source

Ancillary Service Bids

Day-ahead ancillary service bid/offer variables at the PCC.

HybridSystemsSimulations.BidReserveVariableOutType
BidReserveVariableOut

Variable type for day-ahead ancillary service offer (generation direction) for the hybrid at the point of common coupling (PCC).

Docs abbreviation: $sb^{\text{out}}_{p,t} \in [0, F_p P_{\max,\text{pcc}}]$ for product $p$.

source
HybridSystemsSimulations.BidReserveVariableInType
BidReserveVariableIn

Variable type for day-ahead ancillary service bid (consumption direction) for the hybrid at the point of common coupling (PCC).

Docs abbreviation: $sb^{\text{in}}_{p,t} \in [0, F_p P_{\max,\text{pcc}}]$ for product $p$.

source

Reserve Variables

Reserve quantities allocated to the hybrid's internal assets and total reserve.

HybridSystemsSimulations.ReserveVariableOutType
ReserveVariableOut

Variable type for ancillary service reserve quantity in the "out" (generation) direction allocated to the hybrid's internal assets ($sb^{\text{th}}$, $sb^{\text{re}}$, $sb^{\text{ds}}$, $sb^{\text{ch}}$).

source
HybridSystemsSimulations.TotalReserveType
TotalReserve

Auxiliary variable type for the total reserve quantity (sum of component reserves) at the point of common coupling (PCC). Used in reserve balance constraints; not written to results by default.

source
   

Feedforwards

Feedforwards for hybrid storage cycle limits in recurrent simulations.

HybridSystemsSimulations.CyclingChargeLimitFeedforwardType
CyclingChargeLimitFeedforward

Feedforward that enforces a cumulative charging cycle limit on the hybrid's storage over the simulation. The constraint is $\eta_{\text{ch}} \Delta t \sum_t (p_{\text{ch},t} + s^{\text{down}}_{\text{reg},t} - s^{\text{up}}_{\text{reg},t}) \leq \text{limit}$, where $s^{\text{up}}_{\text{reg},t}$ and $s^{\text{down}}_{\text{reg},t}$ denote served reserve (up/down). The limit is from CyclingChargeLimitParameter in recurrent solves or $C_{\text{horizon}} \times E_{\max,\text{st}}$ otherwise. Use with PowerSimulations' add_feedforward! in a PowerSimulations.DeviceModel for HybridDispatchWithReserves or HybridEnergyOnlyDispatch.

Input data:

  • Storage limits: Limit supplied by CyclingChargeLimitParameter, which is derived from the hybrid's storage using PowerSystems.get_cycle_limits and PowerSystems.get_storage_level_limits.
  • Not compatible with the device attribute "cycling" => true (cycling limits are then enforced in the formulation).
source
HybridSystemsSimulations.CyclingDischargeLimitFeedforwardType
CyclingDischargeLimitFeedforward

Feedforward that enforces a cumulative discharging cycle limit on the hybrid's storage: $(1/\eta_{\text{ds}}) \Delta t \sum_t (p_{\text{ds},t} + s^{\text{up}}_{\text{reg},t} - s^{\text{down}}_{\text{reg},t}) \leq \text{limit}$, where $s^{\text{up}}_{\text{reg},t}$ and $s^{\text{down}}_{\text{reg},t}$ denote served reserve (up/down). The limit comes from CyclingDischargeLimitParameter in recurrent runs. See CyclingChargeLimitFeedforward for usage pattern.

Input data:

source
   

Constraints

Dual Optimality Conditions

KKT stationarity constraints for the merchant (lower-level) model; used in bilevel/MPEC formulations.

HybridSystemsSimulations.OptConditionThermalPowerType
OptConditionThermalPower

Constraint enforcing Karush-Kuhn-Tucker (KKT) stationarity for thermal power in the merchant (lower-level) model: links dual of thermal limits ($\mu^{\text{ThUb}}$, $\mu^{\text{ThLb}}$) to the thermal power variable. Used in bilevel/mathematical program with equilibrium constraints (MPEC) formulations.

source
HybridSystemsSimulations.OptConditionRenewablePowerType
OptConditionRenewablePower

Constraint enforcing Karush-Kuhn-Tucker (KKT) stationarity for renewable power ($p_{\text{re},t}$) in the merchant model; ties duals of renewable limit ($\mu^{\text{ReUb}}$, $\mu^{\text{ReLb}}$) to the renewable power variable.

source
HybridSystemsSimulations.OptConditionBatteryChargeType
OptConditionBatteryCharge

Constraint enforcing Karush-Kuhn-Tucker (KKT) stationarity for storage charging ($p_{\text{ch},t}$) in the merchant model; involves duals $\mu^{\text{ChUb}}$, $\mu^{\text{ChLb}}$ and charge limits.

source

Complementary Slackness

Complementary slackness constraints for MPEC/bilevel reformulation. Each upper-bound (Ub) constraint has a corresponding lower-bound (Lb) variant.

Strong Duality

HybridSystemsSimulations.StrongDualityCutType
StrongDualityCut

Constraint that enforces strong duality for the merchant (lower-level) problem in a bilevel formulation: objective value equals dual objective (or equivalent cut), so that the lower level is replaced by its Karush-Kuhn-Tucker (KKT) conditions.

source
   

Parameters

Objective Function Parameters

Price parameters used in the merchant objective (DA/RT energy and ancillary services).

HybridSystemsSimulations.DayAheadEnergyPriceType
DayAheadEnergyPrice

Objective function parameter for day-ahead energy price.

Docs abbreviation: $\Pi^*_{\text{DA},t}$ (USD/MWh). Used in the merchant objective (e.g. $f_{\text{DA},t}$ term) when building the decision model.

Input data:

  • Hybrid-attached time series: Each PowerSystems.HybridSystem must have a bus-selected scalar day-ahead energy price series whose name is given by hybrid_energy_price_time_series_name(<day_ahead_key>) (default key "DA"), stored as InfrastructureSystems.SingleTimeSeries / deterministic forecast. Values are taken over the model horizon from forecast timestamps starting at the problem initial time.
source
HybridSystemsSimulations.RealTimeEnergyPriceType
RealTimeEnergyPrice

Objective function parameter for real-time energy price.

Docs abbreviation: $\Pi^*_{\text{RT},t}$ (USD/MWh). Used in the merchant profit expression for RT energy and DART spread.

Input data:

  • Hybrid-attached time series: Real-time energy price uses hybrid_energy_price_time_series_name(<real_time_key>) (default key "RT"). Day-ahead ↔ real-time alignment for spread terms uses variable axis sizes and an internal index map derived from model horizons, not hybrid ext.
source
HybridSystemsSimulations.AncillaryServicePriceType
AncillaryServicePrice

Objective function parameter for ancillary service price.

Docs abbreviation: $\Pi^*_{p,t}$ (USD/MWh) for service $p \in P$. Used in the DA profit term for ancillary services ($sb^{\text{out}}$ + $sb^{\text{in}}$).

Input data:

  • Hybrid-attached time series: For each attached ancillary product, a scalar series named per hybrid_ancillary_service_price_time_series_name(<service_name>, <day_ahead_key>). Used by MerchantHybridCooptimizerCase when services are attached to the hybrid.
source

Variable Value Parameters

Parameters for storage cycle limits (used with feedforwards in recurrent runs).

HybridSystemsSimulations.CyclingChargeLimitParameterType
CyclingChargeLimitParameter

Variable-value parameter that provides the right-hand side for the storage charging cycle limit: $\eta_{\text{ch}} \Delta t \sum_t p_{\text{ch},t} - c_{\text{ch}}^- \leq C_{\text{st}} E_{\max,\text{st}}$. Used with CyclingChargeLimitFeedforward in recurrent simulations to pass cumulative cycling from previous horizons.

Input data:

  • Storage limits: Initial values (when not updated from state) are computed from the hybrid's storage using PowerSystems.get_cycle_limits and PowerSystems.get_storage_level_limits.
  • State updates: In recurrent runs, values are updated from the simulation state (cumulative charge usage).
source
HybridSystemsSimulations.CyclingDischargeLimitParameterType
CyclingDischargeLimitParameter

Variable-value parameter for the storage discharging cycle limit: $(\Delta t/\eta_{\text{ds}}) \sum_t p_{\text{ds},t} - c_{\text{ds}}^- \leq C_{\text{st}} E_{\max,\text{st}}$. Used with CyclingDischargeLimitFeedforward.

Input data:

  • Same as CyclingChargeLimitParameter: initial values based on PowerSystems.get_cycle_limits and PowerSystems.get_storage_level_limits for the hybrid's storage; in recurrent runs, updated from state (cumulative discharge usage).
source