Difference between revisions of "Futility Pruning"

From Chessprogramming wiki
Jump to: navigation, search
Line 37: Line 37:
 
* [[Razoring]]
 
* [[Razoring]]
 
* [[Reverse Futility Pruning]]
 
* [[Reverse Futility Pruning]]
 +
* [[Sibling Prediction Pruning]]
  
 
=Publications=
 
=Publications=
Line 42: Line 43:
 
* [[Chun Ye]], [[Tony Marsland]] ('''1992'''). ''Experiments in Forward Pruning with Limited Extensions.'' [[ICGA Journal#15_2|ICCA Journal, Vol. 15, No. 2]]
 
* [[Chun Ye]], [[Tony Marsland]] ('''1992'''). ''Experiments in Forward Pruning with Limited Extensions.'' [[ICGA Journal#15_2|ICCA Journal, Vol. 15, No. 2]]
 
* [[Ernst A. Heinz]] ('''1998'''). ''[http://people.csail.mit.edu/heinz/dt/node18.html Extended Futility Pruning].'' [[ICGA Journal#21_2|ICCA Journal, Vol. 21, No. 2]]
 
* [[Ernst A. Heinz]] ('''1998'''). ''[http://people.csail.mit.edu/heinz/dt/node18.html Extended Futility Pruning].'' [[ICGA Journal#21_2|ICCA Journal, Vol. 21, No. 2]]
 +
* [[Jeroen Carolus]] ('''2006'''). ''Alpha-Beta with Sibling Prediction Pruning in Chess''. Masters thesis, [http://homepages.cwi.nl/%7Epaulk/theses/Carolus.pdf pdf]
 
* [[Kunihito Hoki]], [[Masakazu Muramatsu]]  ('''2012'''). ''[https://www.semanticscholar.org/paper/Efficiency-of-three-forward-pruning-techniques-in-Hoki-Muramatsu/206099961f401c8693e071c2b739f164ae5ffa6c Efficiency of three Forward-Pruning Techniques in Shogi: Futility Pruning, Null-move Pruning, and Late Move Reduction (LMR)]''. [https://www.journals.elsevier.com/entertainment-computing Entertainment Computing], Vol. 3, No. 3
 
* [[Kunihito Hoki]], [[Masakazu Muramatsu]]  ('''2012'''). ''[https://www.semanticscholar.org/paper/Efficiency-of-three-forward-pruning-techniques-in-Hoki-Muramatsu/206099961f401c8693e071c2b739f164ae5ffa6c Efficiency of three Forward-Pruning Techniques in Shogi: Futility Pruning, Null-move Pruning, and Late Move Reduction (LMR)]''. [https://www.journals.elsevier.com/entertainment-computing Entertainment Computing], Vol. 3, No. 3
  

Revision as of 16:25, 26 September 2018

Home * Search * Selectivity * Pruning * Futility Pruning

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

Futility Pruning,
in its pure form implemented at the frontier nodes (depth == 1) with one ply left to the horizon. 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 [2] [3] 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 [4]. 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.

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

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

External Links

Pruning

Misc

futile - Wiktionary

References

Up one Level