Constraints

NEMStorageUnderUncertainty._add_constraint_binding_throughput_limit!Method
_add_constraint_binding_throughput_limit!(
    model::JuMP.Model,
    binding_end::Dates.DateTime,
    d_binding_max::Float64
) -> JuMP.ConstraintRef{JuMP.Model}

Summary

Adds a throughput limit constraint that applies to the final binding time period in a simulation.

Adds the following constraint to model:

$d_{t_{binding, end}} ≤ d_{binding_{max}}$

where $d_{binding_{max}}$ is supplied

Arguments

  • model: JuMP model
  • binding_end: End of the binding period, DateTime
  • d_binding_max: Throughput limit in MWh, applicable at the end of the binding period

Methods

_add_constraint_binding_throughput_limit!(
    model,
    binding_end,
    d_binding_max
)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/constraints.jl:214.

source
NEMStorageUnderUncertainty._add_constraint_initial_soc!Method
_add_constraint_initial_soc!(
    model::JuMP.Model,
    storage::NEMStorageUnderUncertainty.StorageDevice,
    times::Vector{Dates.DateTime},
    τ::Float64
) -> JuMP.ConstraintRef{JuMP.Model}

Summary

Initial state of charge constraint that uses soc₀ from storage.

Adds the following constraint to model:

$e_1 - e_0 - \left( q_1\eta_{charge}\tau\right)+\frac{p_1\tau}{\eta_{discharge}} = 0$

where $e_0$ and $\eta$ are obtained from storage.

Arguments

  • model: JuMP model
  • storage: A StorageDevice
  • times: A Vector of DateTimes
  • tau: Interval length in hours

Methods

_add_constraint_initial_soc!(model, storage, times, τ)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/constraints.jl:51.

source
NEMStorageUnderUncertainty._add_constraint_initial_throughput!Method
_add_constraint_initial_throughput!(
    model::JuMP.Model,
    storage::NEMStorageUnderUncertainty.StorageDevice,
    times::Vector{Dates.DateTime},
    τ::Float64
) -> JuMP.ConstraintRef{JuMP.Model}

Summary

Initial throughput constraint that uses throughput₀ from storage.

Adds the following constraint to model:

$d_1 - d_0 - p_1\tau = 0$

where $d_0$ is obtained from storage.

Arguments

  • model: JuMP model
  • storage: A StorageDevice
  • times: A Vector of DateTimes
  • tau: Interval length in hours

Methods

_add_constraint_initial_throughput!(
    model,
    storage,
    times,
    τ
)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/constraints.jl:127.

source
NEMStorageUnderUncertainty._add_constraint_intertemporal_soc!Method
_add_constraint_intertemporal_soc!(
    model::JuMP.Model,
    storage::NEMStorageUnderUncertainty.StorageDevice,
    times::Vector{Dates.DateTime},
    τ::Float64
) -> JuMP.Containers.DenseAxisArray

Summary

Intertemporal state of charge constraints that describe state of charge evolution.

Adds the following constraint to model if times has length ≥ 2:

$e_t-e_{t-1}- \left( q_t\eta_{charge}\tau\right)+\frac{p_t\tau}{\eta_{discharge}} = 0$

$\eta$ are obtained from storage.

Arguments

  • model: JuMP model
  • storage: A StorageDevice
  • times: A Vector of DateTimes
  • tau: Interval length in hours

Methods

_add_constraint_intertemporal_soc!(model, storage, times, τ)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/constraints.jl:86.

source
NEMStorageUnderUncertainty._add_constraint_intertemporal_throughput!Method
_add_constraint_intertemporal_throughput!(
    model::JuMP.Model,
    times::Vector{Dates.DateTime},
    τ::Float64
) -> JuMP.Containers.DenseAxisArray

Summary

Intertemporal throughput constraints that track throughput. See _add_variable_throughput!.

Adds the following constraint to model if times has length ≥ 2:

$d_t-d_{t-1} - p_t\tau = 0$

Arguments

  • model: JuMP model
  • times: A Vector of DateTimes
  • tau: Interval length in hours

Methods

_add_constraint_intertemporal_throughput!(model, times, τ)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/constraints.jl:156.

source
NEMStorageUnderUncertainty._add_constraint_throughput_limit!Method
_add_constraint_throughput_limit!(
    model::JuMP.Model,
    times::Vector{Dates.DateTime},
    d_max::Float64
) -> JuMP.ConstraintRef{JuMP.Model}

Summary

Adds a throughput limit constraint that applies to the final time period in a simulation.

Adds the following constraint to model:

$d_{end} ≤ d_{max}$

where $d_{max}$ is supplied

Arguments

  • model: JuMP model
  • times: A Vector of DateTimes
  • d_max: Throughput limit in MWh, applicable at the end of times

Methods

_add_constraint_throughput_limit!(model, times, d_max)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/constraints.jl:191.

source
NEMStorageUnderUncertainty._add_constraints_charge_state!Method
_add_constraints_charge_state!(
    model::JuMP.Model,
    storage::NEMStorageUnderUncertainty.StorageDevice,
    times::Vector{Dates.DateTime}
) -> Tuple{JuMP.Containers.DenseAxisArray, JuMP.Containers.DenseAxisArray}

Summary

Constraints that explicitly prevent simultaneous charging and discharging during a time interval $t$. Adds two constraints to model:

  • $p_t - \bar{p}\left(1-u_t\right) \leq 0$
  • $q_t - \bar{p}u_t \leq 0$

In the absence of these constraints, simultaneous charging and discharging was observed for a BESS device simulated for the following model formulations:

Arguments

  • model: JuMP model
  • storage: A StorageDevice
  • times: A Vector of DateTimes

Methods

_add_constraints_charge_state!(model, storage, times)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/constraints.jl:18.

source