EulerGo

棋風をもった囲碁 AI を研究するプラットフォーム

囲碁 AI のための CLI 研究プラットフォームです。強力な共通実力層の上で、異なる棋風(style)を学習・比較・保存できるように設計しました。AI の時代になって、すべての棋士の手が唯一の「正解」へ収束していく —— 囲碁界で長く語られてきたこの懸念に、研究の立場から応えるという発想から生まれています。対局の最初の五十手に現れる個性を、style latent と複数アルゴリズムの比較によって学習可能な信号として扱い、単一の超強エンジンではなく、多くの個性が共存する研究環境を目指します。

Internal Research Platform

アプローチ

囲碁界で長く語られてきた関心事 —— 個性・棋風 —— を、研究のテーマとして扱ってみるためのプラットフォーム。

最初の 50 手をきちんと扱う

対局の最初の五十手は、棋士の思考の形が最もはっきり現れる区間として長く語られてきました —— どこに打つか、どの辺から広げるか、いつ侵入するか。EulerGo はこの序盤に現れるスタイルの違いを出発点に据え、学習可能な信号として扱います。

共通実力層 + 差し替え可能なスタイルヘッド

単一の強力なネットワークをさらに強くするのではなく、共通の実力層のに差し替え可能なスタイルヘッドを乗せる構造を選びました。複数の個性が同じ土台の上に共存し、一つに収束しないための設計です。

研究向けのプラットフォーム

商用エンジンではなく研究プラットフォームです。スタイルをどう定義し、学習し、計測し、分類し、保存するか —— EulerGo はその問いに対して再現可能な実験を回せる場を提供することを目指しています。

仕組み —— 強い共通実力層 + 差し替え可能なスタイルヘッド

一つのモデル、複数の人格。同じ土台、異なる手つき。

Style Latent 入力チャネル

入力テンソルは 9 個の base チャネルの上に N 個の style チャネルを加えます。各 style 次元は盤全体にブロードキャストされた定数平面です。style_vector=None のときは従来の 9 チャネルモデルと完全に後方互換です。Trainer は features.shape[1] から in_channels を自動検出し、checkpoint の architecture metadata から自動復元します。

アルゴリズムの差し替え

同一の self-play / eval / league インターフェース上で、--algorithm のフラグひとつで MCTS、Gumbel、QZero、PGS、native_mcts、random を切り替えます。アルゴリズムはツマミです。同条件の比較、同一メトリクスでの計測。

自己改善ループ

selfplay → train → checkpoint → より強い selfplay → analyze / league。各イテレーションは自動で RunManifest(seed/git/profile/version)を残し、pipeline は chain.json として warm-start の連鎖を監査可能な形で記録します。

Style Loss と自動ラベリング

スタイル分類器を学習させ、各対局がどの人格に属するかを自動でラベル付けします。v1 は reference-based、v2 は学習済みモデル(--model)。--style-loss-weight により、学習中に個性の信号を直接強化できます。

アルゴリズムマトリクス

同じインターフェース上で比較可能な諸系統

アルゴリズム Tier 説明
mctsstableAlphaZero 系 PUCT MCTS —— 既定の baseline
randomstable合法手一様(対照)
gumbelbetaGumbel root selection —— 簡略化した対照 baseline
gumbel_fullstableSequential-halving + 完全な σ(q)、Danihelka 2022 準拠実装
qzerostableSearchless な Q 由来 policy —— 木なし
pgsstablePolicy-Gradient Search —— 木を使わない短い確率的ロールアウト
native_mctsstableRoot-parallel MCTS + C++ playouts(19x19 実用)
distributed_selfplayplanned複数マシン selfplay(coordinator / worker で運用)

Pipeline 一望

自己改善ループのデータフロー

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) → より強いスタイル信号
  → analyze / league → スタイルと強さの比較 (ELO, bootstrap CI)

CLI 表面(概要)

プラグイン自動検出に基づく単一エントリポイント eulergo

コマンド 説明
selfplayセルフプレイ対局の生成(--algorithm, --workers N)
trainニューラルネットの学習(PyTorch, --style-loss-weight)
shuffle学習データのシャッフル・統合
exportcheckpoint のエクスポート/一覧
eval二つの設定間の対局評価
analyze序盤分析・スタイル比較
leagueラウンドロビン + ELO(--bootstrap CI)
algorithms利用可能なアルゴリズムと tier の表示
classifyスタイル自動ラベリング(reference ベース または 学習済み v2)
coordinator(Phase 6) 分散 selfplay コーディネータ
worker(Phase 6) 分散 selfplay ワーカー
tournament(Phase 6) 情報量ベースの動的ペアリング
dashboard(Phase 6) Web ダッシュボード(i18n)
pipeline(Phase 6) 反復学習 pipeline
app(Phase 6.1, optional) Toga ベースの GUI アプリ —— pip install eulergo[app]

help 実行時の出力はすべて --lang ko|en|zh|ja|es で翻訳されます。

チュートリアル索引

ステップ別ガイド 18 編 —— 入門から分散学習、GUI アプリまで

01EulerGo 入門 —— 入門 + --workers マルチコア(5 分)
029x9 スタイル比較 —— 同じアルゴリズム、異なるハイパーパラメータ
03マルチアルゴリズム比較(Phase 4)
04JSON 棋譜の読み取り(Phase 4)
05リーグ + ELO 推定
06Style Latent 入力チャネル(Phase 3 導入)
0719x19 Baseline の再現
08QZero —— Searchless Self-Play(Phase 5)
09PGS —— Tree-Free Rollouts(Phase 5)
10Style Loss + Style Classifier(Phase 5)
11Bootstrap ELO 信頼区間(Phase 5)
12Native C++ MCTS + GPU Batching(Phase 5)
13複数マシンでの分散 Self-Play(Phase 6)
14情報量ベースの Tournament Scheduler(Phase 6)
15Web Dashboard(Phase 6, i18n)
1619x19 長時間学習 Pipeline(Phase 6)
17Style Classifier v2 —— 学習済み分類器(Phase 6)
18デスクトップ/モバイルアプリ —— checkpoint と直接対局(Phase 6.1)

インストールとクイックスタート

venv とインストールから最初の selfplay まで一画面で

# 仮想環境 + dev インストール
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# PyTorch ベースのニューラルネット学習が必要な場合
pip install -e ".[nn]"

# 9x9 self-play(RandomPolicy、PyTorch 不要)
eulergo selfplay --games 10 --board-size 9 --simulations 30

# 利用可能なアルゴリズムを確認
eulergo algorithms

# 別のアルゴリズムで selfplay
eulergo selfplay --algorithm gumbel --games 5 --board-size 9

# 二つのアルゴリズムを比較(JSON ベースの豊富なメトリクス)
eulergo analyze outputs/algo_mcts_9x9 \
  --compare outputs/algo_gumbel_9x9 \
  --name-a mcts --name-b gumbel

i18n とプラットフォーム

5 言語 CLI、オプションの GUI、オプションのネイティブビルド

5 言語 CLI

help 実行時出力は --lang ko|en|zh|ja|es で切り替わります。既定は韓国語。韓国囲碁文化に根ざしつつ、初日から多言語で設計されました。

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

オプション GUI アプリ(Toga)

pip install eulergo[app] で Toga ベースのクロスプラットフォーム GUI アプリ(Mac/Win/Linux/iOS/Android)を導入し、学習済みの checkpoint と直接対局できます。app コマンドはこのパッケージが import 可能なときにのみ CLI に公開されます(strict plugin ポリシー)。

オプションのネイティブ C++ MCTS

bash eulergo/native/build.sh で root-parallel MCTS + C++ playouts を 19x19 の実用速度向けにビルドします。未ビルドでも native_mcts は自動で Python MCTS にフォールバックします。

EulerGo は内部研究プロジェクトです

商用エンジンではありません。ひとりの棋風(棋風)がどのように学習・比較・保存されうるかを探る、再現可能な実験環境を目指しています。

本プロジェクトは李世ドル九段の公開発言に触発されたものであり、ご本人とは一切の公式な関係はありません。

GitHub で始める お問い合わせ