TadaoYamaokaの開発日記

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

互角局面集作成スクリプト

勝率測定などに「たややん互角局面集」を使わせてもらっている。
ただ、抽出条件の「36手目の局面まで、全ての指し手について評価値が±100以内となっている対局のみ」だと、dlshogiの棋譜が除外されてしまう点が気になっていた。
dlshogiは、開始局面で160付近の評価値を付けるため、この条件だとdlshogiの先手番の棋譜がすべて除外される。

なお、dlshogiの評価値は若干大げさと言われることがあるが、勝率から変換する際のスケーリングの問題なので、一度ちゃんと調整した方がいいのかもしれない。

抽出条件の変更

たややん互角局面集の抽出条件は良く考えられており、24手目で互角という条件だけだと、その後すぐに形勢が傾く局面も含まれてしまうため、互角局面集としては使いにくい。
たややん互角局面集では、さらに36手目でも互角で、24手目が一意という条件になっているため、24手目を互角局面とすることで、すぐに形勢が傾くことがない。

基本的にこの考え方を踏襲して、dlshogiの棋譜が含まれるように「全ての指し手について評価値が±100以内」という条件を緩和して、

  • 全ての指し手について評価値が±170以内
  • 24手目と36手目で評価値が±100以内

という条件で作成するようにした。


抽出条件をすべて書くと、以下の通りである。

  • R3800以上同士の対局のみ
  • 投了、千日手入玉宣言勝ち、持将棋で終局している
  • 50手未満の棋譜は除外
  • どちらかに評価値がない棋譜を除外
  • 24手目の局面で重複がない(手順が異なり同一局面になる棋譜は重複と見做す)
  • 全ての指し手について評価値が±170以内
  • 24手目と36手目で評価値が±100以内

作成したスクリプト
DeepLearningShogi/csa_to_gokakusfen.py at master · TadaoYamaoka/DeepLearningShogi · GitHub

抽出結果

2019年から2021年9月までのfloodagteの棋譜から、上記のスクリプトで互角局面集を作成した。

結果、5,247局面が抽出できた。

たややん互角局面集は、1,957局面なので、局面数が約2.68倍になっている。

たややん互角局面集の24手目が今回作成した互角局面集に含まれるかをチェックした。

from cshogi import *
board = Board()
hcp = np.empty(1, HuffmanCodedPos)
gokaku = open('gokaku.sfen').readlines()
taya = open('taya36.sfen').readlines()
gokaku24 = [' '.join(gokaku36.split(' ')[:-12]) for gokaku36 in gokaku]
taya24 = [' '.join(taya36.split(' ')[:-12]) for taya36 in taya]
gokaku24_hcp = [(board.set_position(pos), board.to_hcp(hcp), hcp.tobytes())[2] for pos in gokaku24]
taya24_hcp = [(board.set_position(pos), board.to_hcp(hcp), hcp.tobytes())[2] for pos in taya24]
include = [t in gokaku24_hcp for t in taya24_hcp]
sum(include)
Out[11]: 1895
len(include)
Out[12]: 1957

手順違いで24手目に同一局面になる局面を同一と判定すると、1957局面中、1718局面が含まれていた。

今回の抽出条件で作成した24手目にすべて含まれていると思ったが、一部含まれていない局面があった。
差分を調べたところ、たややん互角局面集では36手目の指し手の評価値を使っていて、今回のスクリプトでは、37手目の指し手の評価値を36手目指した後の局面の評価値としていたのが原因であった。
たややん互角局面集と差があるが、その方が互角の条件としては厳しいので良いことにする。

まとめ

floodgateの棋譜から、たややん互角局面集とほぼ同じ抽出条件で互角局面集を作成するスクリプトを作成した。
ただし、dlshogiの棋譜が含まれるように評価値の条件を緩和した。
結果、たややん互角局面集より多い5,247局面が抽出できた。

36手目までを含んでいるが、互角局面集として使用する場合は、24手目から開始するように使用する方がよい。

追記

作成した互角局面集をGoogleドライブで公開します。
https://drive.google.com/file/d/1aM7fkTD6_7U61IcrOG8BI__shrZK4bHb/view?usp=sharing

2019/9/21追記

抽出条件が正しく適用されていないバグがあったため、作成し直した。
結果、17,048局面が、5,247局面になった。
Googleドライブのファイルを更新して、本文の方にも反映した。