Futility Pruning

From Chessprogramming wiki
Jump to:navigation,search

Home *Search *Selectivity *Pruning * Futility Pruning

M. C. Escher, Relativity, 1953[1]

Futility Pruning,
discards moves that have no potential of raisingalpha, 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 bydepth.

Contents

Conditions

Fortactical 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 givecheck

Futility pruning is not used when theside to move is incheck , or when eitheralpha orbeta are close to themate value, since it would leave the program blind to certaincheckmates.Tord Romstad reported that in his early programGothmog 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 byOmid David: then simply return alpha (to faillow buthard).

Move Count Based Pruning

A further variation of Extended Futility Pruning combining the ideas ofFruit'sHistory Leaf Pruning andLate Move Reductions is calledMove Count Based Pruning orLate Move Pruning (LMP) as implemented inStockfish[4].

Historical Implementations

Historically, futility pruning is implemented at thefrontier nodes (depth == 1) with oneply 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-calledextended futility pruning[5]. It means employing similar algorithm atpre frontier nodes atdepth == 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 byHarm Geert Muller[6]. It is applied at depths of1<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" fromThe Official M.C. Escher Website
  2. Serious bug in Gothmog 0.2.6! byTord Romstad,Winboard Forum, August 04, 2003
  3. Re: Unexpected problem with futility pruning? byTord Romstad,CCC, December 29, 2003
  4. move count based pruning byTom King,CCC, September 02, 2010
  5. Ernst A. Heinz (1998).Extended Futility Pruning.ICCA Journal, Vol. 21, No. 2
  6. Deep Futility Pruning byHarm Geert Muller

Up one Level

Retrieved from "https://www.chessprogramming.org/index.php?title=Futility_Pruning&oldid=27373"
Categories: