この記事はpython-shogiの宣伝です。あしからず御了承下さい。
コンピュータ将棋界隈では諸々の事情でC++の天下です。
しかしながら,pythonでできることも沢山ありますし,pythonの方がいいことも沢山あります。
たとえば,コム将対戦の場であるfloodgateの棋譜はCSA形式ですが,このデータの処理,特に集計はpythonでやるのがおすすめです。
たとえばCSA形式のファイルひとつを持って来てjupyterで以下のように三行打ってみて下さい。
import shogi.CSA
kif = shogi.CSA.Parser.parse_file('test.csa')[0]
'startpos moves '+' '.join(kif['moves'])
例えば以下のようにCSA形式のデータがusiプロトコルの局面データになります。
startpos moves 7g7f 8c8d 2g2f 8d8e 2f2e 3c3d 6i7h・・・
KIF形式にも対応していますし,少々プログラムを書けばCSAの一行表記などにも簡単に対応できるでしょう。
また,ipywidgetsを使うと色々便利になります。
まずは以下の二行をコマンドラインから打ち込んでipywidgetsを有効にしましょう。
pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension
分からなければipywidgetsでググってください。
出来たら最初の棋譜を読み込んで以下のようなプログラムを走らせてみて下さい。
import shogi.CSA
from ipywidgets import interactkif = shogi.CSA.Parser.parse_file('test.csa')[0]
@interact(n=(0, len(kif['moves'])))
def interact_board(n):
board = shogi.Board()
for move in kif['moves'][:n]:
board.push_usi(move)
print(board.kif_str())
以下のようにスライダーが表示されると思います。
スライダーをマウスで移動させることにより棋譜のn手目の局面がインタラクティブに表示されます。
コム将ならこの途中になんらかの評価などの処理を盛り込むと分析が捗ったりするんじゃないでしょうか。
ということで,実行速度より開発速度を重要視するような簡単な実験を行うのはpythonがおすすめです。
そういえばローカル対戦をさせるスクリプトがやねうら王で利用されていたと思いますし,dlshogiでも学習用データの管理に利用されていたように記憶しています。
そんな風な話が10月の広島で聞けるとかそういう宣伝も最後に挟んで久しぶりのblog更新を終わりにします。
追記: