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.}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support