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.