Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: negative extensions

Author: Edward Screven

Date: 19:01:22 01/25/01

Go up one level in this thread


On January 25, 2001 at 19:05:12, Robert Hyatt wrote:

>>we must think about the null move heuristic differently, because i
>>don't think its typical implementation is at all similar to what
>>david suggested.
>>
>>sure, there is a reduced depth search involved, but it's part
>>of the pruning test, not the pruning action.  the pruning action
>>is all or none -- completely prune the move from the parent node
>>or search it in full.
>
>Think about it differently.  IE at ply=N, I play a move and I am
>about to do a normal search to depth=X to see how this move works.
>But first, I assume my opponent does nothing, and I then do a much
>shallower search with me to move again.  If this is bad for me, there
>is no need for me to search this move to the full depth, I can get away
>with searching it to the shallower depth, proven by the null-move observation...

yes, i know how the null move heuristic works.  and this is how you
could think about it differently.  imagine a program with a main
Search() loop that looked something like

   for move in legal_moves {
     DoMove(move)
     if PruneTest(move,alpha,depth) {
       -- do nothing, we are pruning this move
     } else {
       score := Search(depth-1)
       ... handle fail high, etc. ...
     }
     UndoMove(move)
   }

what i understand david to be suggesting, is that one could change
this to be something like

   for move in legal_moves {
     DoMove(move)
     if PruneTest(move,alpha,depth) {
       reduction := PRUNE_REDUCTION_CONSTANT;
     } else {
       reduction := 0;
     }
     score := Search(depth-reduction-1)
     ... handle fail high, etc. ...
     UndoMove(move)
   }

in other words, reduce the child search depth if PruneTest() returns
true instead of just killing the move altogether.

would you say then PruneTest() is dependent or independent of
david's idea?  i say independent, because david's idea isn't to
change the way in which one decides to prune, but rather what to
do after one makes a decision to prune.

now what could PruneTest() be?  well it might just be a function
that applies a null move, then does a reduced depth search, and
then returns true iff the resulting score is <= alpha (from the
perspective of the side to move in the main loop.)

as i'm sure you realize, this is an implementation of the null
move heuristic that has the same behaviour as the more common
one.  (the more common one is less awkward of course.)

so if one believes that PruneTest() is indendent of david's idea,
then i think one would also believe that null move pruning has
nothing to do with david's idea.

  - edward




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.