Skip to content

Commit

Permalink
\bf was not rendering, fixing a broken math line
Browse files Browse the repository at this point in the history
  • Loading branch information
GabrielSoto-INL committed Jun 20, 2024
1 parent 51ba5d8 commit f4ddbc0
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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**

Expand Down
19 changes: 11 additions & 8 deletions doc/theory_manual/ComponentCharacterization/HERON_Components.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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
Expand All @@ -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.
6 changes: 3 additions & 3 deletions doc/theory_manual/TimeHistoryTraining/HERON_TimeIndexing.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

18 changes: 9 additions & 9 deletions doc/theory_manual/Workflows/HERON_Standard_Workflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -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

Expand Down

0 comments on commit f4ddbc0

Please sign in to comment.