TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

棋力計測の戦型分類

floodgateの戦型分類の記事にコメントをいただいたので、棋力測定時の戦型について分類してみた。

棋力測定の方法

dlshogiの棋力測定は、平手開始局面から序盤ランダムありで測定を行っている。
また、基準ソフトとして水匠5を互角になる条件に調整して、リーグ戦で対局している。

dlshogiの序盤にランダム性を加えるのは、dlshogi同士の対局で同じ棋譜になるのを防ぐためである。
ランダムの条件は、32手まで評価値(勝率)が2.5%の範囲をランダムに選択する。
評価値(勝率)の範囲は1手ごとに0.1%小さくする。

cshogi.cliのコマンド例
python -u -m cshogi.cli /work/DeepLearningShogi/usi/bin/usi /work/DeepLearningShogi/usi/bin/usi /work/YaneuraOu/bin/YaneuraOu-by-gcc --name1 pre33 --name2 pre39 --name3 suisho5-16thx5000 --options1 Const_Playout:50000,Random_Ply:32,Random_Cutoff:25,Random_Cutoff_Drop:1,PV_Mate_Search_Threads:1,C_init:127,C_base:27126,C_fpu_reduction:31,C_init_root:112,C_base_root:33311,Softmax_Temperature:140,Draw_Ply:320,UCT_NodeLimit:50000000,OwnBook:false,PV_Interval:0,DNN_Model:/work/model/model-pre33_resnet30x384_relu_b4096lr004-012.onnx,UCT_Threads:2 --options2 Const_Playout:50000,Random_Ply:32,Random_Cutoff:25,Random_Cutoff_Drop:1,PV_Mate_Search_Threads:1,C_init:127,C_base:27126,C_fpu_reduction:31,C_init_root:112,C_base_root:33311,Softmax_Temperature:140,Draw_Ply:320,UCT_NodeLimit:50000000,OwnBook:false,PV_Interval:0,DNN_Model:/work/model/model-pre39_resnet30x384_relu_b4096lr004-013.onnx,UCT_Threads:2 --options3 NodesLimit:250000000,FV_SCALE:24,USI_Hash:10240,Threads:16,PvInterval:9999,ResignValue:10000,MaxMovesToDraw:320,NetworkDelay2:0 --opening-moves 100 --draw 320 --games 1000 --pgn 20230109_pre33_vs_pre39_po50k.pgn --csa csa/csa-20230109-pre33vspre39-rnd/po50k

戦型分類

dlshogi同士と、dlshogiと水匠5それぞれで、上位10個の戦型を分類した結果は以下の通り。

pre39とpre33がdlshogi(1GPU、2スレッド)の異なるバージョン、
suisho5が、探索ノード数をdlshogiの5000倍にした水匠5(16スレッド)である。

青の棒グラフは出現率、オレンジの線グラフ(右軸)が先手勝率を示す。


考察

dlshogi同士の対局では、角換わりが40%程度、相掛かりが20%程度になっている。

dlshogiと水匠5では、dlshogiが先手の場合は、角換わり45%程度、相掛かりが20%程度になっている。
dlshogiが後手の場合は、相掛かりが25%程度、角換わりが15%程度になっている。先手腰掛銀も12%程度ある。
水匠5が先手の場合、戦型がよりばらけるようである。

指し手を学習した場合

現在、dlshogiは、指し手ではなく訪問回数の分布を学習している。
エクスプロイターの学習では、指し手を学習している。
指し手を学習した場合、ランダムでの手がばらつきが少なくなることが予想できるため、戦型を確認してみた。

エクスプロイターが先手の場合、角換わりが55%程度、相掛かりが15%程度になっている。
訪問回数の分布を学習したdlshogi同士の対局よりも、戦型のばらつきが少なくなっている。

エクスプロイターが後手の場合は、dlshogi同士の対局と同じくらいである。


同じランダムの条件でも、指し手を学習したモデルは、ランダム性が少なくなるため、見かけ上勝率が高くなるため、棋力測定としては適切ではなさそうである。
モデルの質が異なる場合は、ランダムなしで互角局面集を使用して測定した方がよい。

まとめ

dlshogiの棋力測定時の戦型について調査した。
dlshogi同士の対局では、floodgateの戦型の割合に比較的近い値になった。
水匠5が先手の場合は、より戦型がばらけていることがわかった。

また、指し手を学習したモデルは、訪問回数の分布を学習したモデルに比べてランダム性が低くなることがわかった。
モデルの質が異なる場合は、ランダムなしで互角局面集を使用して測定した方がよさそうである。