cshogiには、やねうら王の教師局面(PackedSfenValue)を読み込む機能を実装していたが、指し手を正しく扱えていなかった。
Twitterで報告いただいたので、対応を行った。
教師データそのまま(バイナリ)とテキストに変換したもので局面の読み込みは100%で不一致、指し手は駒を打つ場合を正しく扱えていないみたい。
— Fluke (@Windfall_shogi) 2019年9月23日
YaneuraOuの仕様が変わったとか、ビルドの仕方でバグが入るとかないよね。
cshogiは内部的にAperyの実装を採用しており、Aperyとやねうら王では指し手の駒打ちと成りのビットが異なっているため、そのままでは指し手が使えなかった。
そこで、変換する関数と、直接使用できるメソッドを追加した。
ついでに、局面をPackedSfenで保存するメソッドも追加した。
変換する関数
- move16_from_psv
使用例:
from cshogi import * import numpy as np psv = np.fromfile("shuffled_sfen.bin", PackedSfenValue) move16 = move16_from_psv(psv[0]['move'])
- move16_to_psv
Apery形式からやねうら王形式に逆方向の変換
局面をPackedSfenで保存
- to_psfen
使用例:
data = np.empty(1, PackedSfenValue) board.to_psfen(data)
2019/10/20 追記
既存のmove16がデグレードしていたため修正しました。