Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Futility Prune question

Author: Andrew Dados

Date: 09:13:28 10/17/04

Go up one level in this thread


On October 17, 2004 at 12:07:24, Stuart Cracraft wrote:

>Futility prune at depth == 1, extended futility prune at depth == 2, and razor
>at depth == 3....
>
>Are the above depths *before* or *after* the makemove?
>
>I implemented the above (with depths calculated before the makemove)
>and although my total nodes is reduced 30%, for me it is about the
>same runtime and result.
>
>Not sure why this is so as I took extra care to avoid any extra calls to
>incheck(). My eval() is simply lazy-eval level so nothing expensive there
>either.
>
>I profiled both runs and there are not more incheck()'s in any amount
>in the version with futility pruning turned on vs. not.
>
>Note -- my Extensions() routine calculates whether the move is a checking
>move but does this last and only if all the extensions together don't
>add up to 1.
>
>Likewise Reductions() which calculates Futility pruning initial status (parent
>in check, depth = 1 2 3, whether futility, extended, or razor, and alpha status
>in relation to evaluation+MARGIN) only calculates incheck() status if
>not already done.
>
>A profiled run shows no great difference in incheck() calls. My
>Futility pruning implementation must simply be wrong. Plese have
>a look.
>
>Here is the code:
>
>int Reductions(int alpha, int depth, int *bd)
>{
>  int reduction=0;
>  if (FUTIL_R != 0.0) {
>    if (depth == 1) {
>      if (parentincheck || alpha < eval(bd,QUIET)+3000)
>        reduction = 0;
>      else
>        reduction = 1;
>    }
>    else if (depth == 2) {
>      if (parentincheck || alpha < eval(bd,QUIET)+5000)
>        reduction = 0;
>      else
>        reduction=1;
>    }
>    else if (depth == 3) {
>      if (parentincheck || alpha < eval(bd,QUIET)+9000)
>        reduction = 0;
>      else
>        reduction=1;
>    }
>  }
>  return(reduction);
>}
>
>mainsearch()
>:
>:
>  parentincheck=incheck(bd);
>:
>  reduction=Reductions(alpha, depth, bd);
>:
>  make first move
>:
>    extension=Extensions(alpha,depth,bd,sml[mvi],threat,bmext,&checked,ply,qentr
>y);
>  ^^ perhaps the above alpha should be -beta?
>      prune = 1;
>      if (extension || !reduction || sml[mvi].cap) prune = 0;
>      else {
>        if (checked status not yet known) checked=incheck(bd);
>        if (checked) prune = 0;
>      }
>      if (!prune)
>        best = -search(bd,depth-1+extension, ply+1,-beta,-alpha);
>:
>  for main move loop
>  :
>  similar to above
>:
>
>Thanks,
>
>Stuart


I think you mix pruning (completely exiting search) with razoring (reducing
depth)

Pruning would be something like:
 if (alpha>eval+threshold) {score=eval; exit;}

-Andrew-



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.