# 自己対局 自己対局は、コンピュータ将棋ソフトが自分自身、または同系統で近い条件の相手と自動で多数回対局する運用である。英語では `self-play` と呼ばれる。[AlphaZero](/shogi/shogiwiki/alphazero/) 型の学習では中心概念として使われるが、コンピュータ将棋ではそれ以外にもレーティング測定、探索パラメータ調整、定跡データベースの検証などに広く使われる。 狭い意味では `同じプログラム同士の対局` を指すことが多いが、実務上は `同系統の設定差分を大量対局で比較する運用` まで含めて自己対局と呼ばれることもある。 ## 概要 自己対局では通常、同じ実行ファイルを先後入れ替えながら多数回対局させる。条件としては、持ち時間、スレッド数や GPU 数、定跡や開始局面集、千日手や持将棋の規則、投了閾値、入玉宣言勝ち、詰み探索の有無などを揃えることが多い。 開始局面を工夫しないと同じ序盤に偏りやすいため、初期局面集や[互角局面集](/shogi/shogiwiki/books/balanced-positions/)を使って多数の局面から対局を始めることも多い。これは学習データ生成だけでなく、レート測定や回帰試験でも重要である。 ## 主な用途 ### 学習データ生成 [AlphaZero](/shogi/shogiwiki/alphazero/) 型では、自己対局で得た局面と終局結果を次の学習に使う。MCTS の訪問回数分布を方策の教師として、終局結果を価値の教師として扱い、その循環を繰り返すことで探索と評価関数を同時に改善する。 将棋の実装では、純粋な自己対局だけでなく、人間棋譜や他エンジンとの対局結果を混ぜることもある。そのため自己対局は、強化学習の核であると同時に、学習データをどう作るかという実務上の問題でもある。 自己対局から方策分布や終局結果をどのように教師へ変換するかについては、[教師データ生成](/shogi/shogiwiki/self-play/training-data-generation/)を参照。 [AlphaZero](/shogi/shogiwiki/alphazero/) 型では自己対局そのものが学習データ生成の中心になるが、alpha-beta 系の将棋プログラムでも自己対局は重要である。たとえば、Bonanza 系の三駒関係評価関数の学習結果改善や、近年の [NNUE](/shogi/shogiwiki/search/nnue/) 評価関数の強化・比較・追加学習でも、自己対局や自己対局に近い大量対局が使われることがある。これは、教師データだけでは見えにくい評価関数の実戦性能を、実際の対局結果を通じて補正・検証できるためである。 Bonanza 系の文脈では、教師データが不足した場合の学習結果改善に、対局結果を用いた強化学習類似の反復改善が研究されている。これは、三駒関係評価関数のような従来型評価関数においても、自己対局が学習後の補正や性能向上に役立つことを示す例である。 ### レーティング測定・回帰試験 新旧バージョンや異なる評価関数、異なる定跡、異なる探索設定を大量に当て、勝敗からレーティング差を推定する用途でも自己対局は重要である。実際の開発では、単発の強さ確認よりも、変更前後の差分を継続的に測る回帰試験の意味合いが強い。 ShogiBench のようなベンチマーク基盤では、開始局面、先後反転、時間設定、book seed などを揃えて固定局数テストや SPRT 形式の比較を行う。TanukiColiseum や各種ローカル対局スクリプトも、この用途を強く意識した運用例である。 ### 探索パラメータ調整 時間管理、枝刈り閾値、MCTS や USI のオプションなどを、自己対局や近い条件の対局結果で比較して自動調整することがある。パラメータの相互作用が強いため、人手の微調整よりも大量対局による比較が重要になることが多い。 ### 定跡データベースの検証 定跡データベースを切り替えて多数対局し、勝率、採用局面の偏り、序盤で不利になりやすい変化、特定戦型への誘導の強さなどを調べることがある。開始局面集や互角局面集は、この検証条件を揃えるための入力として使われることも多い。自己対局は[定跡自動生成](/shogi/shogiwiki/search/joseki-automatic-generation/)や定跡データベースの整備とも関係が深い。 ## [AlphaZero](/shogi/shogiwiki/alphazero/) 型との関係 AlphaZero では、自己対局によって生成したデータだけを用いて、探索付きの方策・価値ネットワークを反復的に更新する。将棋では `探索付き自己対局で教師を作る` こと自体が計算資源を要するため、開始局面の作り方、探索回数、温度、ノイズ、終局規則の扱いなどが実務上の重要事項になる。 この意味で自己対局は、単なるデータ収集ではなく、AlphaZero 型の学習ループ全体を支える中核工程である。 ## dlshogi での位置づけ DeepLearningShogi では、`selfplay` ディレクトリが MCTS による自己対局を担当し、開始局面集、USI エンジン混合対局、詰み探索、[hcpe3](/shogi/shogiwiki/self-play/hcpe3/) 出力などを扱っている。学習用の `hcpe3` には、開始局面、手数、終局結果に加えて、自己対局由来か USI 対局由来かを区別するための `opponent` 情報も入る。 また `dlshogi/utils/matches.py` は USI エンジン同士の対局や開始局面付き検証に使え、`dlshogi/utils/spsa_usi_tuner.py` は開始局面ファイルを使いながら USI パラメータを SPSA で調整するための補助スクリプトである。このため dlshogi における自己対局は、単なる `自分同士の対局` ではなく、学習・検証・調整をつなぐ実務上の基盤になっている。 ## 周辺ツール 自己対局の運用では、USI 対応 GUI や対局管理ツール、分散ベンチマーク基盤が使われる。 - TanukiColiseum コンピュータ将棋 USI エンジン自己対戦ソフトウェア。開始局面ファイル、同時対局数、持ち時間などを指定して大量対局を行える。 - ShogiBench OpenBench 系の発想を将棋向けに使う比較・回帰試験基盤。固定局数テストや開始局面付き比較を通じて、変更差分の強さや安定性を測る用途に向く。 - ShogiHome USI 対応エンジンを登録して対局や検討ができるフロントエンド。自己対局専用ソフトではないが、検証環境を整える入口として有用である。 ## 実務上の注意 - 初期局面だけで回すと序盤が偏りやすい。 - 先後反転や開始局面 seed を揃えないと比較が不安定になりやすい。 - 短時間条件と長時間条件では結果が変わりやすい。 - レート測定用対局と学習用自己対局では、望ましい設定が異なる。 - 引き分け規則や入玉規則の違いが結果分布に影響する。 - 対局結果だけでなく、生成された局面数や重複率、候補手分布を見ることもある。 ## 関連項目 - [コンピュータ将棋用語](/shogi/shogiwiki/terms/) - [AlphaZero](/shogi/shogiwiki/alphazero/) - [教師データ生成](/shogi/shogiwiki/self-play/training-data-generation/) - [hcpe3](/shogi/shogiwiki/self-play/hcpe3/) - [評価関数](/shogi/shogiwiki/evaluation-function/) - [探索](/shogi/shogiwiki/search/) - [定跡・局面集](/shogi/shogiwiki/books/) - [dlshogi](/shogi/shogiwiki/softs/dlshogi/) - [互角局面集](/shogi/shogiwiki/books/balanced-positions/) - [探索パラメータの確率的最適化](/shogi/shogiwiki/search/search-parameter-optimization/) - [レーティング測定方法について](/shogi/shogiwiki/howtorate/) - [レート計算スクリプトの使い方](/shogi/shogiwiki/howtouseratescript/) ## 参考にしたホームページ - [David Silver, et al. "Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm"](https://arxiv.org/abs/1712.01815) - [TadaoYamaoka/DeepLearningShogi](https://github.com/TadaoYamaoka/DeepLearningShogi) - [dlshogi 第36回世界コンピュータ将棋選手権アピール文書](https://www.apply.computer-shogi.org/wcsc36/appeal/dlshogi/dlshogi_appeal_wcsc36.pdf) - [nodchip/TanukiColiseum](https://github.com/nodchip/TanukiColiseum) - [ShogiBench](https://github.com/nodchip/ShogiBench) - [ShogiHome](https://sunfish-shogi.github.io/shogihome/) - [金澤裕治: 教師データが不足した環境での機械学習結果改善手法](https://cir.nii.ac.jp/crid/1050564287860658816)