Parité
L’entraînement commence par un moteur déterministe
Problématique
Un run AlphaZero ne vaut rien si le simulateur Python peut diverger du moteur Unity/C#. Une seule branche fausse dans le combat, le ciblage ou la résolution d’effet apprendrait au modèle un jeu qui n’existe pas.
Résolution
Le moteur Python est d’abord traité comme un port de parité, puis seulement comme un socle IA. Le comportement C# reste la source de vérité, les méthodes et champs d’état sont conservés, le RNG est centralisé et la couche ML consomme uniquement un état rejouable.
Flux système
- 01Le comportement Unity décompilé est documenté phase par phase avant l’écriture du code Python.
- 02Les matchs seedés, les logs recorder/player et les scénarios rejouent les mêmes inputs sur des snapshots déterministes.
- 03La couche ML ne reçoit l’état via OptcgEnv qu’une fois le filet replay/parité validé.
Détails d’implémentation
EngineRng est la seule surface d’aléatoire ; les imports random sauvages sont bloqués par test.
Les snapshots replay utilisent un JSON canonique et les scénarios couvrent blockers, replacements, coûts, power, silence et flux DON.
La couverture des verbes protège les champs V3 et legacy pour qu’une mécanique de carte ne disparaisse pas silencieusement.



