読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

Pachiの使い方

1月31日に囲碁電王戦が発表されましたね。2012年から電聖戦という電気通信大学日本棋院提携でコンピュータ碁の進歩を確認するためのプロ棋士との置き碁戦が始まっていたのですが、やはり、(将棋)電王戦で大きな盛り上がりの実績のあるニコ生が取り組むとなると、インパクト大きそうです。これを機会に、碁を始めてみよう、あるいは、コンピュータ碁開発を始めてみようという人が出てきそうです。

オープンソースのコンピュータ碁は以下の3つがメジャーなようです。

  1. GNU Go
  2. Fuego
  3. Pachi

今日はPachiの使い方を。

[Pachi備忘録]

コンパイル

ソースをダウンロードして展開して、Makefileを編集してOSを指定。(MAC=1の行のコメントアウトを外す)

使い方

./pachi [オプション] [エンジン設定]

で起動し、その後標準入出力でGTPコマンドをやり取りします。

オプション

Pachi version 10.99のオプションは以下の通り。

  • -r
    • ルールを指定する。デフォルトは中国ルール。
    • chinese, japanese, aga, new_zealand, simplified_ingのいずれか。
  • -t
    • 時間設定を指定する。デフォルトは一手15秒。
    • <秒数>で一手の秒数を指定、もしくは_<秒数>で総時間を指定。=<ゲーム数>で一手のプレイアウト数を指定。
  • -e
    • 思考エンジンを指定する。デフォルトはuct。
  • random, replay, montecarlo, uct, distributed, patternscan, patternplay, josekiのいずれか。
  • -d
  • -D
  • -f
    • 定石ファイルを指定する。
  • -g
    • GTPポートを指定する。
  • -l
    • ログポートを指定する。
  • -s
    • 乱数の種を指定する。
  • -c
    • チャットファイルを指定する。KGS用?
  • -u
エンジン設定(UCTの場合)
  • debug
  • reporting
    • 出力フォーマットを指定
    • text, json, jsonbig
  • reportfreq
    • プレイアウトを指定回数実行後、進捗を出力
  • dumpthres
    • UCT木のダンプ時に指定数以上のプレイアウトのノードを出力する
  • resign_threshold
    • GJ_MINGAMES回数のプレイアウト後、勝率がこのしきい値以下なら投了する
  • sure_win_threshold
    • PLAYOUT_EARLY_BREAK_MIN回数のプレイアウト後、勝率がこのしきい値以上なら読みを止める
  • force_seed
  • no_tbook
  • 定石ファイルを使わない
  • pass_all_alive
    • ボード上のすべての死に石が打ち上げられるまでパスしない
  • allow_losing_pass
    • 負けの局面でパスを考慮する
  • territory_scoring
    • 地によるスコア(デフォルトは中国式)
  • stones_only
    • 眼を数えない
  • debug_after
    • 木を出力した後、比較として単スレッドで1000回のプレイアウトを行って出力する
  • banner
  • plugin
  • policy/random_policy
    • ノード選択ポリシーを設定する。デフォルトはucb1amaf
    • ucb1, ucb1amaf
  • playout
    • ランダムプレイアウトポリシーを設定する。
    • moggy, light
  • prior
    • ノードの優先順位ポリシー
  • mercy
    • プレイアウトを止めるアゲハマの差を設定する。望みのないプレイアウトを避ける。
  • gamelen
    • プレイアウトの最大手数
  • expand_p
    • この回数訪問したらUCTノードを展開する
  • random_policy_chance
    • 指定数値の逆数の確率でrandom_policyにdescendを使用する
  • playout_amaf
    • AMAFでプレイアウト数を増やす
  • playout_amf_cutoff
    • プレイアウトステージの指定%だけAMAF情報を保持する
  • amaf_prior
    • 実際の結果の部分の優先値を考慮するかAMAF項の部分を考慮するか
  • threads
    • スレッド数。デフォルトは1。
  • thread_model
    • 同じ木を並列化(tree)するか、違う木を並列化(treevl)するか
    • tree, treevl
  • virtual_loss
    • ノードを評価する前に加える仮想損失の数
  • pondering
    • 相手の考慮中も考える。デフォルトはtrue
  • max_tree_size
    • 木に使う最大メモリ。デフォルトは3GiB。
  • fast_alloc
  • pruning_threshold
    • 指定%以上のメモリを消費する木を刈る。デフォルトは10%
  • best2_ratio
    • 最善と次点の比が指定値より小さい間シミュレーションを延長する
  • bestr_ratio
    • bestとbest_best_childの比が指定値より小さい間シミュレーションを延長する
  • max_maintime_ratio
    • 秒読みでない時、通常時間のmax_maintime_ratioまでシミュレーションを延長する
  • fuseki_end
    • 秒読みでない場合、序盤はあまり考慮せず、指定値(%)で考慮時間が最大値となるように徐々に増やす
  • yose_start
    • 局面が指定値(%)に達したら考慮時間を一定にする。
  • dynkomi
    • 動的にコミを変える
    • none, linear, adaptive
  • dynkomi_mask
    • 動的コミを適用する手番
  • dynkomi_interval
    • 指定回数毎に動的コミを変更
  • extra_komi
  • val_scale
  • val_points
  • val_extra
  • val_byavg
  • val_bytemp_min
  • local_tree
  • tenuki_d
  • local_tree_aging
  • local_tree_depth_decay
  • local_tree_allseq
  • local_tree_neival
  • local_tree_eval
    • root, each, total
  • local_tree_rootchoose
  • patterns
  • significant_threshold
  • slave
  • slave_index
  • shared_nodes
  • shared_levels
  • stats_hbits
  • stats_delay
  • maximize_score

sgf-analyse.pl

tools/sgf-analyse.plにSGFフォーマットの棋譜を食わせると、指定の手番(黒番/白番)での各局面の期待勝率を出力してくれます。
OS XsedLinuxsedと互換性がない部分があるので、Macユーザーはgsedをインストールして、sgf-analyse.plのsedをgsedに置き換えましょう。