H2EU2050 is an equilibrium model of the European hydrogen system in 2050.
The model is formulated as a mixed complementarity problem (MCP) and captures system-wide interactions across Europe.
It supports two market structures: perfect competition and Cournot (strategic) behaviour.
This repository contains the model implementation used in my Bachelor thesis:
Germany's Role in the European Green Hydrogen Market in 2050: A Market Model Approach to Quantifying the Impact of Different Market Structures.
Requirements: Julia ≥ 1.11 (tested with 1.11.7).
Dependencies are specified in Project.toml and pinned in Manifest.toml.
git clone https://github.com/EdgarDevNat/H2EU2050.git
cd H2EU2050
julia --project -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()'
julia --project scripts/run_h2eu2050.jlRun outputs are stored in out/.
H2EU2050/
├─ data/ # Model input CSVs
├─ out/ # Default output directory (runtime files)
├─ results_s1/ # Organized results: Scenario 1 (perfect competition)
├─ results_s2/ # Organized results: Scenario 2 (Cournot behaviour)
│
├─ scripts/
│ └─ run_h2eu2050.jl # Entry script (activates env, runs model)
│
└─ src/
├─ H2EU2050.jl # Package entry (module definition)
├─ common/ # Paths, IO helpers, utilities
├─ load_data/ # CSV loaders, data pre-processing
├─ model/ # Model construction, KKT/MCP formulation, solver
├─ analytics/ # Extraction, summarisation and saving of results
└─ validation/ # Data & model validation tools
├─ validate_datafiles.jl
├─ validate_modeldata.jl
└─ validation_utils.jl
The entry script scripts/run_h2eu2050.jl activates the project environment, loads the model, executes it, and writes summary output.
using Pkg
Pkg.activate(joinpath(@__DIR__, ".."))
using H2EU2050
res = H2EU2050.run()
out = H2EU2050.Analytics.summarize_and_save(
res.status, res.model, res.vars, res.sets;
prefix="results", top=5, verbose=:short
)Internally, H2EU2050.run():
- validates all input CSVs,
- loads all input CSVs,
- builds the MCP using JuMP, Complementarity.jl, and PATHSolver,
- solves the system,
- returns the model status, JuMP model, variables, and index sets.
Scenario results are organised into:
results_s1/— Perfect competitionresults_s2/— Cournot oligopoly
If you use this model in academic work, please cite this repository:
@misc{H2EU2050,
author = {Natzke, Edgar Valentin},
title = {H2EU2050: An MCP model of Europe's hydrogen system in 2050},
url = {https://github.com/EdgarDevNat/H2EU2050},
version = {Version 1.0.0},
year = {2025},
month = {11}
}H2EU2050 is licensed under the MIT License. See LICENSE.
Contact:
natzke@campus.tu-berlin.de