Changes

Jump to: navigation, search

Futility Pruning

13,574 bytes added, 18:31, 29 April 2018
Created page with "'''Home * Search * Selectivity * Pruning * Futility Pruning''' FILE:EschersRelativity.jpg|border|right|thumb|link=http://www.mcescher.com/Gallery/..."
'''[[Main Page|Home]] * [[Search]] * [[Selectivity]] * [[Pruning]] * Futility Pruning'''

[[FILE:EschersRelativity.jpg|border|right|thumb|link=http://www.mcescher.com/Gallery/back-bmp/LW389.jpg|[[Arts#Escher|M. C. Escher]], Relativity, 1953 <ref>[http://www.mcescher.com/Gallery/gallery-back.htm Picture gallery "Back in Holland 1941 - 1954"] from [http://www.mcescher.com/ The Official M.C. Escher Website]</ref> ]]

'''Futility Pruning''',<br/>
in its pure form implemented at the [[Frontier Nodes|frontier nodes]] ([[Depth|depth]] == 1) with one [[Ply|ply]] left to the horizon. It discards the moves that have no potential of raising [[Alpha|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 [[Tactics|tactical]] stability, even in such a node we ought to search the following moves:
* [[Captures|captures]] (either all or less typically only those that are capable of raising the score above alpha + margin)
* moves that give [[Check|check]]

Futility pruning is not used when the [[Side to move|side to move]] is in [[Check|check]] , or when either [[Alpha|alpha]] or [[Beta|beta]] are close to the [[Checkmate#MateScore|mate value]], since it would leave the program blind to certain [[Checkmate|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 <ref>[http://www.open-aurec.com/wbforum/viewtopic.php?f=18&t=43669&p=166791 Serious bug in Gothmog 0.2.6!] by [[Tord Romstad]], [[Computer Chess Forums|Winboard Forum]], August 04, 2003</ref> <ref>[https://www.stmintz.com/ccc/index.php?id=339076 Re: Unexpected problem with futility pruning?] by [[Tord Romstad]], [[CCC]], December 29, 2003</ref> to avoid returning erroneous stalemate scores. As replied by [[Omid David]]: then simply return alpha (to fail [[Fail-Low|low]] but [[Fail-Hard|hard]]).
<span id="Extendedfutilitypruning"></span>
=Extended Futility Pruning=
[[Ernst A. Heinz]] advocated using so-called '''extended futility pruning''' <ref>[[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]]</ref>. It means employing similar algorithm at [[Pre Frontier Node|pre frontier nodes]] at <span style="background-color: rgb(196, 196, 196);">depth == 2</span>, 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.
<span id="MoveCountBasedPruning"></span>
=Move Count Based Pruning=
A further variation of Extended Futility Pruning combining the ideas of [[Fruit|Fruit's]] [[History Leaf Pruning]] and [[Late Move Reductions]] is called '''Move Count Based Pruning''' or '''Late Move Pruning''' (LMP) as implemented in [[Stockfish]] <ref>[http://www.talkchess.com/forum/viewtopic.php?t=35955 move count based pruning] by [[Tom King]], [[CCC]], September 02, 2010</ref>.
<span id="DeepFutilityPruning"></span>
=Deep Futility Pruning=
Deep Futility Pruning was proposed by [[Harm Geert Muller]] <ref>[http://home.hccnet.nl/h.g.muller/deepfut.html Deep Futility Pruning] by [[Harm Geert Muller]]</ref>. It is applied at depths of <span style="background-color: rgb(207, 207, 207);">1<d<=3+[[Depth Reduction R|R]]</span>, i.e. with two moves to go:
<pre>
if ( CurEval <= Alpha - PVal[FirstPiece(Opponent)] - PVal[SecondPiece(Opponent)] - 2*PosMargin )
prune
</pre>

=See also=
* [[AEL-Pruning]]
* [[Delta Pruning]]
* [[Frontier Nodes|Frontier Node]]
* [[History Leaf Pruning]]
* [[Late Move Reductions]]
* [[Lazy Evaluation]]
* [[Ostrich#GammaAlgorithm|Ostrich's Gamma-Algorithm]]
* [[Pre Frontier Node]]
* [[Razoring]]
* [[Reverse Futility Pruning]]

=Publications=
* [[Jonathan Schaeffer]] ('''1986'''). ''Experiments in Search and Knowledge''. Ph.D. Thesis, [[University of Waterloo]]. Reprinted as Technical Report TR 86-12, Department of Computing Science, [[University of Alberta]]
* [[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]].

=Forum Posts=
==1995 ...==
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/375e65821715995f futility cut-offs] by [[Alessandro Damiani]], [[Computer Chess Forums|rgcc]], November 14, 1997
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/9a16d1cfe8d042bc Extended Futility Pruning - anyone tried it?] by [[Tom King]], [[Computer Chess Forums|rgcc]], August 16, 1998
* [https://www.stmintz.com/ccc/index.php?id=50627 Extensions and Futility Pruning] by [[James Robertson]], [[CCC]], May 04, 1999 » [[Extensions]]
* [https://www.stmintz.com/ccc/index.php?id=85079 Extended futility pruning and hashtables] by [[Gian-Carlo Pascutto]], [[CCC]], December 30, 1999 » [[Transposition Table]]
==2000 ...==
* [https://www.stmintz.com/ccc/index.php?id=104283 Futility Pruning (I think) Question] by [[Brian Richardson]], [[CCC]], April 02, 2000
* [https://www.stmintz.com/ccc/index.php?id=110681 Caution K v KBN and lazy eval or futility] by [[Brian Richardson]], [[CCC]], May 14, 2000 » [[KBNK Endgame]], [[Lazy Evaluation]]
* [https://www.stmintz.com/ccc/index.php?id=143040 Something wrong with my futility pruning?] by [[Severi Salminen]], [[CCC]], December 05, 2000
* [https://www.stmintz.com/ccc/index.php?id=143331 About history heuristics, killers and my futil. pruning code] by [[Severi Salminen]], [[CCC]], December 06, 2000 » [[History Heuristic]], [[Killer Heuristic]]
* [https://www.stmintz.com/ccc/index.php?id=143506 question about futility pruning and positional evaluation] by Bert van den Akker, [[CCC]], December 07, 2000 » [[Evaluation]]
* [https://www.stmintz.com/ccc/index.php?id=186225 Futility Cutoff futile?] by [[Stuart Cracraft]], [[CCC]], August 29, 2001
* [https://www.stmintz.com/ccc/index.php?id=271983 Re: Futility Pruning] by [[Vincent Diepeveen]], [[CCC]], December 20, 2002
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=18&t=43088 To Stefan Knappe] by [[Rahman Paidar]], [[Computer Chess Forums|Winboard Forum]], June 21, 2003 » [[Stefan Knappe]]
* [https://www.stmintz.com/ccc/index.php?id=326340 futility pruning?] by [[Daniel Shawul]], [[CCC]], November 09, 2003
* [https://www.stmintz.com/ccc/index.php?id=339041 Unexpected problem with futility pruning ?] by Geoff, [[CCC]], December 29, 2003
* [https://www.stmintz.com/ccc/index.php?id=380679 Extended futility pruning not working] by Cesar Contreras, [[CCC]], August 03, 2004
* [https://www.stmintz.com/ccc/index.php?id=391540 Futility] by [[Stuart Cracraft]], [[CCC]], October 14, 2004
* [https://www.stmintz.com/ccc/index.php?id=392021 Futility Prune question] by [[Stuart Cracraft]], [[CCC]], October 17, 2004
* [https://www.stmintz.com/ccc/index.php?id=392248 Futility @ 1/Extended Futility @ 2/Limited Razoring @ 3 = % node reduce?] by [[Stuart Cracraft]], [[CCC]], October 19, 2004
==2005 ...==
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=2101 Does simple futility prune work] by [[Rasjid Chan]], [[Computer Chess Forums|Winboard Forum]], March 27, 2005
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=3734 Selective Futlity Condition at Quiescence Nodes] by [[Pradu Kannan|Pradu]], [[Computer Chess Forums|Winboard Forum]], October 26, 2005
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=5648 Null move, futility and LMR] by [[Harm Geert Muller]], [[Computer Chess Forums|Winboard Forum]], September 26, 2006 » [[Null Move Pruning]], [[Late Move Reductions|LMR]]
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=5779 Hash Table handling with LMR/Futility pruning] by [[Pradu Kannan|Pradu]], [[Computer Chess Forums|Winboard Forum]], October 21, 2006
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=5890 Extended futility reduction] by [[Michael Sherwin]], [[Computer Chess Forums|Winboard Forum]], November 18, 2006
* [http://www.talkchess.com/forum/viewtopic.php?t=16290 How much elo from futility?] by [[Alessandro Scotti]], [[CCC]], September 05, 2007
* [http://www.talkchess.com/forum/viewtopic.php?t=17442 LMR and futility] by [[Pawel Koziol]], [[CCC]], October 28, 2007
* [http://www.talkchess.com/forum/viewtopic.php?t=24371 Draw recognizers, futility... mess] by [[Pawel Koziol]], [[CCC]], October 14, 2008
* [http://www.talkchess.com/forum/viewtopic.php?t=29777 futility pruning - razoring] by [[Don Dailey]], [[CCC]], September 16, 2009 » [[Razoring]]
* [http://www.talkchess.com/forum/viewtopic.php?t=30802 Futility pruning, Ext futility pruning and Limited Razoring] by [[Jesper Nielsen]], [[CCC]], November 26, 2009
==2010 ...==
* [http://www.talkchess.com/forum/viewtopic.php?t=32407 Futility Idea based on total score] by [[Mark Lefler]], [[CCC]], February 06, 2010
* [http://www.talkchess.com/forum/viewtopic.php?t=33033 Confused by futility pruning] by [[Michel Van den Bergh]], [[CCC]], March 03, 2010
* [http://www.talkchess.com/forum/viewtopic.php?t=35955 move count based pruning] by [[Tom King]], [[CCC]], September 02, 2010
* [http://www.talkchess.com/forum/viewtopic.php?t=37360 LMR, Razoring, Futility.... with chess variant with drops?] by Justin Madru, [[CCC]], December 30, 2010
* [http://www.talkchess.com/forum/viewtopic.php?t=37731 Futility Methods] by kenny stanley, [[CCC]], January 21, 2011
* [http://www.talkchess.com/forum/viewtopic.php?t=39169 futility pruning in stockfish] by [[Engin Üstün]], [[CCC]], May 25, 2011 » [[Stockfish]]
* [http://www.talkchess.com/forum/viewtopic.php?t=41302 Reverse Futility Pruning] by [[Matthew R. Brades]], [[CCC]], December 02, 2011 » [[Reverse Futility Pruning]]
* [http://www.talkchess.com/forum/viewtopic.php?t=42749 How to get futility pruning to work?] by [[Robert Purves]], [[CCC]], March 05, 2012
* [http://www.talkchess.com/forum/viewtopic.php?t=43165 futility pruning, razoring question] by [[Marco Belli]], [[CCC]], April 04, 2012 » [[Razoring]]
* [http://www.talkchess.com/forum/viewtopic.php?t=43513 A search enhancement?] by [[Dan Homan|Daniel Homan]], [[CCC]], April 30, 2012 » [[Futility Pruning#MoveCountBasedPruning|Move Count Based Pruning]]
* [http://www.talkchess.com/forum/viewtopic.php?t=54761 LMP in PV nodes] by [[Peter Österlund]], [[CCC]], December 27, 2014 » [[Node Types#PV|PV-Node]], [[Texel]]
==2015 ...==
* [http://www.talkchess.com/forum/viewtopic.php?t=56323 Problem understanding futility pruning] by [[Nicu Ionita]], [[CCC]], May 11, 2015
* [http://www.talkchess.com/forum/viewtopic.php?t=57287 Razoring vs Futility pruning] by [[Shawn Chidester]], [[CCC]], August 16, 2015 » [[Razoring]]
'''2016'''
* [http://www.talkchess.com/forum/viewtopic.php?t=59315 futility pruning] by [[Folkert van Heusden]], [[CCC]], February 20, 2016
* [http://www.talkchess.com/forum/viewtopic.php?t=59661 Futile attempts at futility pruning] by [[Martin Fierz]], [[CCC]], March 27, 2016 » [[Reverse Futility Pruning]]
* [http://www.talkchess.com/forum/viewtopic.php?t=61093 Futility prunning] by [[Daniel Anulliero]], [[CCC]], August 11, 2016 » [[Reverse Futility Pruning]]
* [http://www.talkchess.com/forum/viewtopic.php?t=61682 Futility Pruning] by [[David Cimbalista]], [[CCC]], October 11, 2016
'''2017'''
* [http://www.talkchess.com/forum/viewtopic.php?t=63344 Futility pruning ?] by [[Mahmoud Uthman]], [[CCC]], March 04, 2017 » [[Reverse Futility Pruning]]
* [http://www.talkchess.com/forum/viewtopic.php?t=63368 futile futility pruning attempt] by [[Folkert van Heusden]], [[CCC]], March 07, 2017
* [http://www.open-chess.org/viewtopic.php?f=5&t=3099 Futility pruning...] by thevinenator, [[Computer Chess Forums|OpenChess Forum]], April 07, 2017
* [http://www.talkchess.com/forum/viewtopic.php?t=63852 increasing futility prunning depth] by [[Alexandru Mosoi]], [[CCC]], April 28, 2017

=External Links=
==Pruning==
* [http://www.top-5000.nl/authors/rebel/chess840.htm#FUTILITY Search Techniques in REBEL (Futility Pruning)] from [http://www.top-5000.nl/authors/rebel/chess840.htm How Rebel Plays Chess] by [[Ed Schroder|Ed Schröder]], [http://members.home.nl/matador/Inside%20Rebel.pdf pdf]
* [http://home.hccnet.nl/h.g.muller/deepfut.html Deep Futility Pruning] by [[Harm Geert Muller]]
==Misc==
* [https://en.wiktionary.org/wiki/futility futility - Wiktionary]
: [https://en.wiktionary.org/wiki/futile futile - Wiktionary]
* [https://en.wikipedia.org/wiki/Futility Futility from Wikipedia]
* [https://en.wikipedia.org/wiki/The_Wreck_of_the_Titan:_Or,_Futility The Wreck of the Titan: Or, Futility - Wikipedia]
* [[Videos#PorcupineTree|Porcupine Tree]] - [https://en.wikipedia.org/wiki/Futile_(EP) Futile], [https://de.wikipedia.org/wiki/Zeche_Bochum Zeche] [https://en.wikipedia.org/wiki/Bochum Bochum], November 18, 2003, [https://en.wikipedia.org/wiki/YouTube YouTube] Video
: {{#evu:https://www.youtube.com/watch?v=C7mL-DNCuJc|alignment=left|valignment=top}}

=References=
<references />

'''[[Pruning|Up one Level]]'''

Navigation menu