# Computer Chess Club Archives

## Messages

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

Author: Robert Hyatt

Date: 07:57:03 04/30/04

Go up one level in this thread

```On April 30, 2004 at 01:33:53, Tony Werten wrote:

>On April 29, 2004 at 23:19:54, Robert Hyatt wrote:
>
>>On April 29, 2004 at 17:06:29, Gerd Isenberg wrote:
>>
>>>On April 29, 2004 at 16:03:08, Robert Hyatt wrote:
>>>
>>>>On April 29, 2004 at 02:08:40, Tony Werten wrote:
>>>>
>>>>>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
>>>>
>>>>I don't see how/why one would throw out IID.
>>>>
>>>
>>>Yes but with double nullmove you may search a line like that, eg. for a 12ply
>>>search:
>>>
>>>null null e4 e5 Nf3  Nc6  Bb5  a6 ....
>>>
>>>which is IMHO a kind of IID with depth-6, so if you store hash after null null
>>>with best found e4, and probe after after nullmove, it is likely to get a hit.
>>>Or?
>>>
>>
>>Several problems.
>>
>>1.  Suppose the best move is a repetition.  If you do a repetition check after a
>>double null move, you get an instant draw score very time.  Useless.  So you
>>have to turn it off.  Now you don't realize that the move draws, so it won't be
>>best.  Etc.
>
>Easily fixed. Just start checking for repetition 2 plies higher in case of a
>double nm.
>
>>
>>2.  double null rips 8 plies from the depth.  That will often collapse you into
>>the q-search where all you can play are captures.  Captures are not the best
>>move far more often than they are.
>
>I nm, you nm. My turn. If a capture makes your nm fail low, it is the best move.
>If it didn't then your nm fails high which basicly means the current node is a
>fail low node, so no IID needed.
>
>Tony

That is wrong.  A capture can make NM fail low (or high) without being the
_best_ move.  Which is ok, except along the PV.  And along the PV is the _only_
place I use IID, at places where null-move can't possibly do anything good...

If you do IID everywhere, you might be right.  But I don't...

>
>>
>>>
>>>>NULL can collapse search to q-search, which means the best you can hope for is a
>>>>capture should you search this position later.  That's not the same as a "good"
>>>>move when depth>0.  If you mean after the second null, you are now 8 plies short
>>>>of a full search, which in most middlegame positions is going to be into the
>>>>capture only search...
>>>>

```