TamaGo

August 25, 2025 · View on GitHub

TamaGoはPythonで実装された囲碁の思考エンジンです。
SGF形式の棋譜ファイルを利用した教師あり学習、Gumbel AlphaZero方式の強化学習をお試しできるプログラムとなっています。
学習したニューラルネットワークのモデルを使用したモンテカルロ木探索による着手生成ができます。
Python 3.11, 3.12, 3.13で動作確認をしています。

Requirements

使用するパッケージ用途
clickコマンドライン引数の実装
numpy雑多な計算
pytorchNeural Networkの構成と学習の実装
graphviz探索木の可視化
matplotlib探索木の可視化

Installation

Python 3.11以降が使える環境で下記コマンドで前提パッケージをインストールします。

pip install -r requirements.txt

CPUのみでも動作しますが、学習を実行する場合はGPUを使えるようセットアップすることをお勧めします。

How to execute GTP engine

GTP対応のGUI (GoGui, Sabaki, Lizzieなど) を使用する場合は下記コマンドで思考エンジンとして使用できます。

python main.py

コマンドラインオプションとしては下記のものがあるので必要に応じて設定してください。コマンドラインオプションはclickを使用して実装しています。

オプション概要設定する値設定値の例デフォルト値備考
--size碁盤のサイズ2以上BOARD_SIZE以下9BOARD_SIZEBOARD_SIZEはboard/constant.pyに定義してあります。
--superko超劫ルールの有効化true または falsetruefalsePositional super koのみ対応しています。
--modelネットワークモデルファイルパス学習済みモデルファイルパスmodel/model.binなしTamaGoのホームディレクトリからの相対パスで指定してください。指定がない場合はニューラルネットワークを使用せずにランダムに着手します。
--use-gpuGPU使用フラグtrue または falsetruefalse
--policy-movePolicyの分布に従って着手するフラグtrue または falsetruefalsePolicyのみの強さを確認するときに使用します。
--sequential-halvingSequential Halving applied to treesの探索手法で探索するフラグtrue または falsetruefalse自己対戦時に使う探索なので、基本的にデバッグ用です。
--visits1手あたりの探索回数1以上の整数10001000--strict-visitsオプション、--const-timeオプション、または--timeオプションの指定があるときは本オプションを無視します。
--strict-visits--visitsと同様だが、途中で最善手が確定しても探索を打ち切らない1以上の整数1000None--const-timeオプション、または--timeオプションの指定があるときは本オプションを無視します。
--const-time1手あたりの探索時間 (秒)0より大きい実数10.0--timeオプションの指定があるときは本オプションを無視します。
--time持ち時間 (秒)0より大きい実数600.0
--batch-size探索時のニューラルネットワークのミニバッチサイズ1以上の整数13NN_BATCH_SIZENN_BATCH_SIZEはmcts/constant.pyに定義してあります。
--tree-size探索木を構成するノードの最大数1以上の整数100000MCTS_TREE_SIZEMCTS_TREE_SIZEはmcts/constant.pyに定義してあります。
--cgos-mode石を打ち上げるまでパスを抑制するフラグtrue または falsetruefalse

プログラムの実行例は下記のとおりです

  1. 碁盤のサイズを5、model/model.binを学習済みモデルとして使用し、GPUを使用せずに実行するケース
python main.py --size 5 --model model/model.bin --use-gpu false
  1. 超劫を着手禁止にするケース
python main.py --superko true
  1. model/sl-model.binを学習済みモデルとして使用し、Policyの分布に従って着手を生成するケース
python main.py --model model/sl-model.bin --policy-move true
  1. 持ち時間を10分にするケース
python main.py --time 600
  1. 1手あたりの探索回数を500にするケース
python main.py --visits 500
  1. 1手あたりの探索時間を10秒にするケース
python main.py --const-time 10.0
  1. CGOSの9路盤で動かすケース
python main.py --model model/sl-model.bin --use-gpu true --cgos-mode true --superko true --batch-size 13 --time 600 --komi 7 --tree-size 200000

学習済みモデルファイルについて

学習済みのモデルファイルについてはこちらから取得してください。modelフォルダ以下にmodel.binファイルを配置するとコマンドラインオプションの指定無しで動かせます。ニューラルネットワークの構造と学習済みモデルファイルが一致しないとロードできないので、取得したモデルファイルのリリースバージョンとTamaGoのバージョンが一致しているかに注意してください。
Version 0.6.3時点の教師あり学習版モデル(sl-model.bin)はGNUGo Level 10に対して約+420elo(勝率92.0%)程度の強さです。モンテカルロ木探索で1手あたり100回探索すると、Ray ver 9.0 10k playouts/moveに対して約+180elo(勝率73.8%)程度の強さです。
Version 0.6.0からネットワークの構造を変更したため、以前のバージョンの学習済みモデルファイルは利用できません。

How to execute supervised learning

教師あり学習の実行方法についてはこちらをご参照ください。

How to execute reinforcement learning

強化学習の実行方法についてはこちらをご参照ください。

GoGui analyze commands

GoGuiを使用すると現局面のPolicyの値を表示したり、Policyの値の大きさに応じた色付けをできます。
Policyの値は0.0〜1.0の範囲で表示されます。

Policyの値の表示

Policyの値による色付けはPolicyの値が大きいほど赤く、小さいほど青く表示されます。

Policyの値で色付け

Analyze commands

TamaGoはバージョン0.7.0からlz-analyze, lz-genmove_analyzeをサポートしています。 SabakiやLizzieからご利用ください。

解析コマンドの例

CGOS analyze mode

TamaGoはバージョン0.7.0からcgos-analyze, cgos-genmove_analyzeをサポートしています。Computer Go Server (CGOS)に接続する際は、--cgos-modeオプションをTrueにすることで読み筋などの情報を表示することができます。

CGOSでの動作例

CGOSでの読み筋表示

GTP extension command

TamaGoはGTPの独自拡張としてtamago-readsgfコマンドをサポートします。これはGTP標準のloadsgfコマンドと似ていますが、SGFファイルのパスではなくSGF文字列そのものを引数として、次の例のように使います。loadsgfとは異なりmove_numberの指定はできません。また、SGF文字列は改行を含んではいけません。

tamago-readsgf (;SZ[9]KM[7];B[fe];W[de])

Tree visualization

TamaGoはバージョン0.10.0から探索木の可視化機能をサポートしています。詳細についてはこちらをご参照ください。

License

ライセンスはApache License ver 2.0です。