{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Uncertainty Analysis\n", "\n", "In this tutorial, we will perform an uncertainty analysis using the EnergyScope model. We will explore how varying certain parameters affects the energy system configuration and results. This is achieved by generating a sequence of parameter values using Sobol sequences, running multiple optimizations, and analyzing the outcomes.\n", "\n", "---\n", "## Import Necessary Libraries\n", "\n", "First, we import all the required libraries and modules:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2024-10-01T08:38:32.843015Z", "start_time": "2024-10-01T08:38:32.700968Z" } }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import seaborn as sns\n", "from energyscope.energyscope import Energyscope\n", "from energyscope.models import infrastructure_ch_2050\n", "from energyscope.result import postprocessing\n", "from energyscope.datasets import gen_sobol_sequence" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "- **`pandas`**: For data manipulation and analysis.\n", "- **`numpy`**: For numerical operations.\n", "- **`seaborn`**: For statistical data visualization.\n", "- **`Energyscope`**: Main class for initializing and running the EnergyScope model.\n", "- **`infrastructure_ch_2050`**: Predefined model for different configurations.\n", "- **`postprocessing`**: Functions to process results after optimizations.\n", "- **`gen_sobol_sequence`**: Function to generate Sobol sequences for parameter sampling.\n", "\n", "---\n", "## Manual Parameter Definition\n", "\n", "### Define Parameters for Uncertainty Analysis\n", "\n", "We manually define a list of parameters whose uncertainty we want to analyze. Each parameter includes a name, a lower bound, and an upper bound:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2024-10-01T08:38:35.090951Z", "start_time": "2024-10-01T08:38:35.086997Z" } }, "outputs": [], "source": [ "varying_parameter = 'c_inv'\n", "parameters = [\n", " {'name': 'PV_LV', 'lower_bound': 0, 'upper_bound': 50},\n", " {'name': 'WIND', 'lower_bound': 0, 'upper_bound': 20},\n", " {'name': 'CCGT', 'lower_bound': 0, 'upper_bound': 10}\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "- **`PV_LV`**: Photovoltaic at Low Voltage level.\n", "- **`WIND`**: Wind energy capacity.\n", "- **`CCGT`**: Combined Cycle Gas Turbine capacity.\n", "- The bounds represent the range within which the parameter values will vary during the analysis.\n", "\n", "### Generate Sobol Sequence for Parameter Sampling\n", "\n", "We use the `gen_sobol_sequence` function to generate a Sobol sequence, which provides quasi-random samples of parameter values within the specified bounds:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2024-10-01T08:38:37.246912Z", "start_time": "2024-10-01T08:38:37.243093Z" } }, "outputs": [], "source": [ "seq, prob = gen_sobol_sequence(parameters=parameters, trajectories=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "- **`trajectories=4`**: Specifies the number of trajectories or samples to generate.\n", "- **`seq`**: The generated sequence of parameter values.\n", "- **`prob`**: Metadata about the parameters and their sampling.\n", "\n", "### Display Number of Generated Samples\n", "\n", "We can display the number of generated samples to verify:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2024-10-01T08:38:40.243189Z", "start_time": "2024-10-01T08:38:40.237858Z" } }, "outputs": [ { "data": { "text/plain": [ "20" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(len(seq))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "- This should output the total number of parameter sets generated.\n", "\n", "### Prepare Parameter DataFrame\n", "\n", "We prepare a DataFrame to hold the generated parameter sequences in a format suitable for the EnergyScope model:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2024-10-01T08:38:42.919266Z", "start_time": "2024-10-01T08:38:42.902353Z" } }, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "index0", "rawType": "object", "type": "string" }, { "name": "value0", "rawType": "float64", "type": "float" }, { "name": "value1", "rawType": "float64", "type": "float" }, { "name": "value2", "rawType": "float64", "type": "float" }, { "name": "value3", "rawType": "float64", "type": "float" }, { "name": "value4", "rawType": "float64", "type": "float" }, { "name": "value5", "rawType": "float64", "type": "float" }, { "name": "value6", "rawType": "float64", "type": "float" }, { "name": "value7", "rawType": "float64", "type": "float" }, { "name": "value8", "rawType": "float64", "type": "float" }, { "name": "value9", "rawType": "float64", "type": "float" }, { "name": "value10", "rawType": "float64", "type": "float" }, { "name": "value11", "rawType": "float64", "type": "float" }, { "name": "value12", "rawType": "float64", "type": "float" }, { "name": "value13", "rawType": "float64", "type": "float" }, { "name": "value14", "rawType": "float64", "type": "float" }, { "name": "value15", "rawType": "float64", "type": "float" }, { "name": "value16", "rawType": "float64", "type": "float" }, { "name": "value17", "rawType": "float64", "type": "float" }, { "name": "value18", "rawType": "float64", "type": "float" }, { "name": "value19", "rawType": "float64", "type": "float" }, { "name": "param", "rawType": "object", "type": "string" }, { "name": "index1", "rawType": "float64", "type": "float" }, { "name": "index2", "rawType": "float64", "type": "float" }, { "name": "index3", "rawType": "float64", "type": "float" } ], "ref": "b778f863-7321-43eb-a0a4-9abcbd80bd9d", "rows": [ [ "0", "PV_LV", "4.6875", "32.8125", "4.6875", "4.6875", "32.8125", "29.6875", "7.8125", "29.6875", "29.6875", "7.8125", "42.1875", "45.3125", "42.1875", "42.1875", "45.3125", "17.1875", "20.3125", "17.1875", "17.1875", "20.3125", "c_inv", null, null, null ], [ "1", "WIND", "9.375", "9.375", "5.625", "9.375", "5.625", "19.375", "19.375", "15.625", "19.375", "15.625", "4.375", "4.375", "10.625", "4.375", "10.625", "14.375", "14.375", "0.625", "14.375", "0.625", "c_inv", null, null, null ], [ "2", "CCGT", "4.6875", "4.6875", "4.6875", "9.6875", "9.6875", "9.6875", "9.6875", "9.6875", "4.6875", "4.6875", "2.1875", "2.1875", "2.1875", "2.1875", "2.1875", "7.1875", "7.1875", "7.1875", "7.1875", "7.1875", "c_inv", null, null, null ] ], "shape": { "columns": 25, "rows": 3 } }, "text/html": [ "
\n", " | index0 | \n", "value0 | \n", "value1 | \n", "value2 | \n", "value3 | \n", "value4 | \n", "value5 | \n", "value6 | \n", "value7 | \n", "value8 | \n", "... | \n", "value14 | \n", "value15 | \n", "value16 | \n", "value17 | \n", "value18 | \n", "value19 | \n", "param | \n", "index1 | \n", "index2 | \n", "index3 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "PV_LV | \n", "4.6875 | \n", "32.8125 | \n", "4.6875 | \n", "4.6875 | \n", "32.8125 | \n", "29.6875 | \n", "7.8125 | \n", "29.6875 | \n", "29.6875 | \n", "... | \n", "45.3125 | \n", "17.1875 | \n", "20.3125 | \n", "17.1875 | \n", "17.1875 | \n", "20.3125 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
1 | \n", "WIND | \n", "9.3750 | \n", "9.3750 | \n", "5.6250 | \n", "9.3750 | \n", "5.6250 | \n", "19.3750 | \n", "19.3750 | \n", "15.6250 | \n", "19.3750 | \n", "... | \n", "10.6250 | \n", "14.3750 | \n", "14.3750 | \n", "0.6250 | \n", "14.3750 | \n", "0.6250 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
2 | \n", "CCGT | \n", "4.6875 | \n", "4.6875 | \n", "4.6875 | \n", "9.6875 | \n", "9.6875 | \n", "9.6875 | \n", "9.6875 | \n", "9.6875 | \n", "4.6875 | \n", "... | \n", "2.1875 | \n", "7.1875 | \n", "7.1875 | \n", "7.1875 | \n", "7.1875 | \n", "7.1875 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
3 rows × 25 columns
\n", "level_0 | \n", "ACETIC_ACID | \n", "ACETONE | \n", "ALKALINE_ELECTROLYSIS | \n", "ALUMINUM | \n", "AL_MAKING | \n", "AL_MAKING_HR | \n", "AN_DIG | \n", "AN_DIG_SI | \n", "BATTERY | \n", "BENZENE | \n", "... | \n", "UNMINEABLE_COAL_SEAM | \n", "URANIUM | \n", "WASTE | \n", "WASTE_BIO | \n", "WASTE_FOS | \n", "WET_BIOMASS | \n", "WIND | \n", "WOOD | \n", "WOOD_METHANOL | \n", "XYLENE | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Run | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
11 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "20.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
10 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "20.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
19 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "20.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
7 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "20.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
20 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "20.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
5 rows × 289 columns
\n", "\n", " | index0 | \n", "value0 | \n", "value1 | \n", "value2 | \n", "value3 | \n", "value4 | \n", "value5 | \n", "value6 | \n", "value7 | \n", "value8 | \n", "... | \n", "value74 | \n", "value75 | \n", "value76 | \n", "value77 | \n", "value78 | \n", "value79 | \n", "param | \n", "index1 | \n", "index2 | \n", "index3 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "DEC_HP_ELEC | \n", "311.985938 | \n", "509.029688 | \n", "311.985938 | \n", "311.985938 | \n", "311.985938 | \n", "311.985938 | \n", "311.985938 | \n", "311.985938 | \n", "311.985938 | \n", "... | \n", "377.667188 | \n", "377.667188 | \n", "377.667188 | \n", "377.667188 | \n", "377.667188 | \n", "706.073438 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
1 | \n", "GASIFICATION_H2 | \n", "1383.181250 | \n", "1383.181250 | \n", "936.993750 | \n", "1383.181250 | \n", "1383.181250 | \n", "1383.181250 | \n", "1383.181250 | \n", "1383.181250 | \n", "1383.181250 | \n", "... | \n", "1918.606250 | \n", "1918.606250 | \n", "1918.606250 | \n", "1918.606250 | \n", "1918.606250 | \n", "1829.368750 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
2 | \n", "GASIFICATION_SNG | \n", "2838.544063 | \n", "2838.544063 | \n", "2838.544063 | \n", "1739.752812 | \n", "2838.544063 | \n", "2838.544063 | \n", "2838.544063 | \n", "2838.544063 | \n", "2838.544063 | \n", "... | \n", "1739.752812 | \n", "1739.752812 | \n", "1739.752812 | \n", "1739.752812 | \n", "1739.752812 | \n", "3571.071563 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
3 | \n", "PV_EHV | \n", "1503.125000 | \n", "1503.125000 | \n", "1503.125000 | \n", "1503.125000 | \n", "1178.125000 | \n", "1503.125000 | \n", "1503.125000 | \n", "1503.125000 | \n", "1503.125000 | \n", "... | \n", "1015.625000 | \n", "1340.625000 | \n", "1340.625000 | \n", "1340.625000 | \n", "1340.625000 | \n", "1015.625000 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
4 | \n", "PV_HV | \n", "367.187500 | \n", "367.187500 | \n", "367.187500 | \n", "367.187500 | \n", "367.187500 | \n", "543.437500 | \n", "367.187500 | \n", "367.187500 | \n", "367.187500 | \n", "... | \n", "425.937500 | \n", "249.687500 | \n", "425.937500 | \n", "425.937500 | \n", "425.937500 | \n", "249.687500 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
5 | \n", "PV_LV | \n", "954.687500 | \n", "954.687500 | \n", "954.687500 | \n", "954.687500 | \n", "954.687500 | \n", "954.687500 | \n", "751.562500 | \n", "954.687500 | \n", "954.687500 | \n", "... | \n", "710.937500 | \n", "710.937500 | \n", "832.812500 | \n", "710.937500 | \n", "710.937500 | \n", "832.812500 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
6 | \n", "PV_MV | \n", "629.062500 | \n", "629.062500 | \n", "629.062500 | \n", "629.062500 | \n", "629.062500 | \n", "629.062500 | \n", "629.062500 | \n", "514.687500 | \n", "629.062500 | \n", "... | \n", "400.312500 | \n", "400.312500 | \n", "400.312500 | \n", "590.937500 | \n", "400.312500 | \n", "590.937500 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
7 | \n", "WIND | \n", "1969.426875 | \n", "1969.426875 | \n", "1969.426875 | \n", "1969.426875 | \n", "1969.426875 | \n", "1969.426875 | \n", "1969.426875 | \n", "1969.426875 | \n", "778.610625 | \n", "... | \n", "1419.819375 | \n", "1419.819375 | \n", "1419.819375 | \n", "1419.819375 | \n", "961.813125 | \n", "961.813125 | \n", "c_inv | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
8 rows × 85 columns
\n", "level_0 | \n", "ALKALINE_ELECTROLYSIS | \n", "AL_MAKING | \n", "AL_MAKING_HR | \n", "AN_DIG | \n", "AN_DIG_SI | \n", "BATTERY | \n", "BIOGAS_BIOMETHANE | \n", "BIOMASS_ETHANOL | \n", "BUS_CNG_STOICH | \n", "BUS_DIESEL | \n", "... | \n", "TRAIN_NG | \n", "TRAMWAY | \n", "TRUCK | \n", "TRUCK_CO2 | \n", "TRUCK_EV | \n", "TRUCK_FC | \n", "TRUCK_SNG | \n", "UNMINEABLE_COAL_SEAM | \n", "WIND | \n", "WOOD_METHANOL | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Run | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
32 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.611416 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "4.258822 | \n", "0.0 | \n", "
43 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.425481 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "2.390099 | \n", "0.0 | \n", "0.0 | \n", "0.611416 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "20.000000 | \n", "0.0 | \n", "
35 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.611416 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "4.258822 | \n", "0.0 | \n", "
72 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "2.390099 | \n", "0.0 | \n", "0.0 | \n", "0.611416 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "12.521969 | \n", "0.0 | \n", "
29 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.611416 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "20.000000 | \n", "0.0 | \n", "
5 rows × 232 columns
\n", "