From 672d7b9538ed9c1ad811a43dd056ff7cb60d202a Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 16 Aug 2023 13:45:59 +0200 Subject: [PATCH] force add scenarios.yaml / create_scenarios --- config/scenarios.yaml | 12 ++++++++++++ scripts/create_scenarios.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 config/scenarios.yaml create mode 100644 scripts/create_scenarios.py diff --git a/config/scenarios.yaml b/config/scenarios.yaml new file mode 100644 index 00000000..37d32243 --- /dev/null +++ b/config/scenarios.yaml @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT + +# This file is used to define the scenarios that are run by snakemake. Each entry on the first level is a scenario. Each scenario can contain configuration overrides with respect to the config/config.yaml settings. +# +# Example +# +# custom-scenario: # name of the scenario +# electricity: +# renewable_carriers: [wind, solar] # override the list of renewable carriers diff --git a/scripts/create_scenarios.py b/scripts/create_scenarios.py new file mode 100644 index 00000000..40a3c331 --- /dev/null +++ b/scripts/create_scenarios.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT + +# This script helps to generate a scenarios.yaml file for PyPSA-Eur. +# You can modify the template to your needs and define all possible combinations of config values that should be considered. + + +import itertools + +# Insert your config values that should be altered in the template. +# Change `config_section` and `config_section2` to the actual config sections. +template = """ +scenario{scenario_number}: + config_section: + config_value: {config_value} + + config_section2: + config_key2: {config_value2} +""" + +# Define all possible combinations of config values. +# This must define all config values that are used in the template. +config_values = dict(config_values=["true", "false"], config_values2=[1, 2, 3, 4, 5]) + +combinations = [ + dict(zip(config_values.keys(), values)) + for values in itertools.product(*config_values.values()) +] + +# write the scenarios to a file +filename = "../config/scenarios.yaml" +with open(filename, "w") as f: + for i, config in enumerate(combinations): + f.write(template.format(scenario_number=i, **config))