遅いのはバグのせい

うちの将棋は、
西村さんのマイムーブと比べても格段に探索が遅いので、
やり方がおかしいのかな? とずーっと悩んでましたが、


手法がダメというのもありますが、いかにも読み筋がおかしいので、
まずはバグをなくすべきと思います(当然だ……)


あと大きいのが、
ハッシュの手でbetaカットが起きると凄い効率が良いはずですが(手の生成しないでいいし、オーダリングも不要)
その手が無効な手じゃないかのチェックがうまく行かず、これまで使用を断念してきましたが、
(キラームーブも手を生成して、そこに含まれるかを確認していた)
なんとか動きました。


手が異常かどうか?は、たとえば、

  • 移動先が味方
  • 移動元に自分がいない
  • 持ってない駒を打っている
  • 歩を打った先が二歩
  • 打った先が空白じゃない

なんてのは簡単に分かります。

  • 打ったら王手になってないか?

遅くなりそうですが、これもやってました。
それでも異常な手を打ってます。


やっと分かりました。


大駒で飛び駒の時に、移動元と移動先の間に駒がいるのに飛び越えてたんです(#゚Д゚)聞いてないぞゴルァ!!
違う読み筋が混入してるのか?と悩んでましたが、
うさぴょんさんの本の交換値の計算のページにある異常手判断関数で解決しました(゚Д゚ )ウマー


教訓:自分だけで考える前に、先見の知恵に力を借りよう


あと、Bonanzaの保木さんが、
ハッシュの手の後は、SEEで駒得する手を読んで、次にキラー、ヒストリーを読んで、最後に残りの手(カス)
という順番を推奨されてたんですが、
SEE駒得する手を調べるには手の生成もいるんで、
ハッシュの手、キラー手をまず調べている。実際どっちがいいかは自己対戦するなり、探索の効率を調べるなど調査がいるんだろう。