Objectives

NEMStorageUnderUncertainty._add_objective_cap_contracted!Method
_add_objective_cap_contracted!(
    model::JuMP.Model,
    prices::Vector{<:AbstractFloat},
    times::Vector{Dates.DateTime},
    τ::Float64,
    d_0::Float64,
    d_lifetime::Float64,
    e_rated::Float64,
    c_capital::Float64,
    C::Float64
) -> Any

Summary

Adds a revenue-maximising objective function that:

  1. Models the storage device defending a cap contract. Cap contracts are sold at a price in /MWh, and typically apply over a quarter or year. Futhermore, cap contracts that are sold by a generating participant can be defended across the entire portfolio of their generating assets (as opposed to any individual asset). As such, this representation only approximates how a storage device might be used to defend a cap contract.
  2. Penalises storage throughput/cycling. The penalty is the proportion of the warrantied throughput lifetime of the storage device expended during the modelled period, multiplied by the cost of a new storage device. In other words, the storage device replacement cost is amortised across throughput. This bears similarities to the energy throughput model in this paper.

\[\begin{aligned} \max \quad & \sum_{t \in T}\left(\tau\lambda_t(p_t - q_t) - \tau\beta_tC(\lambda_t - 300)\right) - \frac{d_T - d_0}{d_{lifetime}} e_{rated} c_{capital} \end{aligned}\]

Arguments

  • model: JuMP model
  • prices: A Vector of prices in /MWh
  • times: A Vector of DateTimes
  • τ: Frequency of prices in hours
  • d_0: Initial throughput of storage device in MWh
  • d_lifetime: Warrantied throughput lifetime of the storage device in MWh
  • e_rated: Storage energy capacity in MWh
  • c_capital: Capital cost of storage device in AUD/MWh
  • C: Quantity of capacity "contracted" under cap contract (MW)

Methods

_add_objective_cap_contracted!(
    model,
    prices,
    times,
    τ,
    d_0,
    d_lifetime,
    e_rated,
    c_capital,
    C
)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/objectives.jl:116.

source
NEMStorageUnderUncertainty._add_objective_discounted!Method
_add_objective_discounted!(
    model::JuMP.Model,
    prices::Vector{<:AbstractFloat},
    times::Vector{Dates.DateTime},
    τ::Float64,
    d_0::Float64,
    d_lifetime::Float64,
    e_rated::Float64,
    c_capital::Float64,
    discount_function::Function,
    r::Float64
) -> Any

Summary

Adds a revenue-maximising objective function that:

  1. Models the storage device discounting decisions in the future based on a discount function $DF(r,t)$, where $r$ is the discount rate.
  2. Penalises storage throughput/cycling. The penalty is the proportion of the warrantied throughput lifetime of the storage device expended during the modelled period, multiplied by the cost of a new storage device. In other words, the storage device replacement cost is amortised across throughput. This bears similarities to the energy throughput model in this paper.

\[\begin{aligned} \max \quad & \sum_{t \in T}\left(\tau(p_t - q_t) \times \lambda_t DF(r, t)\right) - \frac{d_T - d_0}{d_{lifetime}} e_{rated} c_{capital} \end{aligned}\]

Arguments

  • model: JuMP model
  • prices: A Vector of prices in /MWh
  • times: A Vector of DateTimes
  • τ: Frequency of prices in hours
  • d_0: Initial throughput of storage device in MWh
  • d_lifetime: Warrantied throughput lifetime of the storage device in MWh
  • e_rated: Storage energy capacity in MWh
  • c_capital: Capital cost of storage device in AUD/MWh
  • discount_function: Function that calculates discount factor $DF$. Should take a Vector of discount times (hours ahead) and the discount rate $r$ (per hour) as arguments.
  • r: Discount rate. Should have units $hr^{-1}$.

Methods

_add_objective_discounted!(
    model,
    prices,
    times,
    τ,
    d_0,
    d_lifetime,
    e_rated,
    c_capital,
    discount_function,
    r
)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/objectives.jl:177.

source
NEMStorageUnderUncertainty._add_objective_standard!Method
_add_objective_standard!(
    model::JuMP.Model,
    prices::Vector{<:AbstractFloat},
    times::Vector{Dates.DateTime},
    τ::Float64
) -> Any

Summary

Adds a standard revenue-maximising objective function:

\[\begin{aligned} \max \quad & \sum_{t \in T}{\tau\lambda_t(p_t - q_t)} \end{aligned}\]

Arguments

  • model: JuMP model
  • prices: A Vector of prices in /MWh
  • times: A Vector of DateTimes
  • τ: Frequency of prices in hours

Methods

_add_objective_standard!(model, prices, times, τ)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/objectives.jl:17.

source
NEMStorageUnderUncertainty._add_objective_throughput_penalty!Method
_add_objective_throughput_penalty!(
    model::JuMP.Model,
    prices::Vector{<:AbstractFloat},
    times::Vector{Dates.DateTime},
    τ::Float64,
    d_0::Float64,
    d_lifetime::Float64,
    e_rated::Float64,
    c_capital::Float64
) -> Any

Summary

Adds a revenue-maximising objective function that penalises storage throughput/cycling.

The penalty is the proportion of the warrantied throughput lifetime of the storage device expended during the modelled period, multiplied by the cost of a new storage device. In other words, the storage device replacement cost is amortised across throughput.

This bears similarities to the energy throughput model in this paper.

\[\begin{aligned} \max \quad & \sum_{t \in T}{\tau\lambda_t(p_t - q_t)} - \frac{d_T - d_{0}}{d_{\textrm{lifetime}}}e_{\textrm{rated}}c_{\textrm{capital}} \end{aligned}\]

Arguments

  • model: JuMP model
  • prices: A Vector of prices in /MWh
  • times: A Vector of DateTimes
  • τ: Frequency of prices in hours
  • d_0: Initial throughput of storage device in MWh
  • d_lifetime: Warrantied throughput lifetime of the storage device in MWh
  • e_rated: Storage energy capacity in MWh
  • c_capital: Capital cost of storage device in AUD/MWh

Methods

_add_objective_throughput_penalty!(
    model,
    prices,
    times,
    τ,
    d_0,
    d_lifetime,
    e_rated,
    c_capital
)

defined at /home/runner/work/NEMStorageUnderUncertainty/NEMStorageUnderUncertainty/src/model/objectives.jl:59.

source