From 7e2f9d4ad8035e92ae6921ed401f040bb75997ec Mon Sep 17 00:00:00 2001 From: Pierre MARTIN Date: Mon, 2 Nov 2026 13:58:01 +0100 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9dits=20du=20moteur=20et=20r=C3=A9sultat?= =?UTF-8?q?=20de=20l'=C3=A9tape=200a.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- CREDITS.md | 19 ++++++---- docs/plans/2026-11-02-moteur-embarque.md | 45 ++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index 6c344f0..d430553 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -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 diff --git a/docs/plans/2026-11-02-moteur-embarque.md b/docs/plans/2026-11-02-moteur-embarque.md index 6accc9d..276b967 100644 --- a/docs/plans/2026-11-02-moteur-embarque.md +++ b/docs/plans/2026-11-02-moteur-embarque.md @@ -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.