Skip to content

Latest commit

 

History

History
185 lines (160 loc) · 10.2 KB

README.md

File metadata and controls

185 lines (160 loc) · 10.2 KB

TamaGo

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

Requirements

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

Installation

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

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

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

  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です。

Todo list

  • 碁盤の実装
    • 連のデータ構造
    • 3x3パターンのデータ構造
    • 着手履歴
    • Zobrist Hash
    • Super Koの判定処理
  • 探索部の実装
    • 木とノードのデータ構造
    • モンテカルロ木探索
      • クラシックなMCTS
        • UCT
        • RAVE
        • ランダムシミュレーション
      • PUCT探索
        • PUCB値の計算
        • ニューラルネットワークのミニバッチ処理
      • Sequential Halving applied to tree探索
      • CGOS対応
        • 死石がなくなるまでパスを抑制
        • cgos_genmove対応
      • 持ち時間による探索時間制御
  • 学習の実装
    • SGFファイルの読み込み処理
    • 学習データ生成
      • 教師あり学習のデータ生成
        • 入力特徴生成
        • Policyの生成
        • npz形式での保存処理
      • 強化学習のデータ生成
        • 入力特徴生成
        • Improved Policyの生成
        • npz形式での保存処理
    • PyTorchを利用した教師あり学習
    • PyTorchを利用したGumbel AlphaZero方式の強化学習
  • GTPクライアントの実装
    • 基本的なコマンド
      • プログラム情報の表示 : name, version, protocol_version
      • プログラムの終了 : quit
      • 碁盤の操作 : boardsize, clear_board
      • 碁盤の表示 : showboard, showstring
      • 着手 : play, genmove
      • コミの設定と取得 : komi, get_komi
      • コマンドの確認 : known_command, list_commands
      • SGFファイルの読み込み : load_sgf
    • 大会参加時に必要なコマンド
      • 持ち時間の初期化 : time_settings
      • 持ち時間の読み込み : time_left
    • 分析用のコマンド
      • Policyの数値の表示
      • Policyの分布を色で表示

etc...