ひよこカルロ将棋のnpsについて

ひよこカルロ将棋v0.08のnpsは平均的には2Mnps程度です。前のバージョンまでは5Mnps程度出ていました。

しかしv0.08になったときに静止探索の手前で枝刈りをするようにしました。

静止探索とは手番を活かして、駒の取り合いによっていま以上の評価値になる手があるかどうかを探す探索でして、つまり、手番を持っている側が現在の評価値以下になることはない(と仮定している)わけです。(この現在の評価値のことをstandpatと呼びます。)

すなわち、静止評価を呼び出すその1手前でif (次のstandpat <= alpha) であれば、この指し手がalpha値を更新しないことは確かです。駒得だけの評価関数ですので次のstandpatとは、現局面の評価値+捕獲する駒の価値×2(交換値)です。

このような枝刈りを入れることにしました。これは枝刈りしないときとまったく等価な探索結果になる安全な枝刈りです。

そうして、この枝刈りをしたときはノードをひとつ調べた扱いにして、探索したnode数を記録しておくカウンターに1足すコードを書きました。そうするとさっきと同じ局面で5.5Mnps程度出ていることがわかりました。10%程度npsが上がったことになります。

しかし、この枝刈りしたノードをカウントするのはずるいような気もして、ここでnodeをカウントするのはやめることにしました。そうすると見かけ上はnpsは2Mnps程度になりました。しかし実際はその2,3倍の数字が出ております。

futility pruningなんかについてもきっと同様で、実際に調べたことに相当するnode数の半分とか1/3ぐらいの数値になってしまうのだと思います。

ひよこカルロ将棋に関しても同様でして「npsが下がっている = 探索量が減った」ではないということをここに書き残しておきます。