Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: A question about Null-Move pruning implementation

Author: Omid David Tabibi

Date: 17:55:41 07/12/03

Go up one level in this thread


On July 12, 2003 at 20:44:50, Federico Corigliano wrote:

>In previous version of my chess engine I have:
>
>if(!in_check && !threat && (phase != ENDGAME) && depth > 2)
>{
>    Do_null_move()
>    ...
>
>
>Now I changed it to:
>
>if(!in_check && !threat && (phase != ENDGAME))
>{
>    Do_null_move()
>    ...
>
>And performs better in the WAC test suite.
>Now when the remaining depth is < than R, it goes directly to the Qsearch,
>because I have:
>
>if(depth <= 0 || depth >= MAXDEPTH)
>{
>    score = Qsearch();
>    return score;
>}
>
>Anyone probed this? It's safe?

Yes. Take a look at the following pseudo code of standard null-move pruning:

/* the depth reduction factor */
#define R 2
int search (alpha, beta, depth) {
    if (depth <= 0)
        return evaluate(); /* in practice, quiescence() is called here */
    /* conduct a null-move search if it is legal and desired */
    if (!in_check() && null_ok()) {
        make_null_move();
        /* null-move search with minimal window around beta */
        value = -search(-beta, -beta + 1, depth - R - 1);
        if (value >= beta) /* cutoff in case of fail-high */
            return value;
    }
    /* continue regular NegaScout/PVS search */
    . . .
}


But if you implement verified null-move pruning note that in some cases
depth > 1, see http://www.cs.biu.ac.il/~davoudo/pubs/vrfd_null.html



>
>Federico



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.