Models / PyPSA-PL — Poland's Energy Transition

Sector-coupled model of the Polish energy system — a 2024 base year validated against ENTSO-E generation, plus a cost-optimal decarbonisation pathway to 2040.

License: MIT
Repository
licenseMITproblemLP

Overview

A model of the Polish energy system built on PyPSA-PL, the open model developed by Instrat. Unlike a power-only market model, PyPSA-PL is sector-coupled — it co-optimises electricity, district and decentralised heat, hydrogen, and light-vehicle mobility on a 16-voivodeship nodal network (v3.1). Poland's power system is coal- and lignite-heavy today, with fast-growing wind and solar; the model captures that starting point and the cost-optimal path away from it.

This page presents the model as a four-point timeline at nodal resolution:

  • Base 2024 — a historical year with observed installed capacities, validated against ENTSO-E actual generation. This is the credibility anchor.
  • Main 2030 / 2035 / 2040 — the cost-optimal Polish energy system under Instrat's Main scenario (instrat_ambitious+trade) for each horizon year: a forward decarbonisation pathway, not a hindcast.

How it's built

A reproducible overlay pipeline (pypsa-pl-modelverse) pins an upstream PyPSA-PL commit (v3.1.0, unmodified), drives its in-process Python build/solve, and exports each variant to two formats that represent the same network: a solved PyPSA .nc and a Convexity .db. The forward scenarios use Instrat's own scenario definitions; the base year applies the model's historical capacities while leaving dispatchable thermal free to merit-order (see Validation). Solved with the open-source HiGHS solver (interior point + crossover).

Validation

For the 2024 base year, modelled generation by fuel is compared against ENTSO-E Transparency — Actual Generation per Production Type for the Polish bidding zone (see the Validation tab). Every gate carrier lands within band, including the genuinely free, merit-ordered thermal fleet:

  • Hard coal 46.6 vs 53.9 TWh, lignite 48.8 vs 33.5 TWh, gas 11.0 vs 19.4 TWh — coal and lignite together supply ~61% of generation, as in reality.
  • Wind (24.5 vs 22.6 TWh) and solar (15.3 vs 17.8 TWh) are held to their historical annual energy, so they match by construction; the thermal merit order is the independent test, and it passes.

The honest caveat: the model puts a little too much cheap lignite ahead of gas (lignite runs high, gas low) — a marginal-cost calibration signal, but comfortably inside the validation band. Wind and solar matching is not an independent check.

Downloads

  • pypsa-pl-…​.nc — the solved PyPSA network: the full sector-coupled topology (power, heat, hydrogen, mobility), dispatch, and nodal prices. Free with sign-in.
  • pypsa-pl-…​.db — a Convexity export of the same sector-coupled network; open it directly in Convexity to explore the nodes, carriers, and dispatch interactively. Requires a licence.

Limitations

  • The base year leaves thermal dispatch free so the merit order can be validated, rather than pinning all generation to history as PyPSA-PL's stock historical configuration does — a deliberate choice that makes the validation meaningful rather than circular.
  • The forward years (2030–2040) are scenario projections, not validated against actuals (none exist); read them as cost-optimal outcomes under the Main assumptions, not forecasts.
  • The transmission network is solved as a transport model (thermal line limits, no Kirchhoff/voltage constraints), so the .db is for dispatch and topology exploration, not security analysis.
  • Renewable availability uses a representative weather year; wind/solar/CHP and cross-border trade in the base year are constrained to observed annual energy.