Get Started

For a more detailed description of each of the steps mentioned below, see the following pages:

In short

This workflow documentation will guide you through all the steps that are required to prepare an exemplary model. Here, we optimize an energy system with a flat electricity demand over a full year that can be served by imports from the grid, or by installing photovoltaic panels and a battery.

The modelling steps are as follows:

  • Create an empty working directory for all input data. The subsequent functions will create the data structure you need for the model

  • Create the templates for the system topology and the model configuration.

    import adopt_net0 as adopt
    import json
    from pathlib import Path
    
    input_data_path = "path_to_your_input_data_folder"
    adopt.create_optimization_templates(input_data_path)
    
  • Define your system topology and the model configuration.

    with open(input_data_path / "Topology.json", "r") as json_file:
        topology = json.load(json_file)
    # Nodes
    topology["nodes"] = ["node1"]
    # Carriers:
    topology["carriers"] = ["electricity"]
    # Investment periods:
    topology["investment_periods"] = ["period1"]
    # Save json template
    with open(input_data_path / "Topology.json", "w") as json_file:
        json.dump(topology, json_file, indent=4)
    
  • Create the folder structure and templates for the input data files.

    adopt.create_input_data_folder_template(input_data_path)
    
  • Load and define input data (e.g., weather data, technology performance, demand data, etc.).

    # Define new technologies
    with open(input_data_path / "period1" / "node_data" / "node1" / "Technologies.json", "r") as json_file:
        technologies = json.load(json_file)
    technologies["new"] = ["Photovoltaic", "Storage_Battery"]
    with open(input_data_path / "period1" / "node_data" / "node1" / "Technologies.json", "w") as json_file:
        json.dump(technologies, json_file, indent=4)
    
    # Copy over technology files
    adopt.copy_technology_data(input_data_path)
    
    # Define climate data
    adopt.load_climate_data_from_api(input_data_path)
    
    # Define demand
    adopt.fill_carrier_data(input_data_path, value=0.01, columns=['Demand'], carriers=['electricity'], nodes=['node1'])
    adopt.fill_carrier_data(input_data_path, value=100, columns=['Import price'], carriers=['electricity'], nodes=['node1'])
    adopt.fill_carrier_data(input_data_path, value=1, columns=['Import limit'], carriers=['electricity'], nodes=['node1'])
    
  • Define model configuration if you want to change something from the defaults. Make sure that the result folder path in reporting/save_path refers to an existing folder

  • Construct and solve the model and, possibly, incorporate options to lower the complexity of the model.

    m = adopt.ModelHub()
    m.read_data(input_data_path, start_period=None, end_period=None)
    m.quick_solve()
    
  • If something unexpected happens: check the model diagnostics.

  • Obtain and interpret the optimization results. Therefore, you can upload the H5 file saved on the visualization platform provided: https://resultvisualization.streamlit.app/.

An elaborate example of how to set up the model accordingly can be found below. To understand what happens behind the scenes, please take a look at the Source Code Documentation.