Source code for tessif_examples.basic.expansion_plan_example

# src/tessif_examples/expansion_plan_example.py
"""Tessif minimum working example energy system model."""
import tessif.frused.namedtuples as nts
from pandas import date_range
from tessif import components, system_model


[docs]def create_expansion_plan_example(): """Create a minimum expansion problem example. Create a small energy system utilizing two emisison free and expandable sources, as well as an emitting one. Returns ------- :class:`tessif.system_model.AbstractEnergySystem` Tessif energy system. Examples -------- Generic System Visualization: .. image:: ../../_static/system_model_graphs/expansion_plan_example.png :align: center :alt: Image showing the expansion plan example energy system graph. """ # 2. Create a simulation time frame of 2 one hour time steps as a # :class:`pandas.DatetimeIndex`: timeframe = date_range("7/13/1990", periods=4, freq="H") # 3. Creating the individual energy system components: # emitting source having no costs and no flow constraints but emissions emitting_source = components.Source( name="Emitting Source", outputs=("electricity",), # Minimum number of arguments required flow_emissions={"electricity": 1}, ) # capped source having no costs, no emission, no flow constraints # but existing and max installed capacity (for expansion) as well # as expansion costs capped_renewable = components.Source( name="Capped Renewable", outputs=("electricity",), # Minimum number of arguments required flow_rates={"electricity": nts.MinMax(min=1, max=2)}, flow_costs={ "electricity": 2, }, expandable={"electricity": True}, expansion_costs={"electricity": 1}, expansion_limits={"electricity": nts.MinMax(min=1, max=4)}, ) # uncapped source having no costs and no emissions # but an externally set timeseries as well as expansion costs uncapped_min, uncapped_max = [1, 2, 3, 1], [1, 2, 3, 1] uncapped_renewable = components.Source( name="Uncapped Renewable", outputs=("electricity",), # Minimum number of arguments required # flow_rates={'electricity': nts.MinMax(min=0, max=1)}, flow_costs={ "electricity": 2, }, expandable={"electricity": True}, expansion_costs={"electricity": 2}, timeseries={"electricity": nts.MinMax(min=uncapped_min, max=uncapped_max)}, expansion_limits={ "electricity": nts.MinMax( min=max(uncapped_max), max=float("+inf"), ) }, ) electricity_line = components.Bus( name="Powerline", inputs=( "Emitting Source.electricity", "Capped Renewable.electricity", "Uncapped Renewable.electricity", ), outputs=("Demand.electricity",), # Minimum number of arguments required ) demand = components.Sink( name="Demand", inputs=("electricity",), # Minimum number of arguments required flow_rates={"electricity": nts.MinMax(min=10, max=10)}, ) global_constraints = {"emissions": 20} # 4. Creating the actual energy system: explicit_es = system_model.AbstractEnergySystem( uid="Expansion Plan Example", busses=(electricity_line,), sinks=(demand,), sources=( emitting_source, capped_renewable, uncapped_renewable, ), timeframe=timeframe, global_constraints=global_constraints, ) return explicit_es