Including budget limits for HydroDispatch
- `HydroDispatch: can include budget limits if the
HydroDispatchRunOfRiverBudgetformulation is used. By adding ahydro_budgettimeseries with values between 0 and 1, normalized by theget_active_power_limits(hydro).max, a single constraint is imposed as the budget during the simulation horizon:
\[\begin{align*} \sum_{t=1}^T p^\text{hy}_t \le \sum_{t=1}^T \text{EnergyBudgetTimeSeriesParameter}_t \end{align*}\]
Setting an interval budget for HydroDispatchRunOfRiverBudget
The attribute hydro_budget_interval can be used to set-up a budget constraint with smaller interval than the full horizon of the simulation. For example if a problem has an horizon of Hour(48), with an hourly resolution, the attribute hydro_budget_interval = Hour(24) can be used to also impose a budget constraint in the first 24 hours (in addition of the full 48 hours constraint):
hydro_model = DeviceModel(
HydroDispatch,
HydroDispatchRunOfRiverBudget;
attributes = Dict{String, Any}(
"hydro_budget_interval" => Hour(24),
),
)
set_device_model!(template, hydro_model)If no attribute is passed, only the horizon constraint is imposed.
Including budget limits for HydroReservoir
HydroEnergyModelReservoir: The budget limits are enabled in theDeviceModelby setting thehydro_budgetkey totruein theattributesDict. For example:
reservoir_model = DeviceModel(
HydroReservoir,
HydroEnergyModelReservoir;
attributes = Dict{String, Any}(
"energy_target" => false,
"hydro_budget" => true,
),
)
set_device_model!(template, reservoir_model)Setting a budget for HydroEnergyModelReservoir
- If the
hydro_budgetattribute is enabled for theHydroEnergyModelReservoir, theEnergyBudgetConstraintwill be added to limit the sum of active power budget to be less than or equal to the sum of the energy budgetEnergyBudgetTimeSeriesParameterfor all time steps. See the article on format data for more details.
\[\begin{align*} \sum_{t=1}^T p^\text{hy}_t \le \sum_{t=1}^T \text{EnergyBudgetTimeSeriesParameter}_t \end{align*}\]
Including storage target for HydroReservoir
HydroEnergyModelReservoir: The storage targets are enabled in theDeviceModelby setting theenergy_targetkey totruein theattributesDict. For example:
reservoir_model = DeviceModel(
HydroReservoir,
HydroEnergyModelReservoir;
attributes = Dict{String, Any}(
"energy_target" => true,
"hydro_budget" => false,
),
)
set_device_model!(template, reservoir_model)Setting a target for HydroEnergyModelReservoir
- If the
energy_targetattribute is enabled for theHydroEnergyModelReservoir, theEnergyTargetConstraintwill be addedEnergyTargetTimeSeriesParameterat every timestep. See the article on format data for more details.
\[\begin{align*} \text{energy}_T + \text{shortage}_T + \text{surplus}_T = \text{EnergyTargetTimeSeriesParameter}_T, \end{align*}\]