Computer Chess Club Archives




Subject: Futility Pruning (I think) Question

Author: Brian Richardson

Date: 13:11:18 04/02/00

I have changed Tinker to update material values incrementally (instead of in the
eval function each time).  This saved at most about 5%.  I did this to enable
futility pruning (I think this is what it is called).

In the q-search, the net material is found from the perspective of the side on
move.  Then, BEFORE doing the usual:
    if(x>=beta) return(beta);
    FindCaptureMoves(); ...

I quickly check:
    if ((x - 2*Pawn) >= beta) return(beta);
assuming 2 pawns is about largest positional score (LPS). And then
    if ((x + 5*Pawn) <= alpha) return(alpha);
assuming that if winning a rook doesn't help more than alpha, just return.

Next, in the loop trying each capture move, before actually making the capture
move and calling x = -quiesce(-beta,-alpha), I see what the expected material
gain would be (taking into account promotions and enpassant).  If that plus
3 pawns is <= alpha then skip actually doing this capture, and try the next one.
In this case, I assume the LPS is about 3 pawns.  I know, it is not consistent,
but when i tried 2 pawns here, the search results would change, and I really
don't know what the LPS actually is.

Together these two "improvements" yield about 15% faster search times to a given
depth (in some cases >50%).

So, my question is does this all seem "reasonable".  I know implementing a SEE
would probably be better, but I'm not up to that yet.  I also tried some of
these cuts in the normal search routine, but that seemed to hurt things.

Thanks again for any feedback.

This page took 0.02 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.