# Archetypes

Archetypes are essentially ready-made templates for different aspects of *SpineOpt.jl*. They are intended to serve both as examples for *how* the data structure in *SpineOpt.jl* works, as well as pre-made modular parts that can be imported on top of existing model input data.

The `templates/models/basic_model_template.json`

contains a ready-made template for simple energy system models, with uniform time resolution and deterministic stochastic structure. Essentially, it serves as a basis for testing how the modelled system is set up, without having to worry about setting up the temporal and stochastic structures.

The rest of the different archetypes are included under `templates/archetypes`

in the *SpineOpt.jl* repository. Each archetype is stored as a `.json`

file containing the necessary objects, relationships, and parameters to form a functioning pre-made part for a *SpineOpt.jl* model. The archetypes aren't completely plug-and-play, as there are always some relationships required to connect the archetype to the other input data correctly. Regardless, the following sections explain the different archetypes included in the *SpineOpt.jl* repository, as well as what steps the user needs to take to connect said archetype to their input data correctly.

## Branching Stochastic Tree

`templates/archetypes/branching_stochastic_tree.json`

This archetype contains the definitions required for an example stochastic_structure called `branching`

, representing a branching scenario tree. The stochastic_structure starts out as a single stochastic_scenario called `realistic`

, which then branches out into three roughly equiprobable stochastic_scenarios called `forecast1`

, `forecast2`

, and `forecast3`

after 6 hours. This archetype is the final product of following the steps in the Example of branching stochastics part of the Stochastic Framework section.

Importing this archetype into an input datastore only creates the stochastic_structure, which needs to be connected to the rest of your model using either the model__default_stochastic_structure relationship for a model-wide default, or the other relevant Structural relationship classes. Note that the model-wide default gets superceded by any conflicting definitions via e.g. the node__stochastic_structure.

## Converging Stochastic Tree

`templates/archetypes/converging_stochastic_tree.json`

This archetype contains the definitions required for an example stochastic_structure called `converging`

, representing a converging scenario tree *(technically a directed acyclic graph DAG)*. The stochastic_structure starts out as a single stochastic_scenario called `realization`

, which then branches out into three roughly equiprobable stochastic_scenarios called `forecast1`

, `forecast2`

, and `forecast3`

after 6 hours. Then, after 24 hours *(1 day)*, these three forecasts converge into a single stochastic_scenario called `converged_forecast`

. This archetype is the final product of following the steps in the Example of converging stochastics part of the Stochastic Framework section.

Importing this archetype into an input datastore only creates the stochastic_structure, which needs to be connected to the rest of your model using either the model__default_stochastic_structure relationship for a model-wide default, or the other relevant Structural relationship classes. Note that the model-wide default gets superceded by any conflicting definitions via e.g. the node__stochastic_structure.

## Deterministic Stochastic Structure

`templates/archetypes/deterministic_stochastic_structure.json`

This archetype contains the definitions required for an example stochastic_structure called `deterministic`

, representing a simple deterministic modelling case. The stochastic_structure contains only a single stochastic_scenario called `realization`

, which continues indefinitely. This archetype is the final product of following the steps in the Example of deterministic stochastics part of the Stochastic Framework section.

Importing this archetype into an input datastore only creates the stochastic_structure, which needs to be connected to the rest of your model using either the model__default_stochastic_structure relationship for a model-wide default, or the other relevant Structural relationship classes. Note that the model-wide default gets superceded by any conflicting definitions via e.g. the node__stochastic_structure.