🖩 詰め将棋再考

2021/10/15

🖩 詰め将棋再考  JS将棋の詰みを読むスピードを、現時点のメモとして再度記しておきます。 ゆくゆく機械学習との連動を考えているため、Perl版の開発はストップし、力を Python 版に集中しています。 Perl 版はバグが残ったり、効率が悪かったりするままになっていて遅いですが、別に Perl が遅いわけではありません (現在の Web 上の JS将棋 v.4.27 は Cpython2 版となっています)。


【まいにち詰将棋の解答速度を比べる】

問題 Perl5 CPython2 CPython3 Pypy3
9/13三手詰 0秒 0秒 0秒 0.1秒
9/17五手詰 4秒 1.1秒 1秒 1.2秒
9/21五手詰 2秒 1.5秒 1.8秒 1.2秒
9/8七手詰 29秒 15.4秒 18.3秒 4.7秒
9/15七手詰 400秒〜 15.1秒 18.3秒 4.1秒

 以前は5-10秒はかかっていた5手詰めが 1秒かかるかどうかです。 速くなってきたことは確かなようです。

 中でも、重い処理を任せると、Pypy の速いことがわかってきました。 現時点では、リストの高速処理を必要とするまでになっていないので numpy は使っていません。 ゆくゆく numpy を import したいので、安定して動くと言われる Pypy3 を選択しています。

 また、twitter で、詰め将棋にはパタン認識はだめなので、機械学習でいくといいましたが、冷静に考えてみると、それも難しいようです。 1つのマスに置けるコマは王から歩まで8種類、成を考えると13種類、さらに敵か味方かで26種類、空きの場合も含め 27種類あります。 いくら狭い範囲のパタンを考えるといっても、最低10マスはないと話にならないでしょう。 この時点で、全てのコマの配置の組合せを計算してみると、2710、つまり200兆種類以上あります。 さらに、その範囲外から角や飛車の影響を受け、持ち駒の種類によっても左右されるので、実際はその何億倍ものケースを考えることになります (まあ実際は重複順列だのなんのかんので、ここまで多くはならないでしょうが、マスも実際のところ 25 マスはほしいので、これより状況がよくなることはないでしょう)。 これではデータを蓄積するだけでパンクし、とても活用しきれたものではありません。

 このため、やはりコマの配置はパタン化して考えざるをえないのです。 問題は、現在の JS将棋がパタン化と相いれないプロセスで詰みを計算しているので、無理にパタン化しようとすると数倍遅くなってくることです。 そこで、最初から、詰みをパタンとして判断するエンジンに載せかえ、いつでも機械学習によるパタンの恩恵を受けられるように作り変えることにします。 現在は、そのスタートポイントです。

 さて、ここからどのように進化していくでしょうか……。

参考: JS将棋

twitterシェア Facebookシェア
  コメントの注意点