56将棋開発ブログ

5×6マスのミニ将棋、「56将棋」で遊べるものをいろいろ開発してます。

56将棋でPerft

はい。約10か月ぶりのブログ更新です。

競技プログラミングAtCoder)をしたり、ランニングしたりしてたらこんなに時間が経ってしまいました。

最近はAperyを56将棋エンジンに改造すべく、ぼちぼちソースコードをいじっていました。
で、指し手生成はできるようになったので、合法手生成がきちんとできているかチェックしました。
コンピュータチェス(将棋)では、Perftという方法でテストするのが一般的みたいなのでやってみました。

chessprogramming - Perft

将棋でPerftしてみたまとめ - Qiita

将棋でPerftしてみたまとめのまとめ | やねうら王 公式サイト

一言でいうと、「すべての合法手を生成して局面を進めたとき、n手後に現れる局面数を求める」テストです。(わたしの理解が正しければ)

本当は複数の人でテストして、結果が一致するか確かめたほうが良いのですが、
とりあえず今回はAperyベースとBonanzaベース(プチボナ)とでテストしました。
以下がその結果です。

平手初期局面
f:id:tetsuzuki1115:20180313173232p:plain
sfen rskgb/ppppp/5/5/PPPPP/BGKSR b -
depth: 1 5
depth: 2 25
depth: 3 198
depth: 4 1538
depth: 5 15301
depth: 6 149264
depth: 7 1685699


いろいろな指し手が現れるように適当に作った局面
Bonanza 56shogi 指し手生成 - 56将棋開発ブログのときに使ったやつ)
f:id:tetsuzuki1115:20180313173452p:plain
sfen 2kgB/1pp2/1s1P1/1B2p/r1PS1/3K1 b RG3P2p
depth: 1 63
depth: 2 1621
depth: 3 75088
depth: 4 1797781
depth: 5 71016894
depth: 6 1767336536
depth: 7 62269369719

2つの局面ともに、depth7までの局面数がBonanzaベースとAperyベースとで一致しました。
よかったですね。

【追記】


ブログ更新からわずか数時間。天才かよ。(感謝)


今後はAperyの改造をぼちぼち進めつつ、だいぶ放置しているAndroidアプリのほうもやっていきたいです。
それでは。