Downloads · 30 days
0
Atomattias/BatterySwapAI2026-NoraAI
BatterySwapAI2026-NoraAI is a machine learning model from Atomattias. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as mit.
Participant-authored submission for the BatterySwapAI 2026 Challenge.
Downloads · 30 days
0
Access
Public
Updated Aug 24, 2026
Repo size
1.3 MB
Likes
0
Public
Click a slice to open those files.
.joblib1.3 MB · 91%
From the Hugging Face model README
Participant-authored submission for the BatterySwapAI 2026 Challenge.
Hub model: Atomattias/BatterySwapAI2026-NoraAI
This repository contains everything needed to reproduce the stored models and run inference / plan generation used by the competition runner.
HistGradientBoostingRegressor quantile models
(P10 / P50 / P90) for remaining useful life (RUL).src/simulation/).
Twin code supports policy selection; the competition entry point is
script.py → NoraPlanner.| Path | Role |
|---|---|
script.py | Hugging Face / Docker entry point |
src/features/ | Health-indicator feature extraction |
src/prognostics/ | RUL labels, sklearn quantile training, predictor |
src/scheduling/ | Priority scoring + greedy / hybrid / VRPTW planners |
src/submission/nora_planner.py | Official Planner implementation |
src/simulation/ | Evaluation, digital twin, official metric helpers |
submission/nora_planner.pickle | Pickled planner stub loaded at runtime |
data/processed/models/ | Trained sklearn quantile model + config |
scripts/train_sklearn_submission.py | Train + refresh stored model artifacts |
Dockerfile | Competition container build |
requirements.txt | Declared dependencies (runtime image may ignore extras) |
LICENSE | MIT (participant-authored code) |
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt
# Optional local-only extras (training / dashboards / tests):
pip install -r requirements.dev.txt
Competition dataset (gated): follow organizer instructions for
batteryswapaichallenge/BatterySwapAI-2026-Test-Train (or the public split
mounted by the runner). Locally we expect data under data/real/{public,private,train}
or /tmp/data in the competition image.
scripts/train_sklearn_submission.py. The competition image does not
ship features.parquet; at inference time NoraPlanner extracts
last-window health indicators on the fly from truncated scenario metrics
(src/features/health_indicators.py).Typical local feature build (research pipeline):
# After ingesting raw/official data into data/raw and data/processed
python -m scripts.build_features # if using the full local Makefile pipeline
# or follow Makefile targets: make ingest-real / make features (when available)
The submission model is sklearn-only (competition allowlist friendly).
# Requires local processed features + batteries.csv
python scripts/train_sklearn_submission.py
This writes:
data/processed/models/sklearn_quantile.joblibdata/processed/models/config.joblib (primary: sklearn)submission/nora_planner.pickleEnvironment knobs used by the training script (defaults shown):
SKLEARN_MAX_BATTERIES=200SKLEARN_SUBSAMPLE_EVERY_N=48SKLEARN_MAX_ROWS=30000The runner executes:
python3 script.py
script.py loads NoraPlanner, calls batteryswap_public.utils.make_submissions,
and writes submission.csv.
Environment variables:
| Variable | Default | Meaning |
|---|---|---|
BATTERYSWAP_DATASET_PATH | /tmp/data | Dataset root with split folders |
BATTERYSWAP_SPLITS | public,private | Comma-separated splits |
BATTERYSWAP_SUBMISSION_PATH | submission.csv | Output path |
BATTERYSWAP_PLANNER_PATH | submission/nora_planner.pickle | Optional pickle path |
Local Docker check:
docker build -t batteryswapai-noraai .
docker run --name batteryswapai -v ./data/real:/tmp/data:ro batteryswapai-noraai
docker cp batteryswapai:/app/submission.csv ./docker_submission.csv
Official evaluation only executes plan days inside planning_window_days,
but plans must still list every battery. NoraPlanner schedules a small set of
lowest-RUL batteries inside the window and parks the rest on days after
the window so the plan stays complete without paying early-swap cost on healthy
batteries.
For policy stress-testing / reports (not required by script.py):
# Examples from the research Makefile / scripts
python scripts/run_twin_shootout.py
python scripts/run_twin_calibration.py
python scripts/select_submission_policy.py
See docs/DIGITAL_TWIN.md and docs/PRIORITY_B_SPRINT.md when present in a
full checkout.
Participant code in this repository is MIT (LICENSE).
requirements.txt pins minimum versions. Versions observed in the local
repro environment used to prepare artifacts:
| Package | Version (local) | License (upstream) |
|---|---|---|
batteryswap_public | 0.3.4 | Provided by organizers (competition package) |
scikit-learn | 1.9.0 | BSD-3-Clause |
numpy | 2.5.2 | BSD-3-Clause |
scipy | 1.18.1 | BSD-3-Clause |
pandas | 2.3.3 | BSD-3-Clause |
joblib | 1.5.3 | BSD-3-Clause |
pyarrow | 25.0.1 | Apache-2.0 |
fastparquet | 2026.5.0 | Apache-2.0 |
ortools | 9.15.6755 | Apache-2.0 |
lifelines | 0.30.3 | MIT |
huggingface_hub | 1.28.0 | Apache-2.0 |
pydantic-settings | 2.15.0 | MIT |
structlog | 26.1.0 | Apache-2.0 / MIT (upstream) |
tqdm | 4.70.0 | MPL-2.0 / MIT (upstream) |
Additional packages listed in requirements.txt (e.g. torch, plotly,
polars, statsmodels) may be unused by the sklearn submission path; the
competition Docker note states custom requirement changes may be ignored in
favor of the organizer image allowlist.
Local-only extras (requirements.dev.txt): LightGBM, scikit-survival,
Streamlit, matplotlib, pytest — not required for the HF script.py path.
No external pretrained neural checkpoints. The only stored model is the
sklearn quantile ensemble trained by scripts/train_sklearn_submission.py
and shipped under data/processed/models/.
batteryswapaichallenge/BatterySwapAI-2026-Test-Train and competition
mounts). Access and license terms are those of the challenge organizers;
this repo does not redistribute the raw gated dataset.This repository must not contain passwords, API tokens, private keys, or
.env secrets. If a token was ever exposed via a local git remote URL,
revoke it on Hugging Face and rotate credentials.
Team / HF user: Atomattias
Challenge: BatterySwapAI 2026 (NORA)