Moteur pour l'analyse et les niveaux (étape 1a) #32

Manually merged
pierre merged 8 commits from moteur-analyse into main 2026-11-03 14:09:42 +00:00
Showing only changes of commit fa558667f7 - Show all commits
+37 -1
View File
@@ -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`).