nullWindow探索の手法の疑問
YSS掲示板でLMTやHistoryのreduction話題が出てますが、
http://524.teacup.com/yss/bbs
LMTは以前山下さんが紹介してたRankCutを簡単にした感じがしますね。
で、そのLMTを紹介している人のコードが、
PVSのNullWindow探索の部分を、
if(value > alpha) { value = -search(-(alpha+1), -alpha, depth-1); if(value > alpha && value < beta) value = -search(-beta, -alpha, depth-1); }
と書いてるのですが、
[-alpha-1 , -alpha]での探索結果は、alpha以下かどうか? は有効でしょうけど、
beta以上が帰ってきたからといってbetaカットしていいのだろうか?
実際は[alpha+1,beta-1]に値が納まってることもありそう。
fruitChessのソースを見る限りでは、
if(value > alpha ) //&& value < beta)
のように使用をためらってるようです。
上記のように書いた方が速くbetaCutは起きそうですが……
っていうか実際に探索して、そういう場合がある割合を調べればいいのか(^^;
あまり起きないようならbetaCutしちゃってもOKだろうし。
いかん、チラシの裏になってしまった。
コメント欄にうさぴょん育ての親さんに書いていただきましたが、Fail-Softならbetaカットで良いようです。
ただ、reduciton & re-searchの時は、慎重に要熟慮のようです。
うさぴょん育ての親さんの隠し玉が成功したようです
http://usapyon.cocolog-nifty.com/shogi/2007/05/32bit_224f.html
隠し玉なんでリンクしない方がいいかな?と思いましたが(^^;
reductionをされたみたいです。
徹夜作業だったみたいで、今はテストセットを流しながらお休みになってるようです(^^;