BSEBench.
Édition vivante · M2.C Protocol-layer benchmark · SOC / SOH Hetzner CCX33
Volume 0 · Tirage M2.C · 11 filtres × 4 chimies

Estimer l'état
d'une cellule lithium-ion
de façon reproductible.

BSEBench est une couche de protocole pour comparer onze estimateurs SOC/SOH (familles ECM, Robust, Machine Learning) sur quatre chimies ouvertes (NCA, LFP, LCO, NMC811). Chaque exécution est reproductible via un container Docker épinglé, scorée par un BSE‑Score non‑linéaire à amortissement catastrophique, et historisée dans une base SQLite indexée par SHA git.

I.
Figure 1 — pipeline canonique

De la cellule au classement, sept étapes auditées.

Chaque flèche conserve la provenance : SHA-256 du parquet, SHA git du runner, conteneur Docker épinglé, manifest pré-enregistré. Aucune flèche n'est négociable au run-time.
01
Datasets
4 chimies, 28 panels, Tier-2 Parquet
02
Adapter
.mat → Parquet canonique BPX
03
Sélecteur
chimie × T° × profil × filtre
04
11 filtres
ECM (6) · Robust (3) · ML (2)
05
4 catégories
Performance · Latency · Compute · Robustness
06
BSE-Score
moyenne géométrique + damping
07
Classement
SQLite, Wilcoxon paire-à-paire
Fig. 1 — Pipeline BSEBench. Les opérations (02) à (06) s'exécutent dans le conteneur ghcr.io/bsebench-org/runner pour garantir la comparabilité cross-submitter. (01) publie les recettes sur Hugging Face Hub (Tier-2). (07) persiste dans /opt/bsebench/db/runs.sqlite3 avec flag official.
II.
Équations canoniques · pré-enregistrées

Le score n'est pas un secret — il est dans le code.

Trois équations transforment une trajectoire SOC en classement. Toutes dérivées du même YAML versionné bse_score_weights_v1.0.0.yaml.
$$\text{BSE} \;=\; 100 \,\cdot\, \prod_{c \in C} S_c^{\,w_c} \,\cdot\, \exp\!\left(-\lambda \,\cdot\, \max\!\left(0,\; S^{*}_{\min} - \min_{c} S_c\right)\right)$$
Synthèse non-linéaire : moyenne géométrique pondérée par catégorie, multipliée par un amortissement exponentiel qui mord dès qu'une catégorie passe sous le seuil $S^{*}_{\min}$. Un déséquilibre catastrophique collapse le score — un seul filtre médiocre sur une dimension fait chuter l'ensemble.
  • $C = \{\text{performance, latency, compute, robustness}\}$
  • $w_c \in \{0{,}40,\;0{,}20,\;0{,}20,\;0{,}20\}$ — poids pré-enregistrés (K-022)
  • $S^{*}_{\min} = 0{,}30$ ; $\lambda = 5{,}0$
Éq. 1
$$S_c \;=\; \exp\!\left(-\dfrac{\,\text{raw}_c\,}{\,\text{scale}_c\,}\right)$$
Normaliseur sous-score (lower-is-better) : mappe une métrique brute vers $[0, 1]$ via décroissance exponentielle. Propriétés : $S(\text{raw}=0) = 1$ ; $S(\text{raw}=\text{scale}) = 1/e \approx 0{,}368$ ; $S(\text{raw} \to \infty) = 0$.
  • Performance : $\text{scale} = 0{,}05$ RMSE SOC (= 5 %)
  • Latency : $\text{scale} = 100$ ms p99
  • Compute : $\text{scale} = 60$ s wall-clock
  • Robustness : $\text{scale} = 0{,}02$ Δ RMSE sous biais 5 mV
Éq. 2
$$\text{SOC}_{\text{ref}}(t) \;=\; \text{SOC}_0 \;+\; \dfrac{1}{Q_{\text{cell}} \cdot 3600}\int_{0}^{t} I(\tau)\,d\tau$$
Référence SOC par comptage coulombique. Déterministe, mais non-validée indépendamment — pour les traces aging longues (Severson 44 jours, Oxford 1,75 an) la dérive accumulée est de plusieurs pourcents. La reconstruction Monte-Carlo + PyBaMM (M2 truth) remplacera cette référence en publication v1.0.
  • $Q_{\text{cell}}$ — capacité nominale par chimie (NCA 2,9 Ah ; LFP 1,1 Ah ; LCO 0,74 Ah ; NMC811 3,5 Ah)
  • $\text{SOC}_0 = 0{,}99$ — au démarrage de chaque trace
Éq. 3
III.
Table III · onze estimateurs · trois familles

Un seul contrat d'interface : step(t, V, I, T) → SOC.

Tous les filtres exposent la même signature et passent par le même validate_step_output_contract : SOC borné dans $[0,1]$, tension prédite finie. Les hyperparamètres surchargeables sont listés dans le builder /new.
Physical (ECM) Robust observers Machine learning
01 · ECM
EKF
state_dim 4 · R 1e-1
Filtre de Kalman étendu sur Thévenin 1-RC + augmentation rho₁. Référence historique, latence basse, sensible au tuning ECM.
02 · ECM
UKFDef
state_dim 4 · σ-points
Unscented KF. Mieux que l'EKF sur non-linéarités fortes ; même paramétrage ECM, coût modeste.
03 · ECM
DUKF
state_dim 4 · dual
Dual UKF — estimation conjointe état + paramètres. Plus lourd mais auto-corrige les ECM mal calibrés.
04 · ECM
AUKFSR
state_dim 4 · sqrt
Adaptive UKF Square-Root. Adapte $Q$ en ligne, stable numériquement, recommandé sur chimies inconnues.
05 · ECM
FOEKF
state_dim 4 · fractional
Fractional-order EKF. Capture les dynamiques diffusives (Warburg) via dérivées fractionnaires.
06 · ECM
JUKFV6B
state_dim 4 · joint v6b
Joint UKF v6b. Implémentation héritée bsebench-filters, ensemble member par défaut.
07 · ROBUST
H
state_dim 4 · γ = 1,5
Observer H-infini. Garantit une borne sur l'erreur d'estimation sans hypothèse gaussienne. Tolérant aux mismatchs ECM.
08 · ROBUST
SOSMO
state_dim 4 · sliding
Second-Order Sliding-Mode Observer. Convergence en temps fini, chattering atténué.
09 · ROBUST
ICRPF
state_dim 4 · particle
Iterative Cubature Rao-Blackwellised Particle Filter. Coûteux mais robuste sur multi-modal.
10 · ML
GRULight
state_dim 5 · h = 4 · non-entraîné
Baseline GRU déterministe (Phase 24). Latence très basse. Entraînement PyTorch reporté à M2.C.
11 · ML
EnsembleMeta
state_dim 4 · α = 0,5
Méta-ensemble à pondération inverse-variance des 6 ECM. Fragile out-of-box ; en cours d'investigation.
IV.
Errata · disclosures techniques

Ce que cette édition ne prouve pas.

Chaque limitation est tracée à un identifiant KAIZEN du dépôt bsebench-runner/docs/KAIZEN_LOG.md. Lecture obligatoire avant toute citation académique.

Avertissements pré-publication

Les classements affichés sur ce site sont une démonstration d'infrastructure, pas une revue par les pairs. Les filtres ECM utilisent une calibration first-pass ; les références SOC sont reconstruites par comptage coulombique non-vérifié. Lisez les caveats.

K-006
Référence SOC non-validée
La référence SOC vient du comptage coulombique sur la capacité nominale. Sur les traces aging longues (Severson 44 j, Oxford 1,75 an), la dérive accumulée atteint plusieurs pourcents.
Mitigation : M2 truth reconstruction (PyBaMM Monte-Carlo) en publication v1.0.
K-019
3/4 datasets sans truth signal
Les parquets Severson, Oxford, Empa ont une colonne soc_truth à 100 % NaN. La pipeline retombe sur K-006 comme fallback unique.
Mitigation : la démo reste opérationnelle ; le RMSE n'est pas comparable cross-chemistry.
K-022
Poids BSE-Score pré-enregistrés
Les poids $w_c$ (40/20/20/20), $S^{*}_{\min}$ et $\lambda$ sont gelés dans bse_score_weights_v1.0.0.yaml. Toute modification requiert une RFC Steering Committee.
Bénéfice : impossible de tuner les poids per-run pour favoriser un filtre.
K-024
Variance d'exécution (n = 1)
Chaque run est unique par défaut. Les métriques wall-clock (runtime, latency p99) varient run-to-run de quelques pourcents selon la charge OS.
Mitigation : passer en n ≥ 3 avec bootstrap d'intervalles de confiance (M2.A).
« Le bon benchmark révèle l'inconfort.
Celui qui ne révèle que le confort n'est pas un benchmark. »
V.
Annexe — runs récents · persistés en SQLite

Que viennent de calculer les autres lecteurs ?

Cliquez une ligne pour voir la matrice détaillée, les trajectoires SOC, les formules substituées avec valeurs numériques et le log d'événements.
Identifiant Daté Chimie Matrice Statut BSE max Conv / Total
Chargement de la table…