# Computer Chess Club Archives

## Messages

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

Author: Tony Werten

Date: 23:08:40 04/28/04

Go up one level in this thread

```On April 28, 2004 at 16:14:39, Gerd Isenberg wrote:

>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.

Correct. Chech your hashtable again after the nullmove, if you didn't have a
best move before.

Then throw out IID.

Tony

>
>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

```