Home * Search * Selectivity * Pruning * Futility Pruning

Futility Pruning in its pure form is implemented at the frontier nodes (depth == 1). It discards the moves that have no potential of raising alpha, which in turn requires some estimate of a potential value of a move. This is calculated by adding a futility margin (representing the largest conceivable positional gain) to the evaluation of the current position. If this does not exceed alpha then the futility pruning is triggered to skip this move (which further means setting a flag like f_prune = 1 to indicate not all moves were tried).

Conditions

For tactical stability, even in such a node we ought to search the following moves:
  • captures (either all or less typically only those that are capable of raising the score above alpha + margin)
  • moves that give check

Futility pruning is not used when the side to move is in check , or when either alpha or beta are close to the mate value, since it would leave the program blind to certain checkmates. Tord Romstad reported that in his early program Gothmog one more condition was necessary - namely that futility pruning requires checking for the existence of at least one legal move [1] [2] to avoid returning erroneous stalemate scores. As replied by Omid David: then simply return alpha (to fail low but hard).

Extended Futility Pruning

Ernst A. Heinz advocated using so-called extended futility pruning [3]. It means employing similar algorithm at pre frontier nodes at depth == 2, only with the greater margin. If at depth 1 the margin does not exceed the value of a minor piece, at depth 2 it should be more like the value of a rook.

Deep Futility Pruning

Deep Futility Pruning was proposed by Harm Geert Muller [4]. It is applied at depths of 1<d<=3+R, i.e. with two moves to go:
if ( CurEval <= Alpha - PVal[FirstPiece(Opponent)] - PVal[SecondPiece(Opponent)] - 2*PosMargin )
   prune

Move Count Based Pruning

A further variation of Extended Futility Pruning combining the ideas of Fruit's History Leaf Pruning and Late Move Reductions is called Move Count Based Pruning or Late Move Pruning (LMP) as implemented in Stockfish [5].

See also


Publications


Forum Posts

1995 ...

2000 ...

2005 ...

2010 ...

2015 ...


External Links


References

  1. ^ Serious bug in Gothmog 0.2.6! by Tord Romstad, Winboard Forum, August 04, 2003
  2. ^ Re: Unexpected problem with futility pruning? by Tord Romstad, CCC, December 29, 2003
  3. ^ Ernst A. Heinz (1998). Extended Futility Pruning. ICCA Journal, Vol. 21, No. 2
  4. ^ Deep Futility Pruning by Harm Geert Muller
  5. ^ move count based pruning by Tom King, CCC, September 02, 2010

What links here?


Up one Level