Présentation de Keplearn

Keplearn est un moteur de régression symbolique déterministe écrit en Rust. Il lit un fichier TSV ou CSV depuis stdin et renvoie les équations candidates sous forme de JSON. Le binaire est unique, sans dépendances externes, et compilé avec la cible musl pour être entièrement statique. Le programme garantit que le même jeu de données produit exactement le même résultat, octet par octet.

Architecture et algorithme

L’outil explore des chaînes de réductions inversibles appliquées à la colonne cible : division d’un facteur ajusté, inversion de transformations (log, sqrt, arcsin), puis ajustement d’un nœud affine. Cette procédure se répète jusqu’à une profondeur fixe. À chaque nœud, il tente un ajustement terminal via une régression log‑linéaire, un monôme k‑terme parcimonieux ou des formes composites (normes L2, rationnels, fonctions trigonométriques). Les candidats sont classés sur un hold‑out interne de 25 % avec une pénalité de complexité MDL.

Les constantes obtenues sont snapées aux rationnels proches ainsi qu’aux multiples de π, e et √2. Un passage de vérification ne conserve le snap que si le modèle maintient son score sur le hold‑out et l’ensemble complet, assurant ainsi la robustesse de la simplification finale.

Performances sur le benchmark SRBench

Dans le benchmark standard SRBench, Keplearn atteint un taux de solution symbolique exacte de 64,7 %, dépassant le meilleur précédent, AIFeynman, qui se situe à 55,8 %. Sur les 138 jeux de données « black‑box », le R² médian de test est proche de zéro (≈ ‑0,003), reflétant la focalisation de Keplearn sur les lois analytiques plutôt que sur l’ajustement de courbes générales.

En conditions de bruit nul, la moitié de la suite Feynman se résout en moins d’une seconde, grâce à la sortie « exact‑exit ». Sous bruit, les ajustements s’exécutent jusqu’à la limite de --timeout (60 s par défaut), mais restent compétitifs en consommation de calcul.

Déploiement et utilisation

Des exécutables précompilés sont fournis pour macOS (universel Apple Silicon et Intel), Windows (x86_64) et Linux (x86_64, entièrement statique). L’utilisation se fait en ligne de commande :

./keplearn --target force --top-k 1 --pretty --out laws.json < gravity.tsv

Le résultat JSON typique est :

{
  "results": [
    {
      "expr": "((x1**(1))*(x2**(1))*(x3**(-2)))",
      "r2": 1.0000000000,
      "search_r2": 1.0000000000,
      "holdout_r2": 0.9999999999998754,
      "scale": 0.9999984680738088,
      "offset": 0.000011830325937959667,
      "columns": [0,1,2],
      "factor": "direct",
      "model": "((x1*x2)*((x3)**(-2)))"
    }
  ],
  "time_ms": 0,
  "n_expressions": 0,
  "n_evaluated": 0,
  "stopped_by": "exact_exit"
}

Le modèle affiché correspond à la loi physique force = m1 * m2 / r**2. Keplearn est distribué sous licence MIT, ce qui facilite son intégration dans des pipelines de recherche ou de production.