From fa558667f771f5c41c8babad9d7e204b0ccd9fd1 Mon Sep 17 00:00:00 2001 From: Pierre MARTIN Date: Tue, 3 Nov 2026 15:04:50 +0100 Subject: [PATCH] =?UTF-8?q?Plan=201a=20:=20r=C3=A9sultat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- docs/plans/2026-11-03-moteur-analyse.md | 38 ++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/docs/plans/2026-11-03-moteur-analyse.md b/docs/plans/2026-11-03-moteur-analyse.md index 6e64ee6..5e21429 100644 --- a/docs/plans/2026-11-03-moteur-analyse.md +++ b/docs/plans/2026-11-03-moteur-analyse.md @@ -57,4 +57,40 @@ chemins explicites ; ne pas pousser, pas de MR. ## Résultat -À remplir à la clôture. +Réalisé le 2026-11-03, branche `moteur-analyse`. Critères tenus : nouvelles +commandes d'`engine-cli` en JSON, références concordantes en natif et en +WebAssembly, `make lint` et `make test` au vert. + +- **Niveaux** : les neuf réglages prédéfinis de gnubg 1.08 (`aecSettings`) : + `beginner`, `casual`, `intermediate`, `advanced` (0 pli, bruit 0,06 / 0,05 / + 0,04 / 0,015, déterministe), puis `0ply` à `4ply` sans bruit (anciens noms + gnubg : « expert » = 0 pli, « world class » = 2 plis). Coup choisi comme + l'ordinateur de gnubg (`ComputerTurn` : sans analyse, puis + `RefreshMoveList`). `engine.h` (`engine_level_*`), `engine-cli --level` et + `levels`, `Engine.levelMove` et `levelCubeDecision`. +- **Analyses** : `engine_analyse_move` (comme `AnalyzeMove` : coup joué + évalué au niveau le plus profond, rang, perte, appréciation), + `engine_analyse_cube` (pas de double, double, prendre, passer ; pertes de + `AnalyzeMove`), `engine_luck_of` (portage de `LuckNormal` et `LuckFirst` + d'`analysis.c`, fichier non repris dans `engine/gnubg/`). Commandes + `analysemove`, `analysecube`, `luck` ; `Engine.analyseMove`, `analyseCube`, + `luck`. +- **Seuils** : ceux de gnubg, `gnubg.c` : appréciation 0,03 / 0,06 / 0,12 + (et non 0,04 / 0,08 / 0,16 comme proposé dans `docs/etape-1.md`) ; chance + 0,3 / 0,6. Constantes dans `engine.h` et `SKILL_THRESHOLDS`, + `LUCK_THRESHOLDS` dans `engine.ts`, vérifiées égales par un test. +- **Références** : `tests/reference/analyses.json` (16 coups joués, 14 + décisions de videau, 7 cas de niveaux), résultats dans `analysis/`, produits + par l'analyse de partie de gnubg de bureau (« analyse game ») ; comparés par + `compare.py`. Écart maximal 1,64e-3 (`move-jacoby`, 2 plis), tolérance + inchangée (0,002). +- **Écart au plan, décision à valider** : le moteur vide le cache + d'évaluation de gnubg à chaque calcul. Une recherche à 2 plis avec élagage + y laisse des évaluations à 0 pli des réseaux d'élagage, que les calculs à + 0 pli suivants reprennent (même défaut dans gnubg de bureau : jusqu'à + 2,5e-2 d'écart sur la chance). Coût : environ 3 ms par appel sur le PC. +- **Mesure** (`make bench`, Node 18, i5-2450M) : analyse du coup joué à + 2 plis, médiane 76 ms, maximum 451 ms (`opening-21`) ; seuil 3 s. Aussi + dans `bench.html` pour le téléphone. +- **Glossaire** : Niveau de jeu (`Level`), Appréciation (`Skill`), Chance + (`Luck`).