Google-GO Project Configuration: config.go.yaml
This section details the configuration settings used in the Google-GO project, specifically focusing on the config/config.go.yaml file and its differences from the default PyPSA-Eur configuration found in config/config.default.yaml. These modifications enable the specialized modeling required for Guarantee of Origin (GO) certificates and renewable energy targets within the project's framework.
General Project Context
The Google-GO project models a network with 39 nodes (countries/regions) and employs a myopic foresight approach. The planning horizons are set to 2025, 2030, 2035, and 2040, with a 5-year timestep between each horizon.
Configuration Differences and New Additions
Below, each section of config.go.yaml is examined, highlighting differences from config.default.yaml and explaining new configurations.
run
The run section specifies the naming conventions and scenario management for the project.
| Parameter | config.go.yaml |
Description |
|---|---|---|
| name | baseline | Sets the name for the run, used in output file naming. |
| scenarios | ||
| - file | config/scenarios.go.yaml | Specifies the YAML file defining the scenarios to be run. |
foresight
The foresight setting dictates the planning methodology used in the optimization.
| Parameter | config.go.yaml |
Description |
|---|---|---|
| foresight | myopic | Configures the model to use a myopic planning approach. |
scenario
This section defines the core parameters for scenario generation, including spatial and temporal resolution.
| Parameter | config.go.yaml |
Description |
|---|---|---|
| clusters | 39 | Specifies the number of clustered nodes in the network. |
| planning_horizons | [2025, 2030, 2035, 2040] | Defines the years for which the model will be optimized. |
enable
The enable section controls the activation of various features and rules within the workflow.
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
| certificate | - | {true, false} | true | If true, the Guarantee of Origin (GOs) market is modeled. |
co2_budget
The co2_budget parameter in config.go.yaml is explicitly set to false, disabling the CO2 budget constraint in favor of CO2 pricing mechanisms. In config.default.yaml, this section contains a dictionary of year-specific CO2 budget values.
electricity
This section contains extensive modifications related to electricity generation, storage, and demand.
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
| novel_carriers | - | - | [green_ocgt, adv_firm_tech] | A project-specific feature enabling novel technologies. Refer to scripts/prepare_sector_networks.py function add_novel_technologies() for details on its implementation. |
| extendable_carriers | ||||
| - StorageUnit | - | - | [li-ion, iron-air] | Specifies a list of storage technologies that can be extended, which is currently a project-specific feature not upstreamed to PyPSA-Eur. |
| - Store | - | - | [li-ion, iron-air, H2 tank] | Specifies a list of store technologies that can be extended, including project-specific options. |
| make_Store_StorageUnit | boolean | {true, false} | true | If true, activates constraints in scripts/solve_network.py (add_storage_inverter_fix and add_storage_duration_fix) to make PyPSA stores and links behave as storage units, allowing them to not participate in the market. |
| max_hours | ||||
| - li-ion | hours | - | 6 | Defines the maximum hours of storage for lithium-ion batteries. |
| - iron-air | hours | - | 100 | Defines the maximum hours of storage for iron-air batteries. |
| heating_demand | ||||
| - enable | boolean | {true, false} | true | If true, models exogenous electricity demand for heating. |
| - share | percentage | - | 0.16 | Specifies the share of total heating demand met by electricity. |
| hydrogen_demand | ||||
| - enable | boolean | {true, false} | false | If true, models exogenous electricity demand for hydrogen production. |
| - share | percentage | - | 0. | Specifies the share of total hydrogen demand met by electricity. |
| ci_load | ||||
| - load_path | path | - | data/CI-load.csv | Path to the Eurostat Commercial and Industrial (CI) load input data, used to determine Guarantee of Origin (GO) demand. |
| - load_year | year | - | 2023 | The reference year for the CI load data. |
| - ci_overwrite | ||||
| - - CH | percentage | - | 0.58 | Manually overwritten CI share for Switzerland, as Eurostat data is unavailable. (Source: IEA) |
| - - GB | percentage | - | 0.60 | Manually overwritten CI share for Great Britain, as Eurostat data is unavailable. (Source: IEA) |
clustering
The clustering section defines parameters for network clustering, particularly for temporal resolution in the sector model.
| Parameter | Unit | config.go.yaml |
Description |
|---|---|---|---|
| temporal.resolution_sector | hours | 3H | Sets the temporal resolution for the sector model to 3 hours. |
adjustments
This section applies specific adjustments to component attributes within the network.
In config.go.yaml, adjustments.sector.absolute includes marginal cost additions for DC and electricity distribution grid links, and PHS, li-ion, iron-air, and home battery storage units/stores. These adjustments are implemented to mitigate unintended storage cycles. In config.default.yaml, adjustments.sector.absolute is set to false.
sector
The sector section controls the inclusion of various sector-coupling components.
| Parameter | config.go.yaml |
Description |
|---|---|---|
| co2_network | false | Disables the modeling of the CO2 network. |
| H2_network | false | Disables the modeling of the hydrogen network. |
| gas_network | false | Disables the modeling of the gas network. All are disabled to focus on the electricity network. |
costs
The costs section defines economic parameters for different technologies.
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
| marginal_cost | ||||
| - green_ocgt | €/MWh | - | 223.8 | Marginal cost for green open-cycle gas turbines, not available in PyPSA Technology Data. |
| - cost.adv_firm_tech | €/MWh | - | 13.6 | Marginal cost for advanced firm technologies, not available in PyPSA Technology Data. |
| overwrites | ||||
| - capital_cost | ||||
| - - green_ocgt | €/MW | - | 72790 | Capital cost overwrite for green open-cycle gas turbines. |
| - - adv_firm_tech | €/MW | - | 585153 | Capital cost overwrite for advanced firm technologies. |
| - lifetime | ||||
| - - green_ocgt | years | - | 25 | Lifetime overwrite for green open-cycle gas turbines. |
| - - adv_firm_tech | years | - | 40 | Lifetime overwrite for advanced firm technologies. |
| - emission_prices | ||||
| - - enable | boolean | - | true | Enables the use of emission prices in the model. |
| - - co2 | €/t_CO2 | - | 0. | Sets the price of CO2 emissions. |
strip_network
This entire section is a new configuration in config.go.yaml, designed to interact with scripts/strip_network.py for simplifying the network.
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
| enable | boolean | {true, false} | true | If true, activates the network stripping functionality. |
| merge_load | boolean | {true, false} | true | If true, consolidates and simplifies electricity demand loads, merging auxiliary demands into the main electricity load per bus. |
| snapshots_start | date | [false] | false | Specifies a start date to filter the network's snapshots. Set to false to use the default snapshots.start from the snapshots section. |
| snapshots_end | date | [false] | false | Specifies an end date to filter the network's snapshots. Set to false to use the default snapshots.end from the snapshots section. |
res_target
This entire section is a new configuration in config.go.yaml, used for defining renewable energy targets.
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
system_share_target |
boolean | {true, false} |
false |
If true, sets a system-wide (e.g., EU+) renewable energy share target. |
country_share_target |
boolean | {true, false} |
false |
If true, sets country-specific renewable energy share targets. |
tyndp_data.enable |
boolean | {true, false} |
true |
If true, uses data from the TYNDP (Ten-Year Network Development Plan) for renewable energy share targets. If false, res_shares_overwrite is used. |
tyndp_data.tyndp_scenario |
string | {"National Trends", "Distributed Energy"} |
National Trends |
Specifies the TYNDP scenario to use for renewable energy targets (e.g., "National Trends", "Distributed Energy"). |
res_shares_overwrite.XK |
percentage | - | 0.43 |
Manually overwrites the renewable energy share target for Kosovo (XK) for 2030, as this data is not provided in TYNDP. (Source: https://ember-energy.org/data/global-renewable-power-sector-targets-2030/) |
res_shares_overwrite |
dict | - | (XK: 0.43 and others) |
This dictionary allows manual overwrites for renewable energy shares. To overwrite a system-wide share, "EU+" should be used as the country code. This configuration directly impacts the add_rps_constraints(n, planning_horizons) function in scripts/solve_network.py. |
grid_policy
This entire section is a new configuration in config.go.yaml, used to define categories of energy carriers.
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
| renewable_carriers | list | - | [green_ocgt, adv_firm_tech, offwind, offwind-ac, offwind-dc, offwind-float, onwind, ror, hydro, urban central solid biomass CHP, geothermal, solar, solar-hsat, solar rooftop] | Defines a list of carriers considered as renewable energy sources. Used by add_rps_constraints(n, planning_horizons) in scripts/solve_network.py. |
| clean_carriers | list | - | [green_ocgt, adv_firm_tech,offwind, offwind-ac, offwind-dc, offwind-float, onwind, ror, hydro, urban central solid biomass CHP, geothermal, solar, solar-hsat, solar rooftop, nuclear, allam] | Defines a list of carriers considered as clean energy sources. Used by add_rps_constraints(n, planning_horizons) in scripts/solve_network.py. |
| emitters | list | - | [CCGT, OCGT, coal, lignite, oil] | Defines a list of carriers considered as emitting sources. Used by add_rps_constraints(n, planning_horizons) in scripts/solve_network.py. |
certificate
This entire section is a new and critical configuration in config.go.yaml, directly related to scripts/add_certificate.py and the certificate constraints in scripts/solve_network.py (add_virtual_ppl_matching, add_buffer_matching, and add_virtual_storage_matching).
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
| plant_carriers | list | - | [green_ocgt, adv_firm_tech, offwind, ..., nuclear] | Defines which technology carriers are allowed to participate in the Guarantee of Origin (GO) market. |
| plant_status | list | [new, existing] | [new] | Specifies the age status of power plants eligible for the GO market. Options are new, existing, or both. |
| max_plant_lifetime_as_new | years | 2 | Determines the maximum age (in years) for a power plant to be considered "new" within each planning horizon. | |
| plant_grouping | list | [] or [carrier, status] | [carrier, status] | Defines how virtual carriers are aggregated. This allows for disaggregating generators by attributes like carrier and status, providing detailed information on which technologies contribute to the GO market. An empty list [] would group all virtual carriers together, losing specific carrier/status information. |
| bus_grouping | list | [] or [carrier, status] | [] | Defines how GO supply buses are aggregated. An empty list [] groups all GO supply into one per country. Other options (e.g., [carrier, status]) are possible to further disaggregate supply. |
| aib_filepath | path | str | data/AIB_monthly_data.csv | The file path to the Association of Issuing Bodies (AIB) data, containing historical GO demand statistics. |
| storage_carriers | list | - | [li-ion, iron-air, H2 Store] | Specifies which storage technologies are eligible to participate in the GO market. |
| GO_penalty | €/MWh | - | 1e5 | A safeguard mechanism: a penalty incurred if GO demand cannot be fulfilled by supply, preventing infeasibility in the model. |
| map | list | - | (various coordinates) | This sub-section is solely for visualizing the GO market on PyPSA map plots, defining x and y offsets for supply, demand, and market components. |
Backgroun demand
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
| enable | boolean | {true, false} | false | If true, enables the modeling of background GO demand. |
| scope | string | global | global | Defines the geographical scope of the background GO market. Set to global (EU-wide) because national GO demand can exceed national electricity demand. In theory, this is an EU-wide market allowing certificate trading between participating countries. Not all countries in the model participate in AIB; only those listed in supply_filter.country do. This market is currently not used in our scenarios but can be activated. |
| supply_filter.country | list | - | ['AT', 'BE', ..., 'SK'] | A list of countries whose supply is filtered for the background GO market. |
| supply_filter.status | boolean/string | [false, 'new', 'existing'] | false | A filter for power plant status (e.g., new, existing). false means no filter is applied by status. |
| supply_filter.carrier | boolean/string | [false, 'solar', 'onwind', ...] | false | A filter for power plant carriers. false means no filter is applied by carrier. |
| market_name | string | - | AIB | A suffix for the name of the market. |
| go_profile | string | {"historical", "total_daily_avg", "total", "baseload"} | historical | Defines the load profile of the GO demand (e.g., historical, total_daily_avg, total, baseload). |
| participant | string | {"load", "ci"} | load | Specifies the share of energy matching reference. load refers to the entire grid; ci refers to commercial and industrial sectors only. |
| energy_matching | percent | - | 100 | The percentage of historical GO demand that is required to be matched with certificates. |
| hourly_matching | percent | - | 0 | The percentage of GO demand that must match hourly (vs. buffered). For the AIB market, no hourly matching is required. |
New Demand
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
| enable | boolean | {true, false} | false | If true, enables the modeling of new GO demand. Multiple demand types can coexist in one market. |
| scope | string | {"national", "global"} | national | Defines the geographical scope of the new GO market (national or global). This market is designed to be nationally bounded with hourly matching, with all countries participating in their respective national GO markets. The main scenarios and sensitivities of the project revolve around the configurations listed here. |
| supply_filter.country | boolean/string | [false, 'AT', 'BE', ...] | false | A filter for countries whose supply is considered for the new GO market. false means no filter. This requires bus_grouping to be disaggregated. |
| supply_filter.status | boolean/string | [false, 'new', 'existing'] | false | A filter for power plant status (e.g., new, existing). false means no filter is applied by status. This requires bus_grouping to be disaggregated. |
| supply_filter.carrier | boolean/string | [false, 'solar', 'onwind', ...] | false |
A filter for power plant carriers. false means no filter is applied by carrier. This requires bus_grouping to be disaggregated. |
| market_name | string | - | "" | A suffix for the name of the market. |
| go_profile | string | {"total_daily_avg", "total", "baseload"} | total |
Defines the load profile of the GO demand (total_daily_avg, total, baseload). This determines whether the GO demand follows electricity demand fluctuations, is averaged daily, or remains constant. |
| participant | string | {"load", "ci"} | ci | Specifies the share of energy matching reference (load for entire grid, ci for commercial and industrial sectors only). |
| energy_matching | percent | - | 50 | The percentage of energy matching required for the new GO demand, relative to the participant's load. |
| hourly_matching | percent | - | 90 | The percentage of GO demand that must match hourly. |
overwrite_years
This entire section is a new project-specific configuration in config.go.yaml. Its current purpose is to define year-specific cost overwrites, specifically for reducing the marginal price of green_ocgt in future planning horizons.
| Parameter | Unit | Values | config.go.yaml |
Description |
|---|---|---|---|---|
2025.costs.marginal_cost.green_ocgt |
€/MWh | - | 444.7 |
Marginal cost for green OCGT in 2025. |
2030.costs.marginal_cost.green_ocgt |
€/MWh | - | 371.1 |
Marginal cost for green OCGT in 2030. |
2035.costs.marginal_cost.green_ocgt |
€/MWh | - | 297.5 |
Marginal cost for green OCGT in 2035. |
2040.costs.marginal_cost.green_ocgt |
€/MWh | - | 223.8 |
Marginal cost for green OCGT in 2040. |