# Computer Chess Club Archives

## Messages

### Subject: Re: When to do a null move search - an experiment

Author: Gerd Isenberg

Date: 13:14:39 04/28/04

Go up one level in this thread

```On April 28, 2004 at 13:45:05, Ed SchrÃ¶der wrote:

<snip>

>What is double nullmove? I only know recursive nullmove allowing multiple
>nullmoves. I also read about "allowing 2 nullmoves in a row". What are the
>differences?
>
>I use recursive nullmove, not allowing the next ply after the nullmove to
>nullmove. So:
>
>  e2-e4
>  e7-e5
>  **-**     // nullmove
>  d7-d5     // do no allow nullmove
>
>When I remove that check I get a few percent speedup, results look okay.
>
>Ed

Hi Ed,

yes Double Nullmove, suggested and invented by Vincent, allows to play two
nullmoves in a row, to efficiently get rid of zugzwang problems. It is recursive
too, and if i understand correctly, it works fine without any nullmove
precondition:

if (!inCheck)
{
if ( move2thisNode != null || move2ParentNode != null ) (
val = -doNullMoveSearch(depth-1-R,...);
if ( val >= beta ) return val; // return beta;
}
}

May be Vincent may correct me.
It seems that there is an implicit kind of IID with 2R-2 too.

What i do (did?), is a conditional confirmation search with same depth reduction
if a single nullmove fails high. To look whether there is at least one move
equal or better than doing nothing. Pseudo code like this:

if (!inCheck)
{
eva = evaluate(&thread,..); // thead is negative if eg. own pieces hang
if ( move2thisNode != null && eva + thread - margin >= beta )
(
val = -doNullMoveSearch(depth-1-R,...);
if ( val >= beta )
{ // nullmove cutoff?
if ( !likely2haveZugzwang() )
return val;
if ( search(depth-1-R,...) >= beta ) // one may even try depth-2-R
return val;
// else zugzwang detected
}
}
}

Cheers,
Gerd

```