Chapitre 9

Après les pistes A et C : la politique apprise a été promue, puis testée (suite au Chapitre 10)

Prérequis : Chapitres 1 à 8 — dont l'attempt #8 (pistes A et C, désormais testées et NO-GO, voir Chapitre 8).

Piste débutant

Attention : ce chapitre a changé deux fois depuis sa première version

Quand ce chapitre a été écrit pour la première fois, les pistes A et C décrites plus bas n'étaient

encore que des idées, pas des résultats. Ce n'est plus le cas depuis longtemps : elles ont été

testées ensemble (le Chapitre 8 en raconte l'histoire complète, avec les vrais chiffres). À ce

moment-là, ce chapitre avait été mis à jour une première fois pour promouvoir la piste B (apprendre

les bons gestes plutôt que les écrire à la main) au rang de priorité, avec deux idées

complémentaires encore non testées.

Deuxième mise à jour, celle-ci : la piste B a, elle aussi, été construite et testée pour de

vrai — et les deux idées complémentaires ont, elles aussi, été menées à leur terme. Le

Chapitre 10 raconte cette histoire en détail ; ce chapitre-ci récapitule maintenant l'état réel de

chaque piste, plutôt que de continuer à les présenter comme des plans en attente.

Récapitulatif rapide : les pistes A et C, testées ensemble (voir Chapitre 8 pour les détails)

Les deux idées les moins coûteuses de ce plan — mettre de bons gestes tout faits dans la liste des

essais du planificateur (piste A) et remplacer le réflexe « tourner sur place » par une manœuvre de

croisière qui avance en sprintant (piste C) — ont été testées ensemble, en plus de la correction

déjà en place depuis le Chapitre 8. Résultat sur 8 épisodes : toujours zéro bûche coupée. Mais les

deux mécanismes ont bien fonctionné : le bon geste tout fait a effectivement été choisi par le

planificateur dans plusieurs épisodes, et la manœuvre de croisière s'est elle aussi déclenchée au

moins une fois. Le vrai enseignement n'est donc pas le zéro en lui-même, mais un comportement

inattendu : dans plusieurs épisodes, l'agent s'est mis à répéter le même geste presque tout le

temps (jusqu'à 100% du temps) — un verrouillage qui rappelle un problème déjà vu avec une méthode

de planification plus raffinée testée au Chapitre 8, sans que ce soit encore confirmé comme

exactement le même mécanisme.

Ce résultat affine le diagnostic : quand le planificateur n'a aucun indice fiable pour comparer ses

options (parce qu'aucun arbre n'est en vue), lui donner du bruit pur le fait s'agiter sans but ;

lui donner un choix concentré de bons gestes tout faits le fait, au contraire, se figer aveuglément

sur l'un d'eux — parce que rien ne vient jamais le faire changer d'avis. Dans les deux cas, le

problème reste le même : le planificateur n'a jamais appris, à partir de vraies parties, ce qu'un

joueur fait réellement quand il ne voit rien d'intéressant.

Où en est chaque piste maintenant (le détail complet est au Chapitre 10)

Piste B : apprendre les bons gestes plutôt que les écrire à la main — testée : ÉCHEC, mais un échec qui élimine deux explications

L'idée, promue en priorité après les pistes A et C : entraîner une petite fonction qui apprend, à

partir des parties d'experts déjà utilisées ailleurs dans le projet (plus les épisodes de

couverture aléatoire du Chapitre 7, pour lui montrer aussi de vraies situations « perdu, en train

de chercher »), quelles actions un joueur choisit typiquement dans une situation donnée. Cette

fonction ne remplace pas le planificateur — elle propose seulement de meilleurs candidats parmi

lesquels le monde imaginé (Chapitre 3) continue de choisir et de corriger à chaque tour, comme des

méthodes de jeu très reconnues (les mêmes idées que celles qui ont battu des champions humains aux

échecs et au jeu de Go) : une intuition apprise propose des coups, une recherche explicite les

vérifie.

Cette piste a maintenant été construite et testée pour de vrai. Résultat sur 8 épisodes : toujours

zéro bûche coupée. Mais deux choses importantes ont pu être vérifiées et éliminées grâce à ce

test : l'agent n'a pas répété un seul geste en boucle (contrairement au Chapitre 8), et les 8

points de départ n'étaient pas des endroits sans arbre — un nouvel outil de mesure (voir

ci-dessous) l'a confirmé. C'est le résultat négatif le plus net de toute l'enquête : une proposition

de gestes vraiment variée et bien entraînée, testée sur des points de départ confirmés jouables, et

toujours zéro. Le Chapitre 10 raconte cette histoire en détail, avec un nouveau suspect (pas

encore confirmé) pour la suite de l'enquête.

Ce même rappel reste valable : le Chapitre 5 avait déjà testé une approche « copier un joueur

humain » qui avait échoué (récompense zéro), mais cette version-là utilisait la copie comme décision

finale, sans aucun moyen de se corriger en cas de dérive. Ici, la fonction apprise ne fait que

suggérer — le planificateur garde le dernier mot à chaque tour ; ce n'était donc pas un simple

« retour en arrière » vers l'échec du Chapitre 5, et le Chapitre 10 explique pourquoi le résultat est

malgré tout resté négatif.

Deux idées complémentaires — toutes deux menées à leur terme

  • Réparer la règle de distance entraînée avec de la variété d'éclairage — testée : ÉCHEC. Le

Chapitre 8 avait montré que la règle de distance entraînée réagissait à la luminosité de la scène

(jour/nuit/grotte) plutôt qu'à la vraie distance à l'arbre. La réparation prévue (ajouter de la

variation artificielle de luminosité et de contraste à l'entraînement) a bien été essayée — mais

le problème qu'elle visait à corriger s'est aggravé au lieu de s'améliorer sur une mesure plus

propre. Le Chapitre 10 en donne le détail et l'explication probable.

  • Un diagnostic sur le point de départ — construit, et déjà utile. L'outil qui enregistre, au

début de chaque épisode, si un point de départ jouable est réellement présent a bien été

construit. Il a servi directement dans le test de la piste B (ci-dessus) pour confirmer que les 8

échecs de ce lot n'étaient pas dus à des points de départ impossibles à gagner — la première fois

que ce projet peut affirmer ça avec une mesure, plutôt qu'une impression.

Et maintenant

Le Chapitre 10 raconte l'histoire complète de la piste B testée, ce qu'elle élimine, et la nouvelle

hypothèse — pas encore confirmée — qui en ressort pour continuer l'enquête. Comme pour chaque

tentative précédente de ce projet, le résultat a été rapporté avec les mêmes standards d'honnêteté :

les vrais chiffres, jamais un chiffre arrangé pour paraître mieux qu'il n'est.

Piste expert

Contexte : d'un diagnostic à cinq attaques, à une nouvelle priorité

Le Chapitre 8 se termine désormais sur cinq attaques indépendantes convergentes : quatre visant la

qualité du signal/score (RND en ligne, scan re-câblé, CEM réel, métrique de distance entraînée) et

une cinquième (attempt #8, récapitulée ci-dessous) attaquant directement la génération de

candidats via les Propositions A (priming du pool) et C (manœuvre bushwhack), combinées à

commit_length=4. Ce chapitre distinguait initialement ce qui avait été exécuté (A et C, NO-GO

mais un finding qualitatif net) de ce qui restait un plan non exécuté (Proposition B, promue

priorité 1, plus deux affinements ajoutés après l'attempt #8). Mise à jour : les trois — Proposition

B, réparation photométrique, diagnostic de spawn — ont depuis été exécutées (attempt #9,

CLAUDE.md#Phase 5+). Ce chapitre récapitule l'état réel de chacune ; le Chapitre 10 en donne le

détail complet, y compris le nouveau diagnostic qui en ressort.

Récapitulatif : Propositions A + C (attempt #8) — voir Chapitre 8 pour le détail complet

planner.actionpoolpriming (~30 macros avant+attaque, ~30 rotation caméra, ~30 marche arrière

injectées dans le pool de 512) + scan.macro: bushwhack (sprint-saut avant borné remplaçant le

tourner-en-place, déclenché par goalscorestd plat sur le chop planner), combinés à

commit_length=4. N=8, seed 0 : 0/8 logs, 0/8 planches, reward 0 — non significatif contre le

taux de base pooled commit_length=4 seul (3/31 ≈ 9,7%, ≈0,8 succès attendus sur N=8).

Les deux mécanismes ont vérifiablement déclenché : a7 (macro avant+attaque primé) 21-49% de

part dans 3/8 épisodes ; a13 (macro bushwhack) 28% avec 8 déclenchements de scan dans 1/8

épisode. Finding qui dépasse le 0/8 : 3/8 épisodes montrent a14 (geste préexistant

avancer+attaquer) à 83-100% de part — verrouillage comportemental quasi total, qui rappelle

(sans confirmation quantitative encore établie contre les distributions propres de

commit_length=4 seul — signalé, pas affirmé) la régression de concentration du CEM réel de

l'attempt #6 (66,3% moyen contre 35,8%), obtenue par un mécanisme différent (menu figé/macro de

couverture vs raffinement itératif) mais convergeant sur la même signature : un score plat privé de

gradient réel se fait verrouiller par tout mécanisme qui concentre le pool de candidats, au lieu

de rester varié.

Proposition B — a priori de politique latente — testée (attempt #9) : NO-GO, mais le négatif le plus net de la campagne

Le plan était d'entraîner une tête actor par clonage comportemental sur ebwm.pt figé, à partir des

démos Treechop mélangées aux épisodes de couverture de l'attempt #3 (pour éviter que l'actor

n'apprenne qu'à « toujours attaquer l'arbre visible », la même faiblesse structurelle que A et C

côté recherche), pour proposer des candidats MPC au lieu d'un bruit uniforme/collant ou d'un menu

figé (A). Ce plan a été exécuté tel quel : mine_jepa/ebwm/actor.py::BCActor, gate anti-collapse

obligatoire (une ablation Treechop-seul a été correctement refusée : topactionfrac 0,964 contre

0,863 pour la version retenue, entraînée avec la couverture), câblage bit-for-bit vérifié.

N=8, seed 0, configs/playcraftcommit4_actor.yaml : 0/8 logs, reward 0 (Fisher p≈0,21 contre

le taux de base pooled 3/31). Mais ce lot élimine deux explications concrètes : aucun

verrouillage comportemental (concentration d'action 16-54%, très loin du 83-100% de l'attempt #8),

et aucun spawn invivable (spawndiag confirme maxchop_std 0,017-0,047 sur les 8 épisodes,

au-dessus du seuil calibré de 0,005). Le détail complet, y compris le nouveau diagnostic qui en

ressort (l'évaluation du monde imaginé pourrait être le vrai goulot, pas la génération de

candidats), est au Chapitre 10.

Affinement 1 — réparer la métrique de distance entraînée (attempt #7) avec de l'augmentation photométrique — testée : NO-GO

Le gate offline de l'attempt #7 séparait bien proche/lointain (ratio 7,9×) mais le signal vivant en

jeu suivait la luminosité de scène (jour/nuit/grotte, corrélation Pearson -0,565 avec

goalscorestd) plutôt que la distance réelle à l'objectif. La réparation prévue (ColorJitter

agressif dans trainvalueprojector.py, puis le même gate offline censuré/hinge) a été

implémentée et exécutée : le gate offline tient toujours (séparation 8,7× contre 7,9×), mais la

confusion réelle avec la luminosité s'aggrave sur une mesure isolée plus propre

(r=0,117 → r=0,498). NO-GO — la confusion est vraisemblablement ancrée dans l'espace latent

figé de ebwm.pt lui-même, pas introduite par le projecteur ; le checkpoint réparé n'a donc pas été

déployé dans l'évaluation de la Proposition B ci-dessus, qui procède sur la seule notation

goal-centroid. Détail complet au Chapitre 10.

Affinement 2 — diagnostic de viabilité du spawn — construit et déjà utilisé

L'épisode 7 de l'attempt #8 s'était terminé prématurément (1856/3000 pas) sans jamais trouver

d'arbre — un spawn sans arbre à portée ne peut structurellement pas être résolu. Le diagnostic prévu

(spawndiag dans scripts/playcraft.py, vignette + maxchopstd contre un seuil calibré de

0,005) a été construit et déjà exploité dans l'évaluation de la Proposition B ci-dessus, où il a

confirmé la viabilité des 8 spawns du lot — la première fois que ce projet dispose d'une mesure,

plutôt qu'une impression, pour distinguer échec d'algorithme et spawn impossible.

Et maintenant

Les trois pistes de ce chapitre ont toutes été exécutées et mesurées — même discipline d'honnêteté

que chaque attempt précédent (#1-8). Le Chapitre 10 en donne le récit complet et la nouvelle

hypothèse, non encore confirmée, qui en ressort pour la suite de l'enquête.