続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でやってるということになるのか。