Crédits du moteur et résultat de l'étape 0a.3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-02 13:58:01 +01:00
co-authored by Claude Opus 5.5
parent a90f8ac9bf
commit 7e2f9d4ad8
2 changed files with 56 additions and 8 deletions
+13 -6
View File
@@ -8,19 +8,26 @@ Les contenus pédagogiques (leçons, textes) sont sous licence CC BY-SA 4.0.
- **GNU Backgammon** — https://www.gnu.org/software/gnubg/
Copyright © les auteurs de GNU Backgammon. Licence GPLv3 ou ultérieure.
Ustagammon s'appuie entièrement sur son moteur pour les règles, les coups,
le videau et les évaluations.
le videau et les évaluations. Copie non modifiée de son cœur dans
`engine/gnubg/` (commit 14b6798 ; liste dans `engine/gnubg/PROVENANCE.md`),
avec ses poids `gnubg.weights` dans `engine/data/`.
- **Table d'équité de match Kazaross-XG2** (`engine/data/Kazaross-XG2.xml`),
Copyright © 2011 Neil Kazaross, transcrite pour gnubg par Michael Petch ;
distribuée avec gnubg, copie libre sous réserve de garder sa notice.
Les projets suivants sont étudiés comme points de départ ; ils seront crédités
précisément ici dès que du code en sera repris :
Étudié comme référence de lecture, sans reprise de code :
- **gnubg-nn**, bibliothèque d'évaluation de GNU Backgammon —
https://git.savannah.gnu.org/cgit/gnubg/gnubg-nn.git
- **CBG**, portage Android de GNU Backgammon (GPLv3) —
https://github.com/clavierhaus/gnubg-android
https://github.com/clavierhaus/gnubg-android ; son fichier
`jni-bridge/src/stubs.c` a servi de repère pour isoler le cœur de gnubg.
## Outils de développement
- **ShellCheck** (GPLv3), analyse des scripts shell, utilisé via Docker.
- **Image `ustagammon/build-c`** (`docker/build-c/Dockerfile`), construite sur
Debian trixie : gcc (GPLv3 avec exception d'exécution), make (GPLv3),
GLib (LGPL 2.1 ou ultérieure, uniquement pour les outils `makeweights` et
`makebearoff` lancés au build ; le moteur embarqué n'en contient rien).
## Remerciements
+43 -2
View File
@@ -2,9 +2,14 @@
- **Date** : 2026-11-02
- **Étape** : 0a.3
- **Statut** : en cours
- **Statut** : terminé
- **Exécutant** : sous-agent general-purpose, dans un worktree isolé
> **Renommage** (conventions de code décidées par Pierre pendant la tâche :
> identifiants en anglais) : `moteur.h` devient `engine/include/engine.h`,
> l'API C est préfixée `engine_` et les clés JSON sont en anglais. Le texte
> ci-dessous garde la rédaction d'origine.
## Objectif
Le cœur de GNU Backgammon (commit 14b67984737ded0f6de43d63dcb789f729d9b06b,
@@ -83,4 +88,40 @@ calcul mesurés, difficultés, écarts au plan.
## Résultat
À remplir à la clôture.
Terminé (2026-11-02), branche `moteur-embarque-travail`. Les trois critères
sont remplis : `make engine && ./build/engine-cli bestmove 4HPwATDgc/ABMA
cAkAAAAAAAAA 31` répond `8/5 6/5` en JSON ; un second `make engine` affiche
« Nothing to be done » ; `make lint` et `make test` passent.
- **Sources** : 38 fichiers de gnubg (plus `COPYING`) copiés **sans aucune modification**
(`engine/gnubg/PROVENANCE.md`) ; en plus de la liste de l'ADR 0005 :
`drawboard.c/h` (notation des coups, `FormatMove`), `mtsupport.c` (données
du fil unique), `dice.h`. Tout le reste est remplacé dans `engine/compat/`
(config.h, shim GLib, en-têtes réduits, fonctions de support).
- **Tables d'équité** : pas de conversion en tableau C ni de repli sur Zadeh ;
le shim fournit un petit analyseur XML compatible GMarkup, et
`matchequity.c` lit `Kazaross-XG2.xml` à l'exécution, comme gnubg de
bureau. `engine_init` échoue si la table chargée n'est pas celle-ci.
Contre-vérification : une variante d'engine-cli liée à la vraie GLib donne
une sortie identique au caractère près (partie libre, match en 5 points,
Crawford, 0 et 2 plis).
- **Données** : générées au build par les outils officiels compilés avec la
vraie GLib, mêmes paramètres que `Makefile.am` : `gnubg.wd` 408 016 octets,
`gnubg_os0.bd` 1 465 788 octets, `gnubg_ts0.bd` 6 830 248 octets.
- **Build** : image `ustagammon/build-c:1` (`docker/build-c/Dockerfile`),
`engine/engine.mk` lancé par `make engine` avec `-j2` ; build complet depuis
zéro : 43 s, génération des données comprise. Options de gnubg
(`-O3 -ffast-math -DG_DISABLE_ASSERT`) ; notre C en `-std=c11 -Wall
-Wextra -Werror`.
- **Temps de `bestmove`** (position de départ, processus complet, données
en cache disque) : 0-ply 0,02 à 0,03 s ; 2-ply 0,03 s pour 31, 0,12 à
0,20 s pour 53, 64, 21 ; environ 35 Mo de mémoire. Premier lancement à
froid : 0,8 s.
- **Match ID** : `cAkAAAAAAAAA` met le joueur **1** au trait (bit fMove à 1) ;
le Match ID équivalent avec le joueur 0 au trait est `MAEAAAAAAAAA`. Les
deux donnent le même résultat sur la position de départ (testé).
- **Écarts au plan** : identifiants en anglais (voir l'encadré) ; sous-commande
`legal` ajoutée (coups légaux sans évaluation) ; `make test` ne vide plus
`build/` (test_makefile.sh essaie `make clean` sur un dossier jetable), sinon
chaque test recompilait le moteur ; mesure de l'écart avec et sans
`-ffast-math` laissée à l'étape 0a.4.