Futility Pruning - Chessprogramming wiki

Home * Search * Selectivity * Pruning * Futility Pruning

Futility Pruning,
discards 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 safety margin to the evaluation of the current position. If this does not exceed alpha then the futility pruning is triggered to skip this move. Modern engines also perform futility pruning at non-leaf nodes, and scales margin by depth.

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 [2] [3] to avoid returning erroneous stalemate scores. As replied by Omid David: then simply return alpha (to fail low but hard).

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 [4].

Historical Implementations

Historically, futility pruning is implemented at the frontier nodes (depth == 1) with one ply left to the horizon. The following are past ideas related to futility pruning. These ideas are not used to modern engine development, either because they are superseded or failed under strict testing. The ideas are documented below for historical reasons.

Extended Futility Pruning

Ernst A. Heinz advocated using so-called extended futility pruning [5]. 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 [6]. 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

See also

Publications

Forum Posts

1995 ...

2000 ...

2005 ...

2010 ...

2015 ...

2016

2017 ...

2020 ...

External Links

Pruning

Misc

futile - Wiktionary

References

  1. Picture gallery "Back in Holland 1941 - 1954" from The Official M.C. Escher Website
  2. Serious bug in Gothmog 0.2.6! by Tord Romstad, Winboard Forum, August 04, 2003
  3. Re: Unexpected problem with futility pruning? by Tord Romstad, CCC, December 29, 2003
  4. move count based pruning by Tom King, CCC, September 02, 2010
  5. Ernst A. Heinz (1998). Extended Futility Pruning. ICCA Journal, Vol. 21, No. 2
  6. Deep Futility Pruning by Harm Geert Muller

Up one Level