Author: Stuart Cracraft
Date: 09:07:24 10/17/04
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
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.