AlphaZeroのセルフプレイ部を作成します。
セルフプレイ(自己対戦)では、デュアルネットワークの学習に利用する学習データを作成します。
まずセルフプレイに必要なパッケージをインポートします。
1 | # ==================== |
セルフプレイのパラメータを定義します。
1 | # パラメータの準備 |
最終局面から先手プレイヤーの価値を計算します。
先手が勝利の時は1、敗北の時は-1、引き分けの時は0を返します。
1 | # 先手プレイヤーの価値 |
セルフプレイを実行して収集した学習データ(状態と方策、価値のセット)をファイル出力します。
1 | # 学習データの保存 |
1ゲーム分実行して、学習データを収集します。
ステップ毎に、pv_mcts_scores()で「方策」を取得します。
これは合法手の確率分布なので、すべての手の確率分布に変換して保持します。
「価値」は1ゲーム終了したときにfirst_player_value()で計算します。
1 | # 1ゲームの実行 |
セルフプレイを行います。
ベストプレイヤーのモデルを読み込み、指定回数分のゲームを行います。
最後に、収集した学習データをファイル出力します。
1 | # セルフプレイ |
動作確認のための実行コードを実装します。
1 | # 動作確認 |
実行結果は下記の通りです。
dataフォルダ配下に[タイムスタンプ].historyファイルが作成されます。
次回はこの学習データを使ってデュアルネットワークの学習を行います。
参考
AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門 サポートページ