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.