TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

cshogiにやねうら王の教師局面の入出力機能追加

cshogiには、やねうら王の教師局面(PackedSfenValue)を読み込む機能を実装していたが、指し手を正しく扱えていなかった。
Twitterで報告いただいたので、対応を行った。

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形式からやねうら王形式に逆方向の変換

直接使用できるメソッド

使用例:

board.set_psfen(psv[i]['sfen'])
move = board.push_psv(psv[i]['move'])

局面をPackedSfenで保存

  • to_psfen

使用例:

data = np.empty(1, PackedSfenValue)
board.to_psfen(data)

2019/10/20 追記

既存のmove16がデグレードしていたため修正しました。