Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Nullmove: when to avoid it?

Author: Leen Ammeraal

Date: 08:24:27 02/28/01

Go up one level in this thread


On February 28, 2001 at 10:10:48, Robert Hyatt wrote:

>On February 28, 2001 at 05:56:36, Leen Ammeraal wrote:
>
>>I am not sure about when to avoid nullmoves.
>>I omit it:
>>a. when in check
>>b. when there are less than 5 pieces (including pawns) on the board
>>c. when the last move was a nullmove
>>d. at the root node
>>Should I also omit it in some other cases,
>>for example, when any hashmove (even with a low draft) was found,
>>or when beta = alpha + 1?
>>Thanks in advance for any help.
>>Leen
>
>
>B is dangerous.  You should probably begin to control / limit null-move if
>there is a rook or less on the board + any number of pawns.  In such positions
>zugzwang is likely and will cause null-move to fail improperly.
>
>your last question is easier.  Don't avoid null move just because a low-draft
>position was found.  Look at the stored bound and the draft.  Compare the draft
>to the draft you would be using if you played a null-move to see if this draft
>is deep enough there (IE with R=2, you would be probing with depth-3 at the
>next ply).  If you have enough draft for this test, then see if the score is
>< beta.  If so, this is probably the same score that null-move search would
>return since this is the score _before_ you make a move at this ply, and if
>you make a null-move the position won't change.  If the hash score is < beta,
>then a null-search won't fail high, and you can avoid doing it and save the
>nodes.
>
>Look at crafty source, hash.c file, "HashProbe()" procedure in that file to
>see exactly how I do this...

Thank you for your explanation about when
to avoid nullmoves. I found it
easier to read than you code in the hash.c file -:)
If I understand what you mean, I could use
something like the following code, right?

   bool avoidBecauseOfHash =
     hashDraft >= reducedRecDepth &&
     hashFlag != LOWER && hashScore < beta;

I inserted the hashFlag condition because I thought
that this should be EXACT or UPPER here: if
hashScore is a lower bound, the true score
may very well be above beta.

There is another point, unrelated to hashing,
which I forgot to mention in my original question.
Since we are hoping for fail high, it seems to
me obvious that nullmoves are also useless if
beta = inf, where inf is the maximum value,
used in the largest possible window. Perhaps this
is so obvious that nobody mentions it?
Leen



This page took 0.16 seconds to execute

Last modified: Thu, 07 Jul 11 08:48:38 -0700

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