|
Download REPRODUCIBILITY.md from thibautforest/BatterySwapAI2026-Example: direct link, hf CLI and curl.
- Browser
- Download file 4.91 kB
-
https://huggingface.co/thibautforest/BatterySwapAI2026-Example/resolve/main/REPRODUCIBILITY.md
- Command line
-
hf download hf://thibautforest/BatterySwapAI2026-Example/REPRODUCIBILITY.md
-
curl -L -o REPRODUCIBILITY.md https://huggingface.co/thibautforest/BatterySwapAI2026-Example/resolve/main/REPRODUCIBILITY.md
4.91 kB
| # Reproducibility | |
| This document identifies the submitted version(s) and the exact pipeline that | |
| reproduces every trained or stored artifact in this repository, per the | |
| competition rules. | |
| ## Submitted commits | |
| The final submission is selected in the competition portal from publicly | |
| scored versions of this repository. Publicly scored versions relevant to the | |
| selection: | |
| | commit | public score | configuration (env defaults at that commit) | | |
| |---|---|---| | |
| | `62e9d91` | **1480.85** | primary selection — order .50 logbag + .30 Wiener + .20 gapHGB, alpha 1.4, planner split_days=3 / timing_weight=2.0 | | |
| | `354fd2d` | 1495.92 | not selected — order re-weight .50/.20/.30 (refuted by the public score; reverted at head) | | |
| | `4c93883` | 1575.31 | fallback — same ordering, alpha 1.0, planner split_days=7 / timing_weight=1.0 | | |
| | `71bfff2` | 1583.11 | not selected — alpha 1.0, planner split_days=3 / timing_weight=2.0 (equivalent to `60d65da`) | | |
| | `e4745d2` | 1594.89 | not selected — warmup gate ON (refuted by the public score) | | |
| The exact submitted commit is the one recorded in the competition portal at | |
| selection time; unless stated otherwise there, it is `62e9d91`. | |
| ## Pipeline: what is trained, and when | |
| The scored entry point is `script.py`, which calls | |
| `batteryswap_example/submit.py:main()`. **No pre-trained model is used on the | |
| primary path.** All estimators (bagged logistic RUL model, Wiener | |
| first-hitting-time model, gap-feature HistGradientBoosting order source) are | |
| fit at submission run time, inside the evaluation container, from the dataset | |
| provided to the run. The submitted model is therefore fully specified by the | |
| code at the submitted commit plus the configuration below — there is no | |
| training step to reproduce separately for the primary path. | |
| Determinism: every estimator is seeded (`random_state=0` throughout | |
| `submit.py`/`models_cv.py`; ancillary sampling uses | |
| `numpy.random.RandomState(0)`). Given the same dataset and the pinned | |
| competition environment (`/app/env` in the `huggingface/competitions` image), | |
| repeated runs emit an identical `submission.csv`. Defensive fallbacks exist | |
| (on failure or budget overrun a split degrades to a simpler static fit, with a | |
| log line); all publicly scored runs of the commits above completed on the | |
| primary path (leaderboard components invert to integer swap/day counts | |
| consistent with it). | |
| ## Configuration and seeds | |
| All dials are environment variables read in `batteryswap_example/submit.py` | |
| with in-repo defaults. The Dockerfile sets only `BATTERYSWAP_SPLITS` and | |
| `BATTERYSWAP_SUBMISSION_PATH`; **the env defaults in the code at the | |
| submitted commit are the submitted configuration** — no external | |
| configuration files or overrides are used. Random seeds are fixed in code | |
| (seed 0 everywhere); no seed is supplied at run time. | |
| ## Exact reproduction commands | |
| ```bash | |
| git checkout <submitted-commit> # e.g. 4c93883 | |
| docker build -t batteryswapai-2026-example . | |
| docker run --name batteryswapai -v ./dataset:/tmp/data \ | |
| batteryswapai-2026-example \ | |
| bash -c "/app/env/bin/python3 script.py && /app/env/bin/python3 -m batteryswap_public.metric" | |
| docker cp batteryswapai:/app/submission.csv ./submission.csv | |
| ``` | |
| `dataset/` must contain the official competition dataset (not redistributed | |
| here; see THIRD_PARTY_NOTICES.md). `BATTERYSWAP_SPLITS` defaults to `train`; | |
| the scoring system sets its own splits. | |
| ## Stored artifact: `batteryswap_example/planners/best.pickle` | |
| - sha256: `1d263e1282560dc608868cb9ce3360007c2230b360bd4ea272b260bd3b08b0d0` | |
| - Role: **fallback only.** It is loaded exclusively if the run-time-fitted | |
| path fails for a split; it does not contribute to the primary scored | |
| output. | |
| - Provenance: produced by `python batteryswap_example/train.py` (which fits | |
| the legacy `OrderedPlanner` RUL model, seeded, and writes this path) run | |
| inside the Docker environment above, at commit `4fb1dc8`. Re-running that | |
| command at that commit in that environment reproduces an equivalent | |
| artifact; equivalence should be verified on emitted plans rather than | |
| pickle byte-identity (pickle serialization is not guaranteed byte-stable | |
| across library builds). Note: running `train.py` overwrites this file. | |
| ## Verification | |
| 1. Run the Docker commands above at the submitted commit; the container | |
| prints the official metric for the chosen split via | |
| `batteryswap_public.metric`. | |
| 2. Cross-check against the public leaderboard scores in the table above for | |
| the corresponding commits. | |
| 3. The internal cross-validation harness reproduces the model-selection | |
| number at the repository head: from the repo root with the dataset in | |
| place, `python -m batteryswap_example.cv cand ft2a10` → 1541.3 | |
| (building-grouped 5-fold out-of-fold cost, mean over 48 scenarios). | |
| Full experiment provenance for every modeling decision is recorded in | |
| `EXPERIMENTS.md` (phases 1–69) and `agent_reports_bgkf/`. | |