EulerGo

A research platform for Go AI with a sense of style

A CLI research platform for Go AI, designed so that distinct personal styles (pungmyo, 기풍) can be learned, compared, and preserved on top of a strong shared skill layer. It is our research-side response to a long-running worry in the Go community — that, in the age of AI, every professional's moves seem to converge toward a single "correct" answer. EulerGo treats the individuality visible in the first ~50 moves as a learnable signal via a style latent and multi-algorithm comparison, aiming at a research environment where many characters coexist rather than one monolithic super-engine.

Internal Research Platform

Approach

A research platform that treats a long-running concern in the Go community — individuality, pungmyo — as something worth working on.

Taking the first 50 moves seriously

The opening fifty moves of a game are often described as the stretch where a player's thinking is most visible — where they play, which side they build first, when they invade. EulerGo takes the style differences in that opening phase as the starting point and treats them as a learnable signal.

A shared skill layer, swappable style heads

Instead of making a single strong network stronger, EulerGo sits a shared skill layer beneath interchangeable style heads — so multiple distinct characters can coexist on the same foundation rather than converging into one.

Research-oriented

This is a research platform, not a commercial engine. How do we define style, train it, measure it, classify it, and preserve it? EulerGo is meant as a place to run reproducible experiments around those questions.

How it works — a strong common skill layer + interchangeable style heads

One model, many characters. Same foundation, different hands.

Style-latent input channels

The input tensor adds N style channels on top of 9 base channels. Each style dimension is a constant plane broadcast across the whole board. When style_vector=None, it is fully backward-compatible with the 9-channel model. The trainer auto-detects in_channels from features.shape[1] and restores them from checkpoint architecture metadata.

Swappable algorithms

On the same self-play / eval / league interface, a single --algorithm flag switches between MCTS, Gumbel, QZero, PGS, native_mcts, and random. The algorithm is a knob — apples-to-apples comparison, identical metrics.

Self-improvement loop

selfplay → train → checkpoint → stronger selfplay → analyze / league. Each iteration writes a RunManifest (seed/git/profile/version) automatically, and the pipeline records chain.json so every warm-start chain is auditable.

Style loss + automatic labeling

Train a style classifier to automatically label which game belongs to which character. v1 is reference-based; v2 is a learned model (--model). A --style-loss-weight flag reinforces the individuality signal directly during training.

Algorithm matrix

Multiple families compared on a common interface

Algorithm Tier Description
mctsstableAlphaZero-class PUCT MCTS — default baseline
randomstableUniform over legal moves (control)
gumbelbetaGumbel root selection — simplified contrastive baseline
gumbel_fullstableSequential-halving + full σ(q), faithful to Danihelka 2022
qzerostableSearchless Q-derived policy — no tree
pgsstablePolicy-Gradient Search — tree-free short stochastic rollouts
native_mctsstableRoot-parallel MCTS + C++ playouts (practical 19x19)
distributed_selfplayplannedMulti-machine selfplay (run via coordinator / worker)

Pipeline at a glance

The data flow of the self-improvement loop

selfplay
training_data.npz
game_NNNN.json
train
checkpoint
selfplay
--checkpoint
analyze / league
# Phase 3+ self-improvement loop
selfplay (with algorithm, style_vector) → training_data.npz (9+N channels) + game_NNNN.json
  → train → checkpoint (architecture metadata)
  → selfplay (--checkpoint) → stronger style signal
  → analyze / league → style + strength comparison (ELO, bootstrap CI)

CLI surface (overview)

A single eulergo entry point with plugin auto-discovery

Command Description
selfplayGenerate self-play games (--algorithm, --workers N)
trainNeural-network training (PyTorch, --style-loss-weight)
shuffleShuffle and merge training data
exportExport / list checkpoints
evalHead-to-head evaluation between two configs
analyzeOpening analysis + style comparison
leagueRound-robin tournament + ELO (--bootstrap CI)
algorithmsList available algorithms with tiers
classifyAutomatic style labeling (reference-based or learned v2)
coordinator(Phase 6) Distributed selfplay coordinator
worker(Phase 6) Distributed selfplay worker
tournament(Phase 6) Information-gain dynamic pairing
dashboard(Phase 6) Web dashboard (i18n)
pipeline(Phase 6) Iterative training pipeline
app(Phase 6.1, optional) Toga-based GUI app — pip install eulergo[app]

All help text and runtime output is translated via --lang ko|en|zh|ja|es.

Tutorials index

18 step-by-step guides — from getting started to distributed training and the GUI app

01Getting Started with EulerGo — intro + --workers multi-core (5 min)
029x9 Style Comparison — same algorithm, different hyperparameters
03Multi-Algorithm Comparison (Phase 4)
04Reading JSON Game Records (Phase 4)
05League + ELO Estimation
06Style-Latent Input Channels (introduced in Phase 3)
0719x19 Baseline Reproduction
08QZero — Searchless Self-Play (Phase 5)
09PGS — Tree-Free Rollouts (Phase 5)
10Style Loss + Style Classifier (Phase 5)
11Bootstrap ELO Confidence Intervals (Phase 5)
12Native C++ MCTS + GPU Batching (Phase 5)
13Multi-Machine Distributed Self-Play (Phase 6)
14Information-Gain Tournament Scheduler (Phase 6)
15Web Dashboard (Phase 6, i18n)
1619x19 Long-Running Training Pipeline (Phase 6)
17Style Classifier v2 — Learned Classifier (Phase 6)
18Desktop/Mobile App — Play Directly Against a Checkpoint (Phase 6.1)

Install + Quickstart

From venv and install to your first selfplay in one screen

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

# If you also need PyTorch neural-network training
pip install -e ".[nn]"

# 9x9 self-play (RandomPolicy, no PyTorch required)
eulergo selfplay --games 10 --board-size 9 --simulations 30

# List available algorithms
eulergo algorithms

# Selfplay with a different algorithm
eulergo selfplay --algorithm gumbel --games 5 --board-size 9

# Compare two algorithms (rich JSON-based metrics)
eulergo analyze outputs/algo_mcts_9x9 \
  --compare outputs/algo_gumbel_9x9 \
  --name-a mcts --name-b gumbel

i18n + platform

5-language CLI, optional GUI, optional native build

5-language CLI

All help text and runtime output switches via --lang ko|en|zh|ja|es. Default is Korean. Rooted in Korean baduk culture, designed multilingual from day one.

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

Optional GUI app (Toga)

pip install eulergo[app] installs a Toga-based cross-platform GUI app (Mac/Win/Linux/iOS/Android) so you can play directly against a trained checkpoint. The app command is only exposed when the package is importable (strict plugin policy).

Optional native C++ MCTS

bash eulergo/native/build.sh builds root-parallel MCTS + C++ playouts for practical 19x19 speed. If the build is absent, native_mcts falls back to the Python MCTS automatically.

EulerGo is an internal research project

It is not a commercial engine. It aims to be a reproducible experimental environment for how personal style (pungmyo) can be learned, compared, and preserved.

The project was inspired by Lee Sedol's public remarks; it is not officially affiliated with him in any form.

Get Started on GitHub Contact