Source code for tessif_examples.basic.statistical_identification_example

# src/tessif_examples/basic/identification_example.py
"""tessif system model example for testing statistical identification."""
import os

import numpy as np
import pandas as pd
import tessif.frused.namedtuples as nts
from tessif import components, system_model

# from tessif_examples import utils
from tessif_examples.paths import data_dir


[docs]def create_statistical_identification_example(periods=24): """Create a generic system model for testing automated identification. Parameters ---------- periods : int, default=24 Number of time steps of the evaluated timeframe (one time step is one hour) Return ------ :class:`tessif.system_model.AbstractEnergySystem` Tessif energy system model. Examples -------- Generic System Visualization: .. image:: ../../_static/system_model_graphs/hh_es_example.png :align: center :alt: Image showing the create_hhes energy system graph. """ # 2. Create a simulation time frame as a :class:`pandas.DatetimeIndex`: timeframe = pd.date_range("2019-01-01", periods=periods, freq="H") # 3. Parse csv files with the demand and renewables load data: data_directory = os.path.join(data_dir, "load_profiles") # solar: pv_hh = pd.read_csv( os.path.join(data_directory, "solar_HH_2019.csv"), index_col=0, sep=";" ) pv_hh = pv_hh.values.flatten()[0:periods] max_pv = np.max(pv_hh) # # wind onshore: # wo_hh = pd.read_csv( # os.path.join(data_directory, "wind_HH_2019.csv"), index_col=0, sep=";" # ) # wo_hh = wo_hh.values.flatten()[0:periods] # max_wo = np.max(wo_hh) # electricity demand: de_hh = pd.read_csv( os.path.join(data_directory, "el_demand_HH_2019.csv"), index_col=0, sep=";" ) de_hh = de_hh["Last (MW)"].values.flatten()[0:periods] de_hh = np.array(de_hh) max_de = np.max(de_hh) # heat demand: # th_hh = pd.read_csv( # os.path.join(data_directory, "th_demand_HH_2019.csv"), index_col=0, sep=";" # ) # th_hh = th_hh["actual_total_load"].values.flatten()[0:periods] # th_hh = np.array(th_hh) # max_th = np.max(th_hh) # 4. Create the individual energy system components: # in_stat = False # cfba = 0 global_constraints = { "name": "2019", "emissions": float("+inf"), # 800, "resources": float("+inf"), } powerline = components.Bus( name="Powerline", region="HH", sector="Power", node_type="AC-Bus", component="bus", carrier="electricity", inputs=( "Gas Powerplant.electricity", "Import.electricity", "Solar.electricity", ), outputs=( "Demand.electricity", "Excess.electricity", ), ) demand = components.Sink( name="Demand", inputs=("electricity",), region="HH", node_type="demand", component="sink", sector="power", carrier="electricity", flow_rates={"electricity": nts.MinMax(min=0, max=max_de)}, timeseries={"electricity": nts.MinMax(min=de_hh, max=de_hh)}, ) excess = components.Sink( name="Excess", region="HH", node_type="Demand", component="sink", carrier="electricity", inputs=("electricity",), ) solar = components.Source( name="Solar", outputs=("electricity",), region="HH", sector="Power", carrier="electricity", component="source", node_type="renewable", flow_rates={"electricity": nts.MinMax(min=0, max=max_pv)}, flow_costs={"electricity": 9}, flow_emissions={"electricity": 0}, timeseries={"electricity": nts.MinMax(min=pv_hh, max=pv_hh)}, expandable={"electricity": True}, expansion_costs={"electricity": 5}, expansion_limits={"electricity": nts.MinMax(min=0, max=float("+inf"))}, ) gas_pipeline = components.Bus( name="Gas Pipeline", region="HH", sector="Power", node_type="GAS", component="bus", carrier="gas", inputs=("Gas Supply.gas",), outputs=("Gas Powerplant.gas",), ) gas_supply = components.Source( name="Gas Supply", region="HH", node_type="Gas Supply", component="source", carrier="GAS", # flow_costs=21, outputs=("gas",), ) gas_powerplant = components.Transformer( name="Gas Powerplant", inputs=("gas",), outputs=("electricity",), conversions={ ("gas", "electricity"): 0.4075, }, region="HH", node_type="Gas Powerplant", component="transformer", sector="ELECTRICITY", carrier="GAS", flow_rates={ "gas": nts.MinMax(min=0, max=float("+inf")), "electricity": nts.MinMax(min=0, max=400), }, flow_costs={ "gas": 10, "electricity": 82, }, flow_emissions={ "gas": 0.2, "electricity": 0, }, ) el_import = components.Source( name="Import", outputs=("electricity",), region="HH", node_type="Import", component="source", carrier="electricity", flow_rates={"electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={ "electricity": 999, }, flow_emissions={ "electricity": 0.45, }, ) explicit_es = system_model.AbstractEnergySystem( uid="Statistical Identification Example", busses=( powerline, gas_pipeline, ), sinks=(demand, excess), sources=( el_import, solar, gas_supply, ), transformers=(gas_powerplant,), timeframe=timeframe, global_constraints=global_constraints, ) return explicit_es