続ProbCut実験中
根本的に考え方が間違ってたみたいで、
ProbCut(2,5)という場合は、
これから5手探索する場合に、2手をnullWindowで探索して、マージンを超えてたらカットしてもいいよね。
ということみたいでした。
自分は勘違いして、depth=0,DepthMax=5の時探索するとか思ってた(^^;
しかも、nullWindowで再探索するから無限ループになる場合があったり(^^;
Buroの論文だと、depthじゃなくて、heightで、だんだん減らして探索させてますね。
そのへんで勘違いしました。
なんちゃってMPCで次のようなコードでやってます。
マージンはてきとーで、BANDBASE=200前後にしてます(歩の交換値ぐらい?)
この場合は、(1,3)(2,4)でProbCutなので、差が2なので、boundはBOUNDBASE*2にしてます。
(2,7)とかやるときは、差が5なので、BOUNDBASE*5=1000ぐらいとか。すごいてきとーですね(^^;
int bound=BOUNDBASE*2; for(int i=3;i<=4;i++) { if( (int)depthMax-depth==i ) { if( (v=-AlphaBeta(SorE,-alpha+bound-1,-alpha+bound,depth,depth+i-2 ,0,0 )) <= alpha-bound ) { probcut++;retval=alpha;goto AddHash; } if( (v=-AlphaBeta(SorE,-beta-bound,-beta-bound+1, depth,depth+i-2 ,0,0 )) >= beta+bound ) { probcut++;retval=beta;goto AddHash; } } }
ただ、次の一手問題は正解が減ったので、あまり芳しくないです。パラメーターを大きめにしてるつもりなんですが、
間違って刈ってるんだろうか?
色々と調べてみようと思います。
ProbCutは検索すると、オセロでは、日本でも実装してコードを書いてる人がけっこういますね。
nullWindow探索をshallow searchという言い方をするみたい。
と思って調べたら、shallowは「浅い」という意味じゃん(^^;
ということは、NullWindowとは違うな。
そうか、(2,4)だと、4探索するところを2探索で済ましてるから、浅いということか。
さらに、その浅いサーチを、nullWindowでやってるということになるのか。