オンライン解析 · 02

SGFソースからKataGo 変化図まで

FF[4]のソーステキストから、ノード、プロパティ、座標、分岐を読み、OGS、KaTrain、Sabaki、SmartGoから棋譜を出力してRead19とKataGoで解析します。

  1. まずSGFをテキストの木として見る

    SGFはSmart Game Formatの略です。一つのコレクションに複数局を収められ、各対局は丸括弧、各ノードはセミコロン、大文字のプロパティ値は角括弧で表します。最小例は (;GM[1]FF[4]SZ[19];B[pd];W[dd]) です。

    文法は五つの記号から読めます。丸括弧がGameTreeを包み、セミコロンがNodeを始め、大文字がProperty名、角括弧が値、バックスラッシュが本文中の構造文字をエスケープします。値の外の空白は通常無視されますが、値の中では本文になり得ます。一つのCollectionに複数のGameTreeを続けて置けるため、.sgfファイルが一局だけとは限りません。SGFは着手の表ではなく、コメント、記号、変化が各ノードに付く再帰的な構文木です。

    AlphaGo第2局の完全な棋譜も(;から始まり、GameTreeの中にルート、実戦ノード、解析分岐が入ります。
  2. ルートノードで解析の前提を確認する

    最初のセミコロンに続くルートノードは全局情報です。FF[4]は形式、GM[1]は囲碁、CA[UTF-8]は文字コード、SZ[19]は盤の大きさです。KM、RU、HA、PL、AB、AW、AEがコミ、ルール、置き石、手番、初期配置を決めます。

    ルート属性の順番は変わっても、値は解析の前提を決めます。FF[4]とGM[1]はFF[4]の囲碁棋譜、CA[UTF-8]は文字コード、APは作成ソフトです。SZ[19]、KM[7.5]、RU[Chinese]、HA[0]が盤とルールを定義します。置き碁ではHA、AB、PLを一緒に見ます。HA[2]だけでABの黒石が二つなければ盤面は誤りです。KM[0]も「値なし」ではなく本当のゼロなので、既定コミへ置換してはいけません。

    FF、GM、CA、APの後にSZ、KM、RU、HA、PL、AB、AW、AEを読みます。メタデータはKataGoへの入力です。
  3. 着手を読む:SGF座標は盤面座標と異なる

    B[pd]は黒、W[dd]は白の着手です。SGFは左上aaから19路盤の右下ssまで、縦横とも連続した小文字を使い、一般的な盤面座標のようにIを飛ばしません。FF[4]でパスを表す標準形はB[]またはW[]です。

    SGFの点は小文字二つで、横、縦の順、原点は左上です。aaが左上、19路盤のssが右下です。一般的な盤面座標とは方向も文字表も異なり、盤面表示は左下から数えてIを飛ばしますが、SGFはIを飛ばしません。そのためAlphaGoの37手目は盤上でP10、ソースではB[oj]です。空の値も意味を持ち、FF[4]でパスはB[]またはW[]です。古い19路棋譜のttは互換表現で、新規出力の標準形にはしません。

    同じ一手が盤面ではP10、SGFではB[oj]になります。原点、大文字小文字、Iを飛ばすかが異なります。
  4. 分岐と記号を読む:変化図の元データ

    連続するノードが一本の経路になり、同じノードの後に並ぶ丸括弧が兄弟分岐になります。通常は最初が主変化です。Cはコメント、Nはノード名、TR、SQ、CR、MA、LBは盤面記号、AB、AW、AEは局面設定です。変化図はこの木を可視化します。

    一つのノードの後に(;B[oj]...)(;B[dc]...)と書けば兄弟分岐になり、それぞれの内部へさらにGameTreeを入れられます。通常は最初の分岐が主変化ですが、保存形式そのものは動画ではなく木です。Cは現在ノードのコメント、Nは名前、TR、SQ、CR、MA、LBは三角、四角、丸、バツ、ラベルです。Read19はこの関係を変化図へ写すため、36手目からP10、D13、E12を開く操作は同じ親の子部分木を切り替えることです。

    ソースの並列括弧が変化図の分岐カードになり、実戦、候補、自分の応手は別々に保存されます。
  5. 一般的なソフトからSGFを出力する

    OGSは終局した対局のサイドパネルにDownload SGFがあります。KaTrainはCtrl+Cで現在のSGFをクリップボードへコピーできます。SabakiはFile → Save Asで.sgfを保存し、GIBやNGFも開いて変換できます。SmartGoはSave As、SmartGo KifuはMy Gamesから共有またはメールで出力します。

    盤面画像ではなく実際の棋譜を出力します。OGSは終局した対局の右サイドパネルにDownload SGFがあります。KaTrainは公式のCtrl+Cで現在の完全なSGFをクリップボードへ置き、そのままRead19へ貼れます。SabakiはFile → Save AsでSGFを保存し、GIBやNGFを開いて変換することもできます。SmartGoデスクトップはSave As、SmartGo KifuはMy Gamesで対局を選び、共有またはメールで出力します。表示名はOS言語や版によって少し異なります。

    OGSはダウンロード、KaTrainはコピー、SabakiはGIB/NGF変換、SmartGoは共有を使い、最後はSGFテキストにします。
  6. Read19へ読み込み変化図で試す

    .sgfファイルを選ぶか、左括弧で始まるソースを貼り付けます。棋士、終局前の数手、SZ、KM、RU、HA、初期配置を確認してから全局を軽く解析します。転機だけ探索量を増やし、実戦、KataGo候補、自分の応手を同じ分岐点の下に保存します。

    解析できたことは棋局が正しい証明ではありません。終局へ移動し、最後の三〜五手、総手数、結果を元対局と照合します。次にルートのPB、PW、SZ、KM、RU、HA、PL、AB、AW、AEを確認します。その後で全局を軽く解析し、勝率と目差の転機だけ深く読みます。変化図にはAlphaGoの実戦P10を残し、D13とE12を別々に開き、自分の自然な応手も加えます。座標列の暗記ではなく、脅威、先手、弱い石を比べます。

    解析 → メタデータ確認 → 全局走査 → 転機の深算 → 変化図比較の五層で一回の解析が完成します。

仕様と出力方法の根拠

  1. SGF FF[4]公式仕様
  2. OGS:対局サイドパネルからSGFを取得
  3. KaTrain:SGFクリップボード操作
  4. Sabaki:SGF、GIB、NGF対応
  5. SmartGo:保存と出力のヘルプ

読み込み後の確認項目

  • 有効なGameTreeで始まり最後まで解析できる
  • 棋士、手数、終局前の着手が原局と一致する
  • SZ、KM、RU、HA、PL、初期配置が正しい
  • 文字コードが正しくコメントが文字化けしない
  • 主線と変化が入れ替わっていない
  • 変化図で自分の応手を一つ試した
KataGo解析サンプルを開く