This repository contains open-source operational optimization models of the Baltic power system (Estonia, Latvia, and Lithuania) developed during the SignAture project (2022–2025) using the SpineOpt modelling framework and Spine Toolbox.
The repository includes two main Spine Toolbox projects:
| Project | Description | Associated Publication |
|---|---|---|
Baltic_model_validation_run |
Calibration and validation model using 2020 historical data | Baltputnis et al. (2024) |
Baltic_model_future_scenarios |
Future scenarios for 2050 with high renewable penetration | Baltputnis & Broka (2023) |
Both projects contain complete SpineOpt models with SQLite input databases ready to be executed with Spine Toolbox. Output databases are provided as empty templates due to file size constraints—full results are available on Zenodo.
K. Baltputnis and Z. Broka, "Future scenarios of the Baltic power system with large penetration of renewables," 2023 19th International Conference on the European Energy Market (EEM), Lappeenranta, Finland, 2023, pp. 1-7.
DOI: 10.1109/EEM58374.2023.10161795
K. Baltputnis, D. Žalostība, J. Teremranova, P. Pazāns, and Z. Broka, "Refinement and Calibration of Optimization Models for Baltic Region Energy System Development," 2024 IEEE 65th International Scientific Conference on Power and Electrical Engineering of Riga Technical University (RTUCON), Riga, Latvia, 2024, pp. 1-6.
DOI: 10.1109/RTUCON62997.2024.10830801
The input and output .sqlite databases for both studies are available on Zenodo: https://doi.org/10.5281/zenodo.18442640
Both models are developed in SpineOpt, a flexible open-source energy system modelling framework that allows building models using basic building blocks:
- Nodes: Represent geographical/logical locations (each Baltic state is treated as a single node (as an electricity market area), there are seperate nodes also for water reservoirs etc.)
- Units: Power generation assets (wind, solar, hydro, thermal, storage (conversion) etc)
- Connections: Links between nodes with one or bidirectional transfer capacities (water movement between upstream-downstream reservoirs, transmission interconncetions, etc.)
The models are solved as linear programming (LP) / mixed-integer linear programming (MILP) problems using the Clp / Cbc solvers, with the objective of minimizing total operational costs including:
- Power plant operational costs (fuel, O&M, emissions, start-ups)
- Electricity import costs
- Revenue from electricity exports (negative cost)
The market model covers the three Baltic states with the following representation:
┌─────────┐
│ FINLAND │
└────┬────┘
│ EstLink 1&2 (1016 MW)
┌────┴────┐
│ ESTONIA │
└─────────┘
│ EE-LV (1500 MW)
┌─────────┐ ┌────┴────┐ ┌─────────┐
│ SWEDEN ├────┤ LATVIA ├────┤ RUSSIA**│
└─────────┘ └────┬────┘ └─────────┘
NordBalt (700 MW) │ LV-LT (1500 MW)
┌────┴────┐ ┌─────────┐
│LITHUANIA├────┤BELARUS**│
└────┬────┘ └─────────┘
│ LitPol Link (500 / 1700* MW)
┌────┴────┐
│ POLAND │
└─────────┘
*After Harmony Link construction (future scenarios)
**Before desynchronization (i.e., for the 2020 validation scenario)
| Technology | Countries | Notes |
|---|---|---|
| Wind (onshore/offshore) | LT, LV, EE | Time-variable production profiles |
| Solar PV | LT, LV, EE | Time-variable production profiles |
| Hydropower | LV (Daugava cascade), LT | |
| Pumped Storage | LT (Kruonis), EE (planned) | Cyclic storage constraints applied |
| Biomass/Biogas | LT, LV, EE | Includes CHP plants |
| Natural Gas | LT, LV | CHP plants with heat demand dependency |
| Oil Shale | EE | Estonia's primary fossil fuel source |
| Peaker Plants | LT, LV, EE | 500 MW per country (future scenarios) |
The three large HPPs on the Daugava River (Pļaviņas, Ķegums, and Rīga HPP) are modeled with:
- Individual reservoir storage capabilities
- Time-delayed hydraulic linkage between cascade plants
- Water inflow profiles derived from hydrological measurements
- Cyclic constraints ensuring end-of-horizon storage equals initial storage
Latvian natural gas CHPs (Riga CHP-1, CHP-2.1, CHP-2.2) include:
- Temperature-dependent efficiency during heating season
- Cogeneration mode when heating demand is sufficient
- Condensing mode operation during summer
Purpose: Calibrate and validate the model against 2020 historical data
Key characteristics:
- Reference Year: 2020
- Temporal Resolution: Hourly (8760 hours)
- Optimization Horizon: 2-week rolling windows
Input data sources:
- ENTSO-E Transparency Platform (generation, cross-border flows)
- Eurostat (energy statistics)
- Latvian Environment, Geology and Meteorology Centre (hydrology data)
- EEX (ETS emission prices)
Validation metrics:
- Electricity production by source type
- Cross-border trade flows
- Net import/export positions
Key results:
- Overall Baltic net position deviation: ~1.17% of total annual demand
- Successful reproduction of seasonal HPP operation patterns
- Accurate cross-border flow directions and magnitudes
Purpose: Explore hypothetical 2050 scenarios with high renewable penetration
Key characteristics:
- Target year: 2050
- Temporal resolution: Hourly
- Optimization horizon: 2-week rolling windows (~30 min solve time)
Base scenario assumptions:
| Parameter | Value |
|---|---|
| Total Wind Capacity | 6 GW (50% onshore, 50% offshore) |
| Total Solar Capacity | 2 GW |
| Peaker Capacity | 1.5 GW (500 MW per country) |
| New Estonian PSHPP | 480/500 MW, 6 GWh storage |
| Kruonis 5th Unit | +225 MW |
Electricity demand projections (2050):
| Country | Annual consumption (TWh) | Peak demand (GW) |
|---|---|---|
| Lithuania | 11.25 | 3.48 |
| Latvia | 9.60 | 1.58 |
| Estonia | 21.32 | 1.99 |
Scenarios analyzed:
| Scenario | Description |
|---|---|
| Base | Reference 2050 scenario |
| Perfect Interconnections | No outages/capacity reductions |
| Demand Response (DR) | 50% reduction in demand std. deviation |
| Extra Storage | Doubled new PSHPP capacity |
| No New Storage | No new PSHPP |
| Dry Year | 50% reduction in Daugava inflow |
| Wet Year | 50% increase in Daugava inflow |
Key findings:
- Only 0.02% RES curtailment in Base scenario
- Average electricity price: €145/MWh (highly volatile)
- Interconnections crucial for system adequacy (–44.9% price with perfect availability)
-
Spine Toolbox (latest version preferable, last tested on 0.10.5)
- Download: https://github.com/spine-tools/Spine-Toolbox/releases
- Documentation: https://spine-toolbox.readthedocs.io/
-
Julia (version 1.8 or later)
- Download: https://julialang.org/downloads/
-
SpineOpt.jl
- Installation: In Julia REPL:
using Pkg Pkg.add("SpineOpt")
- However, it is preferable to follow the full Getting Started documentation for SpineOpt: https://spine-tools.github.io/SpineOpt.jl/latest/getting_started/installation/
-
Solvers
- Installation: In Julia REPL (in the relevant environment):
using Pkg Pkg.add("Clp")
using Pkg Pkg.add("Cbc")
In principle, you can use any solver (by editing the solver properties in the input database through Spine DB Editor), however, the papers where produced using these solvers, and they are currently selected in the DB.
-
Clone this repository:
git clone https://github.com/flpp-signature/Baltic-Model.git cd baltic-model -
Open Spine Toolbox
-
Open a project:
- File → Open Project
- Navigate to either
Baltic_model_validation_runorBaltic_model_future_scenarios - Select the
.spinetoolboxfolder
-
Open the project in Spine Toolbox
-
Review the workflow:
- The DAG (Directed Acyclic Graph) shows the data flow
- Input databases → Run SpineOpt → Output databases
-
Execute the workflow:
- Click "Execute" (
▶️ ) or press F5 - Monitor progress in the Event Log
- Click "Execute" (
-
Analyze results:
- Results are written to the output SQLite database
- Use Spine DB Editor to explore outputs
- Export to CSV/Excel for further analysis
- Open
Baltic_model_validation_runproject - Execute the workflow
- Compare outputs with:
- ENTSO-E Transparency Platform data
- Eurostat energy statistics for 2020
- Open
Baltic_model_future_scenariosproject - For the Base (MAIN) scenario: Execute as-is
- For sensitivity analyses: Use the Scenario filter to run the scenarios of interest:
- Demand: [#]_DEM_m[x] or [#]_DEM_p[x], denoting respectively the reduction or increase in demand compared to base (–50..+50%)
- Wind capacity: [#]_VES denoting modified wind unit capacity scenarios (50%–200%)
- Solar capacity: [#]_SES denoting modified solar unit capacity scenarios (50%–200%)
- For alternative scenarios: Select the scenarios of interest:
- Perf_int: Remove outage profiles
- Dry/Wet_year: Scale
inflowparameter (±50%) - No_store: No new storage
- Extra_store: doubled new storage
- Isol: operation in island mode for the Baltic States
