From f4ddbc088917684edce976c9ba4332ad1ac94e4a Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Thu, 20 Jun 2024 09:40:38 -0600 Subject: [PATCH] \bf was not rendering, fixing a broken math line --- .../HERON_Cashflows.md | 2 +- .../HERON_Components.md | 19 +++++++++++-------- .../TimeHistoryTraining/HERON_TimeIndexing.md | 6 +++--- .../Workflows/HERON_Standard_Workflow.md | 18 +++++++++--------- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/doc/theory_manual/ComponentCharacterization/HERON_Cashflows.md b/doc/theory_manual/ComponentCharacterization/HERON_Cashflows.md index 09510f2c..2b353698 100644 --- a/doc/theory_manual/ComponentCharacterization/HERON_Cashflows.md +++ b/doc/theory_manual/ComponentCharacterization/HERON_Cashflows.md @@ -60,7 +60,7 @@ $$ F_y = \frac{\lambda_{p,y}^F}{(1+r)^y}\hat{F} $$ These get applied to the summed yearly cashflows. Note that cashflows are typically a function of dispatch or capacity in HERON: -$$F_y = f(\bm{c}, {}^s\bm{D}^\star)$$ +$$F_y = f(\mathbf{c}, {}^s\mathbf{D}^\star)$$ ## **Types of Cash Flows** diff --git a/doc/theory_manual/ComponentCharacterization/HERON_Components.md b/doc/theory_manual/ComponentCharacterization/HERON_Components.md index 067f8ff5..685f16d6 100644 --- a/doc/theory_manual/ComponentCharacterization/HERON_Components.md +++ b/doc/theory_manual/ComponentCharacterization/HERON_Components.md @@ -7,16 +7,16 @@ We first define variables in our problem. Each component has the capability to p 3) produce or consume+produce. Each component can only perform one of those three actions. If it produces/consumes, then it can perform the action on multiple resources with a given transfer function that describes the conversion of a set $A$ of resources into another set $B$ of resources. For these given actions, the component will have a maximum value at which they can perform this action: these are capacities which, when collected for all components, is given as a vector -$$\bm{c} = \big[ \ c_p : p \in \mathbb{P}^\prime\ \big]. $$ +$$\mathbf{c} = \big[ \ c_p : p \in \mathbb{P}^\prime\ \big]. $$ Note that we are considering only the set of components that store or produce here, $\mathbb{P}^\prime \in \mathbb{P}$. This is closer to the definition of an IES; the difference is that within HERON we must include a resource sink for the resources to go to fulfill a demand or get sold. The demanding resources within HERON are typically markets or grids which are not typically a part of the IES but must be defined to conduct the simulation. We may be able to include the capacity of the market as an additional variable... ## ***Component Minimums and Capacity Factors*** There are optional inputs for all components to define the minimum level of production or resource activity. If not specified, the default is 0. -$$\bm{m} = \big[ \ m_p : p \in \mathbb{P}^\prime\ \big]. $$ +$$\mathbf{m} = \big[ \ m_p : p \in \mathbb{P}^\prime\ \big]. $$ Additionally, capacity factors can be used to modify the upper bound of production on an hourly time scale. -$$\bm{f} = \big[ \ \big[\ \big[ \ \big[ f_{p,y,u,t} : t \in \mathbb{T} \ \big] : u \in \mathbb{U}_Y \ \big] : y \in \mathbb{Y} \ \big] : p \in \mathbb{P}^\prime\ \big]. $$ +$$\mathbf{f} = \big[ \ \big[\ \big[ \ \big[ f_{p,y,u,t} : t \in \mathbb{T} \ \big] : u \in \mathbb{U}_Y \ \big] : y \in \mathbb{Y} \ \big] : p \in \mathbb{P}^\prime\ \big]. $$ ## ***Transfer Functions*** Only Producer components have the option to declare a transfer function which defines how a subset of resources is converted into another set. Three type of transfer functions are allowed: @@ -39,7 +39,7 @@ Custom Python methods are also allowed to be used to define the transfer relatio ## ***Dispatch Activity*** The actual action the component takes on resources per timestep is referred to as the dispatch activity and can be indexed similarly for each component by the resource being acted on as well as the time. We subdivide the time into years, then into clustered segments and then into a smaller timestep (typically hours per year). The dispatch matrix is -$${}^s\bm{D}^\star = \big[ \ \big[ \ \big[\ \big[ \ \big[ {}^sD^\star_{p,x,y,u,t} : t \in \mathbb{T} \ \big] : u \in \mathbb{U}_Y \ \big] : y \in \mathbb{Y} \ \big] : x \in \mathbb{X} \ \big]: p \in \mathbb{P}^\prime \ \big]$$ +$${}^s\mathbf{D}^\star = \big[ \ \big[ \ \big[\ \big[ \ \big[ {}^sD^\star_{p,x,y,u,t} : t \in \mathbb{T} \ \big] : u \in \mathbb{U}_Y \ \big] : y \in \mathbb{Y} \ \big] : x \in \mathbb{X} \ \big]: p \in \mathbb{P}^\prime \ \big]$$ For the different component types, the dispatch activity is tracked via the following dispatch optimization variables: 1) Producer $\rightarrow$ production @@ -56,13 +56,16 @@ $$ 0 \leq D_{p,x,y,u,t} \leq c_p \ \forall \ \begin{cases} p \in \mathbb{P}^\pri Otherwise the components will just dispatch at a fixed level based on their capacity. We can also define the specific collection of dispatch actions taken within a specific scenario (i.e., for a given stochastic profile) as -$${}^s\bm{D} \equiv \bm{D}(s)$$ +$${}^s\mathbf{D} \equiv \mathbf{D}(s)$$ or perhaps more explicitly, -$${}^s\bm{D} \equiv \bm{D}({}^s\bm{W})$$ +$${}^s\mathbf{D} \equiv \mathbf{D}({}^s\mathbf{W})$$ -where we're not exactly indexing per scenario, it's perhaps more of a response of the dispatch to a given scenario $s$ and denote it as shown above. +where we're not exactly indexing per scenario, it's more of a response of the dispatch to a given scenario $s$ and denote it as shown above. +The optimal dispatch is defined as one which maximizes an inner objective function as shown below: -$$ {}^sD^\star_{p,x,\hat{y},\hat{u},t} = \argmax_D \ \sum_{P,X,T_{U}} {}^s\hat{F}_{hourly} \Big|_{\hat{u},\hat{y}} $$ +$${}^s\mathbf{D}^\star_{p,x,\hat{y},\hat{u},t} = \argmax_D \ \sum_{P,X,T_{U}} {}^s\hat{F}_{hourly} \Big|_{\hat{u},\hat{y}}$$ + +Here, the objective is to maximize the sum of all *hourly* cashflows for all components, all resources, and all times per segment **for each** cluster/segment, **for each** year, **for each** scenario. diff --git a/doc/theory_manual/TimeHistoryTraining/HERON_TimeIndexing.md b/doc/theory_manual/TimeHistoryTraining/HERON_TimeIndexing.md index 6336cbf2..58033995 100644 --- a/doc/theory_manual/TimeHistoryTraining/HERON_TimeIndexing.md +++ b/doc/theory_manual/TimeHistoryTraining/HERON_TimeIndexing.md @@ -19,13 +19,13 @@ $$\{\ \cup \ \mathbb{N}_u \ | u \in \mathbb{U}_Y \}=\mathbb{N}_Y$$ We can collect the number of segments each cluster represents as a multiplicity vector: -$$\bm{m} = [\ \ \text{len}(\mathbb{N}_u) \ | \ u \in \mathbb{U}_Y \ ]$$ +$$\mathbf{m} = [\ \ \text{len}(\mathbb{N}_u) \ | \ u \in \mathbb{U}_Y \ ]$$ The stochastic profiles which will be returned from the trained model will then have a shape of $Y \times U \times T$ and is given as -$$ {}^s\bm{W} $$ +$$ {}^s\mathbf{W} $$ for a given evaluation $s$ of some stochastic profile generator. The value of the synthetic signal at some timestep $t$ of cluster $u$ during year $y$ is indexed as -$$ {}^s\bm{W}_{y,u,t} $$ +$$ {}^s\mathbf{W}_{y,u,t} $$ This stochastic profile could have an additional dimension if multiple signals are produced in one profile. diff --git a/doc/theory_manual/Workflows/HERON_Standard_Workflow.md b/doc/theory_manual/Workflows/HERON_Standard_Workflow.md index 1747691e..e2c54317 100644 --- a/doc/theory_manual/Workflows/HERON_Standard_Workflow.md +++ b/doc/theory_manual/Workflows/HERON_Standard_Workflow.md @@ -19,14 +19,14 @@ where $\mathcal{S}$ is the statistical metric and $\mathbb{O}$ is a set of econo ### *Sweep Mode* If selecting sweep mode, the outer level runs a parametric sweep over a list of capacity values $c$ as: -$$ \underset{\bm{c}}{\text{sweep}} \ \ \mathcal{S}( \mathbb{O} )$$ +$$ \underset{\mathbf{c}}{\text{sweep}} \ \ \mathcal{S}( \mathbb{O} )$$ Multiple statistics can be reported back per iteration within the parametric sweep, shown here for $K$ different statistics (e.g., expected value, minimum, 95% percentile): -$$ \underset{\bm{c}}{\text{sweep}} \ \ \Big[\mathcal{S}_0( \mathbb{O} ), \ \mathcal{S}_1( \mathbb{O} ), \ ..., \ \mathcal{S}_K( \mathbb{O} ) \Big]$$ +$$ \underset{\mathbf{c}}{\text{sweep}} \ \ \Big[\mathcal{S}_0( \mathbb{O} ), \ \mathcal{S}_1( \mathbb{O} ), \ ..., \ \mathcal{S}_K( \mathbb{O} ) \Big]$$ Additionally, and only in sweep mode, HERON can report back multiple economic metrics, shown below for $M$ different metrics: -$$ \underset{\bm{c}}{\text{sweep}} \ \ \begin{bmatrix} \mathcal{S}_0( \mathbb{O}_0 ), \ \mathcal{S}_1( \mathbb{O}_0 ), \ ..., \ \mathcal{S}_K( \mathbb{O}_0 ) \\ \vdots \\ \mathcal{S}_0( \mathbb{O}_M ), \ \mathcal{S}_1( \mathbb{O}_M ), \ ..., \ \mathcal{S}_K( \mathbb{O}_M ) \end{bmatrix} $$ +$$ \underset{\mathbf{c}}{\text{sweep}} \ \ \begin{bmatrix} \mathcal{S}_0( \mathbb{O}_0 ), \ \mathcal{S}_1( \mathbb{O}_0 ), \ ..., \ \mathcal{S}_K( \mathbb{O}_0 ) \\ \vdots \\ \mathcal{S}_0( \mathbb{O}_M ), \ \mathcal{S}_1( \mathbb{O}_M ), \ ..., \ \mathcal{S}_K( \mathbb{O}_M ) \end{bmatrix} $$ NOTE: multiple metrics is not available when selecting levelized cost. Selection for other metrics is limited to NPV, IRR, and PI. @@ -39,25 +39,25 @@ If selecting opt mode, the outer level uses an optimizer algorithm to determine Regardless of optimization method, the overall problem is stated as -$$ \underset{\bm{c}}{\text{opt}} \ \ \mathcal{S}( \mathbb{O}_m )$$ +$$ \underset{\mathbf{c}}{\text{opt}} \ \ \mathcal{S}( \mathbb{O}_m )$$ where: -- $\bm{c}$ : component (e.g., nuclear, wind turbines) capacities +- $\mathbf{c}$ : component (e.g., nuclear, wind turbines) capacities - $\mathcal{S}$ : statistical operator (e.g., expected value, value at risk) - $\mathbb{O}_m$ : a set of economic metrics from individual inner realizations - $m$ : subscript for some economic metric (e.g., net present value, levelized cost) -- $\bm{c}^\star$ : optimal set of capacities for the given objective +- $\mathbf{c}^\star$ : optimal set of capacities for the given objective Depending on the statistical metric (and even moreso the economic metric), the direction of optimization changes. For example if the economic metric is the net present value, if the statistical metric is expected value then we would want to maximize: -$$ \underset{\bm{c}}{\text{max}} \ \ \mathbb{E}( \mathbb{O}_{NPV} )$$ +$$ \underset{\mathbf{c}}{\text{max}} \ \ \mathbb{E}( \mathbb{O}_{NPV} )$$ If the statistic is the value-at-risk of the distribution at a given probability level, we'd want to minimize: -$$ \underset{\bm{c}}{\text{min}} \ \ \mathbb{V}_{0.05}( \mathbb{O}_{NPV} )$$ +$$ \underset{\mathbf{c}}{\text{min}} \ \ \mathbb{V}_{0.05}( \mathbb{O}_{NPV} )$$ The optimal set of capacities for the given objective is -$$ \bm{c}^\star = \argmax_{\bm{c}} \ \mathcal{S}( \mathbb{O}_{NPV} )$$ +$$ \mathbf{c}^\star = \argmax_{\mathbf{c}} \ \mathcal{S}( \mathbb{O}_{NPV} )$$ ## Inner Level