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.