Repository navigation
feat(search,#17937): Search-07 -- analyse de convergence par minimax memoise (complement #17967) - #17991
feat(search,#17937): Search-07 -- analyse de convergence par minimax memoise (complement #17967)#17991jsboige wants to merge 0 commit into
Conversation
PR gate absent du rollup (advisory, #10928)
Cause mesuree : mergeable_state=dirty (PR en conflit avec main) |
5e2a9db to
fd9f72d
Compare
|
Réduction après duplication (commentaire de lane) : #17967 (lane myia-po-2025:CoursIA, MERGÉE 19:14Z) a livré la partie misère de #17937 pendant la préparation de cette PR — sa version (sous-classe |
Grain: MED/notebook-python — lane myia-po-2027:CoursIA — prev: DEEP/notebook-lean #17530
Summary
Réduction après duplication : la livraison principale de #17937 (variante misère du Nim + témoin minimax) a été faite par #17967 (MERGÉE,
NimMisere(NimGame)+valeur_miserelru_cache) pendant que cette PR était en préparation — la partie misère de cette PR est retirée au profit de la version canonique déjà sur main. Ce PR ne porte plus que le delta que #17967 n'a pas couvert : la cellule d'analyse de convergence (remplacement 1:1, cellule 26), dont la version sur main reste l'originelle :_minimax_memo— minimax mémoïsé (clé(etat, joueur_max)) : l'énumération des actions optimales d'une position devient quasi instantanée sur TicTacToe où les transpositions sont massives.actions_optimalesen ensemble — la version de main compare le coup de MCTS à une seule action optimale (celle deminimax(jeu, etat)) : au TicTacToe vide, plusieurs ouvertures sont équivalentes et le taux de convergence est sous-estimé (biais de mesure). La comparaison à l'ensemble des actions équivalentes corrige le biais.random.seed(seed * 10_000 + rep): l'analyse de convergence devient reproductible (seed 42 explicite) tout en exposant la variance naturelle de MCTS.100 / nb_actions %sur le sous-graphe du taux : sans elle, un taux de 40 % ne se lit pas (est-ce bon ? le hasard ferait 11 % au TicTacToe vide).Aucune autre cellule modifiée : la structure est celle de main (43 cellules), le contenu misère de #17967 est intact, vérifié par assertions pré-commit (
class NimMisere(NimGame),valeur_misere,strategie_nim_misereprésents ; bloc misère de l'ancienne version absent).Résultats mesurés
Re-exécution complète (papermill, kernel
python3) : 43 cellules, 16 code, 0 erreur, 0 cellule non exécutée. Sortie de la cellule de convergence :La sortie fait voir le biais corrigé : au TicTacToe vide (nul parfait), les 9 ouvertures sont toutes minimax-optimales — l'ancienne version comparait le coup de MCTS à une seule d'entre elles et sous-estimait le taux d'un facteur ~9 ; corrigé, le taux est 100 % à tous les budgets, et la ligne « choix uniforme : 11 % » donne la lecture sans laquelle un taux nu ne veut rien dire. La valeur estimée converge proprement 0.75 → 0.487 vers la valeur Minimax 0.
Environnement
Papermill kernel
python3(venv projet,pyspiel2.0.2 installé règle F au cycle précédent).Traçabilité duplication
refs/stash-archive/ai01/coursia/22-2026-04-21(commit 57bdd86c39) → issue [Search-07] Recyclage d'un stash : variante misere du Nim et minimax memoise — livrer ou refuser #17937 → verdict LIVRER déposé sur [CLAUDE-AI-01] Recyclage des stashes ancrés — 77 ancres / 8 dépôts (suite #3147) roo-extensions#3827.check_lane_claim.pyCLEAR (aucun[CLAIMED]de po-2025 sur l'issue) sans scan des PRs ouvertes sur le chemin (L898) — feat(search): comparer Nim normal et misère avec témoin minimax #17967 était ouverte depuis 15:22Z. Consigné au dashboard.See #17937 — livraison principale déjà mergée (#17967) ; fermeture au coordinateur.
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com