sakurapyon’s blog

sakurapyon’s blog

指し手は細かく分類した方がいいのか?

bonanzaHistoryは ハッシュを使って細かく管理されているようなんだけど、細かく管理した方が本当にいいのかどうかは実に悩ましい。

chessprogramming - Countermove Heuristicや、chessprogramming - History Heuristicがfrom,toだけなのは、チェスでは駒打ちはないし成るのはポーンだけだから、駒種は見なくても大丈夫というのもあるのだと思う。


じゃあ将棋の場合は細かく区別した方がいいかどうか? 「そこに駒があるかどうか?」が問題であって、どの駒があったかはそんなに重視しなくてもいい、という発想もありそうな気がするんだよね。極端な例は間接王手に対する合駒の場合。無駄合いならなおさら。


だからfrom,toだけとか駒種,toだけとかという実装があるのだと思う。


実は、sakurapyonのカウンター手のインデックスは、手番,from,toだけで打つ手のときも駒種を考慮していない。元々は打つ手のときだけは駒種を見るつもりだったんだけど、バグってて打つ手のときも駒種を見ていなかった。ある時それに気づいて、ちゃんと駒種を見るようにしたら弱くなった (-.-;


たぶん、こういうことではないかと推測している。

全幅で手生成して枝刈りが甘いプログラムは、只捨ての手を山ほど生成する。敵の歩先に飛車を打ってみるとか。ごく稀に好手があるんだけど、好手が好手なのは大抵の場合悪手になるからで、実際只捨ての手の大部分は悪手である。 只捨てに対するカウンター手は、それを取ってしまうこと。この場合は、細かいことは考えなくて(駒種なんか見ないで)、まず取る手を考えるのが好手になりやすい、のだと思う。

逆に言えば、ちゃんと絞り込んだ手を生成してて只捨ての悪手などは考えないプログラムなら効果が薄いのだと思う。よく練り込まれた指手の絞り方をしているプログラムにはこのような問題は少ないはずというのは、そういうことなのだろう。