Heimdall: Only the Safe Shall Pass
Model card for the Heimdall thesis (BSc Software Engineering, SDU Sønderborg, with Danfoss A/S as industrial partner) by Phongsakon Mark Konrad and Tim Lukas Adam. This repository holds the forecaster checkpoints and serves as the project landing page.
The power grid keeps one promise every second, that supply matches demand, and the balancing market is where that promise is settled in real time. As machine learning models and large language models start to take part in this market, they bring failure modes of their own. A forecasting model hides its own uncertainty, and a language model can hallucinate. Heimdall is the safety guard that sits between an autonomous bidder and the grid. It uses conformal prediction to turn an uncertain price forecast into a promise the operator can act on, that an accepted bid stays above their loss limit with the coverage they asked for.
We run three kinds of bidder behind the guard, a deterministic chooser, a single language model, and a multi-persona society. We report honestly that the language model does not beat the deterministic baseline on profit. What it adds is auditability, because every accepted and rejected bid carries its reasoning, and steerability, because the society answers to plain-language instructions. The guard holds its coverage to within a fraction of a percent of the 90 percent target, including straight through the March 2025 rule change that reshaped the market. Every number reproduces from real DK1 panels and real model traces.
Where things live
| Artifact | Location |
|---|---|
| Source code | https://github.com/phomarkon/heimdall-src |
| Forecaster checkpoints | this repository |
| Data bundle (CC-BY-4.0) | DVC, reproducible from public sources |
Forecaster checkpoints
The weights predict 15-minute imbalance prices for the Nordic mFRR EAM in
bidding zone DK1 under the post-2025-03-04 single-price regime. The reproducible
validation and test metrics, predictions, leaderboard, and training logs live
in the source repository (phomarkon/heimdall-src).
Per-model layout
<F-id>/seed-<n>/
model.pt | model.npz # weights
stats.pkl # train-set normalization (mean/std)
config.json # architecture + training config
Forecaster zoo
| ID | Family | Notes |
|---|---|---|
| F0 | Seasonal AR(24) | deterministic baseline |
| F1 | Quantile LightGBM | gradient-boosted quantile trees |
| F2 | Bayesian Linear Regression | closed-form posterior |
| F3 | Deep Ensemble (5x F7) | aggregation over F7 seeds (ADR-0006) |
| F3-Lite | LSTM DeepAR | appendix, original day-3 implementation |
| F4 | MC-Dropout transformer | K=30 over F7 backbones |
| F7 | patchTST + quantile + split-CP | univariate workhorse |
| F8 | patchTST + online ACI | regime-shift-aware, default in production |
| F9 | TimesFM-2.0 zero-shot | foundation model, deterministic |
| F10 | Chronos-Bolt zero-shot | foundation model, appendix |
| F11 | PriceFM-shaped surrogate | 8-layer x 192-d patchTST, no public PriceFM weights |
Reproduce
git clone https://github.com/phomarkon/heimdall-src
cd heimdall-src
uv sync --frozen
uv run dvc pull
Forecaster checkpoints hydrate from this repository on first use. The full
runbook is in docs/REPRODUCE.md.
License
Apache 2.0.
Citation
@misc{heimdall2026,
title={Heimdall: Only the Safe Shall Pass},
author={Konrad, Phongsakon and Adam, Tim Lukas},
year={2026},
note={BSc thesis, SDU S{\o}nderborg; industrial partner Danfoss A/S.}
}