Computer Chess Club Archives


Search

Terms

Messages

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

Author: Robert Hyatt

Date: 13:03:08 04/29/04

Go up one level in this thread


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.

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


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



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.