EulerGo

Una plataforma de investigación para una IA de Go con estilo

Una plataforma CLI de investigación para IA de Go, diseñada para que distintos estilos personales (pungmyo, 기풍) puedan aprenderse, compararse y preservarse sobre una capa común fuerte de habilidad. Es nuestra respuesta, desde la investigación, a una preocupación de largo recorrido en el mundo del Go: que, en la era de la IA, las jugadas de cada profesional tienden a converger hacia una única "respuesta correcta". EulerGo trata la individualidad que se manifiesta en las primeras ~50 jugadas como una señal aprendible mediante un style latent y la comparación multi-algoritmo, buscando un entorno de investigación donde convivan muchos estilos en lugar de un único super-motor monolítico.

Internal Research Platform

Enfoque

Una plataforma que toma un interés de largo recorrido en el mundo del Go —— la individualidad, el pungmyo —— y lo trata como un tema digno de investigación.

Tomarse en serio las primeras 50 jugadas

Las primeras cincuenta jugadas de una partida suelen describirse como el tramo en el que más se nota el pensamiento de cada jugador —— dónde juega, qué lado construye primero, cuándo invade. EulerGo parte de las diferencias de estilo en esa fase inicial y las trata como una señal aprendible.

Capa común + cabezas de estilo intercambiables

En lugar de hacer más fuerte una única red poderosa, EulerGo coloca una capa común de habilidad debajo de cabezas de estilo intercambiables —— de modo que varios "personajes" distintos puedan coexistir sobre la misma base en lugar de converger en uno.

Orientado a la investigación

Esto es una plataforma de investigación, no un motor comercial. ¿Cómo se define, se entrena, se mide, se clasifica y se preserva un estilo? EulerGo está pensado como un lugar para correr experimentos reproducibles en torno a esas preguntas.

Cómo funciona —— capa común de habilidad fuerte + cabezales de estilo intercambiables

Un modelo, muchos personajes. Misma base, manos distintas.

Canales de entrada Style-Latent

El tensor de entrada añade N canales de estilo sobre 9 canales base. Cada dimensión de estilo es un plano constante transmitido por broadcast sobre todo el tablero. Con style_vector=None es totalmente compatible con el modelo de 9 canales. El Trainer detecta in_channels automáticamente desde features.shape[1] y los restaura desde el metadato de arquitectura del checkpoint.

Algoritmos intercambiables

Sobre la misma interfaz de self-play / eval / league, un único flag --algorithm cambia entre MCTS, Gumbel, QZero, PGS, native_mcts y random. El algoritmo es una perilla —— comparación en igualdad de condiciones, mismas métricas.

Bucle de auto-mejora

selfplay → train → checkpoint → selfplay más fuerte → analyze / league. Cada iteración escribe un RunManifest (seed/git/profile/version) automáticamente, y el pipeline registra chain.json para que cada cadena de warm-start sea auditable.

Style loss + etiquetado automático

Entrena un clasificador de estilo para etiquetar automáticamente a qué personaje pertenece cada partida. La v1 es basada en referencia; la v2 es un modelo aprendido (--model). El flag --style-loss-weight refuerza directamente la señal de individualidad durante el entrenamiento.

Matriz de algoritmos

Varias familias comparadas sobre una interfaz común

Algoritmo Tier Descripción
mctsstablePUCT MCTS de clase AlphaZero —— baseline por defecto
randomstableUniforme sobre jugadas legales (control)
gumbelbetaGumbel root selection —— baseline contrastivo simplificado
gumbel_fullstableSequential-halving + σ(q) completa, fiel a Danihelka 2022
qzerostablePolítica derivada de Q sin búsqueda —— sin árbol
pgsstablePolicy-Gradient Search —— rollouts estocásticos cortos sin árbol
native_mctsstableRoot-parallel MCTS + playouts en C++ (19x19 práctico)
distributed_selfplayplannedSelfplay multi-máquina (ejecutado vía coordinator / worker)

Pipeline de un vistazo

El flujo de datos del bucle de auto-mejora

selfplay
training_data.npz
game_NNNN.json
train
checkpoint
selfplay
--checkpoint
analyze / league
# Bucle de auto-mejora Phase 3+
selfplay (con algoritmo, style_vector) → training_data.npz (9+N canales) + game_NNNN.json
  → train → checkpoint (metadato de arquitectura)
  → selfplay (--checkpoint) → señal de estilo más fuerte
  → analyze / league → comparación de estilo + fuerza (ELO, bootstrap CI)

Superficie CLI (resumen)

Un único punto de entrada eulergo con auto-descubrimiento de plugins

Comando Descripción
selfplayGenera partidas de self-play (--algorithm, --workers N)
trainEntrenamiento de red neuronal (PyTorch, --style-loss-weight)
shuffleMezcla y combina datos de entrenamiento
exportExporta / lista checkpoints
evalEvaluación cara a cara entre dos configuraciones
analyzeAnálisis de apertura y comparación de estilo
leagueTorneo round-robin + ELO (--bootstrap CI)
algorithmsLista los algoritmos disponibles con sus tiers
classifyEtiquetado automático de estilo (basado en referencia o v2 aprendida)
coordinator(Phase 6) Coordinador de selfplay distribuido
worker(Phase 6) Worker de selfplay distribuido
tournament(Phase 6) Emparejamiento dinámico por ganancia de información
dashboard(Phase 6) Dashboard web (i18n)
pipeline(Phase 6) Pipeline de entrenamiento iterativo
app(Phase 6.1, opcional) App GUI basada en Toga —— pip install eulergo[app]

Todo el texto de help y la salida en tiempo de ejecución se traduce vía --lang ko|en|zh|ja|es.

Índice de tutoriales

18 guías paso a paso —— desde introducción hasta entrenamiento distribuido y la app GUI

01Primeros pasos con EulerGo —— introducción + --workers multi-core (5 min)
02Comparación de estilo 9x9 —— mismo algoritmo, diferentes hiperparámetros
03Comparación multi-algoritmo (Phase 4)
04Lectura de registros de partida JSON (Phase 4)
05Liga + estimación de ELO
06Canales de entrada Style-Latent (introducido en Phase 3)
07Reproducción de baseline 19x19
08QZero —— Self-play sin búsqueda (Phase 5)
09PGS —— Rollouts sin árbol (Phase 5)
10Style Loss + Style Classifier (Phase 5)
11Intervalos de confianza ELO por bootstrap (Phase 5)
12Native C++ MCTS + GPU Batching (Phase 5)
13Self-play distribuido multi-máquina (Phase 6)
14Tournament Scheduler por ganancia de información (Phase 6)
15Dashboard web (Phase 6, i18n)
16Pipeline de entrenamiento largo 19x19 (Phase 6)
17Style Classifier v2 —— clasificador aprendido (Phase 6)
18App de escritorio/móvil —— jugar directamente contra un checkpoint (Phase 6.1)

Instalación y quickstart

De venv e instalación a tu primer selfplay en una sola pantalla

# virtualenv + instalación dev
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# Si también necesitas entrenamiento de red neuronal con PyTorch
pip install -e ".[nn]"

# Self-play 9x9 (RandomPolicy, sin PyTorch)
eulergo selfplay --games 10 --board-size 9 --simulations 30

# Listar algoritmos disponibles
eulergo algorithms

# Selfplay con otro algoritmo
eulergo selfplay --algorithm gumbel --games 5 --board-size 9

# Comparar dos algoritmos (métricas ricas basadas en JSON)
eulergo analyze outputs/algo_mcts_9x9 \
  --compare outputs/algo_gumbel_9x9 \
  --name-a mcts --name-b gumbel

i18n y plataforma

CLI en 5 idiomas, GUI opcional, build nativo opcional

CLI en 5 idiomas

Todo el texto de help y la salida en tiempo de ejecución cambia vía --lang ko|en|zh|ja|es. El idioma por defecto es el coreano. Arraigado en la cultura del baduk coreano, multilingüe desde el primer día.

eulergo --lang en selfplay --games 1
eulergo --lang zh selfplay --games 1
eulergo --lang ja selfplay --games 1

App GUI opcional (Toga)

pip install eulergo[app] instala una app GUI multiplataforma basada en Toga (Mac/Win/Linux/iOS/Android) para jugar directamente contra un checkpoint entrenado. El comando app solo se expone cuando el paquete es importable (política de plugins estricta).

MCTS nativo C++ opcional

bash eulergo/native/build.sh compila root-parallel MCTS + playouts en C++ para una velocidad práctica en 19x19. Si la build no está presente, native_mcts cae automáticamente al MCTS de Python.

EulerGo es un proyecto de investigación interno

No es un motor comercial. Aspira a ser un entorno experimental reproducible sobre cómo el estilo personal (pungmyo) puede aprenderse, compararse y preservarse.

El proyecto fue inspirado por las declaraciones públicas de Lee Sedol; no está afiliado oficialmente a él de ninguna forma.

Empezar en GitHub Contacto