56将棋でPerft
はい。約10か月ぶりのブログ更新です。
競技プログラミング(AtCoder)をしたり、ランニングしたりしてたらこんなに時間が経ってしまいました。
最近はAperyを56将棋エンジンに改造すべく、ぼちぼちソースコードをいじっていました。
で、指し手生成はできるようになったので、合法手生成がきちんとできているかチェックしました。
コンピュータチェス(将棋)では、Perftという方法でテストするのが一般的みたいなのでやってみました。
将棋でPerftしてみたまとめのまとめ | やねうら王 公式サイト
一言でいうと、「すべての合法手を生成して局面を進めたとき、n手後に現れる局面数を求める」テストです。(わたしの理解が正しければ)
本当は複数の人でテストして、結果が一致するか確かめたほうが良いのですが、
とりあえず今回はAperyベースとBonanzaベース(プチボナ)とでテストしました。
以下がその結果です。
平手初期局面
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将棋開発ブログのときに使ったやつ)
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ベースとで一致しました。
よかったですね。
【追記】
depth 6まで一致しました。shogi686microに書き足してやりました。
— merom686 (@merom686) 2018年3月13日
ブログ更新からわずか数時間。天才かよ。(感謝)
今後はAperyの改造をぼちぼち進めつつ、だいぶ放置しているAndroidアプリのほうもやっていきたいです。
それでは。