ProbCut

toc =The Idea= ProbCut is based on the idea that the result //v'// of a shallow search with depth //d'// is a rough estimate of the result //v// of a deeper search with depth //d > d'//. A way to model this relationship is by means of a [|linear model]:
 * Home * Search * Selectivity * Pruning * ProbCut**
 * [[image:MPC.JPG width="312" height="176"]] ||~  || **ProbCut** is a selective search enhancement of the alpha-beta algorithm created in 1994 by Michael Buro as introduced in his Ph.D. thesis . It permits to exclude probably irrelevant subtrees from beeing searched deeply. ProbCut and its improved variant **Multi–ProbCut** (MPC) have been shown to be effective in Othello and Shogi, and a technique similar to ProbCut is used in the checkers program [|Chinook]. Schaeffer et al. (1992) described their approach in a footnode: Chinook performs forward cuts in positions with a material deficit, where a shallow search does not show an escape. ProbCut is a generalization of this method in that it is game independent. It was tested by incorporating it in Buro's already strong Othello program //Logistello// and increased the program's playing strength . Despite some promising results reported by Albert Xin Jiang and Michael Buro with Crafty , it seemed not that successful in chess programs which already perform Null Move Pruning and Late Move Reductions, until Stockfish prooved otherwise as implemened by  Gary Linscott  . ||
 * Search Trees with two ProbCut generalizations ||~  ||^   ||

> math v = a*v' + b + e math

where e is a [|normally distributed] [|error variable] with [|mean] 0 and [|standard deviation] σ ([|sigma]) or [|variance] σ². If the evaluation function is relative stable, the [|slope] a is about 1.0, offset b about 0.0 and a small variance σ². The cutoff condition of depth d > math v \ge \beta math becomes > math (v' + b - \beta)/{\sigma} \ge -e/{\sigma} math

since -e/σ is normally distributed with mean 0 and variance 1 (and [|distribution function] Φ, [|phi]), the condition holds true with [|probability] of at least //p// [|iff]

> math (v' + b - \beta)/{\sigma} \ge \Phi^{-1} (p) math

which is equivalent to > math v' \ge (\Phi^{-1} (p) * \sigma + \beta - b) / a math

Similar for > math v \le \alpha math

the condition becomes > math v' \le (-\Phi^{-1} (p) * \sigma + \alpha - b) / a math

=Pseudo Code= This observation immediately leads to the implementation of the ProbCut alpha-beta extension for one depth and reduced depth pair using floats. Before [|sigma], a and b are estimated by [|linear regression] likely for different game phases, the search depths d and d' < d and cut threshold must be chosen or be determined [|empirically], by checking the performance of the program with various parameter settings.

code format="cpp" int alphaBetaProbCut(int α, int β, int depth) { const float T(1.5); const int DP(4); const int D(8);

if ( depth == 0 ) return evaluate;

if ( depth == D ) { int bound;

/* v >= β with prob. of at least p? yes => cutoff */ bound = round( ( T * σ + β - b) / a ); if ( alphaBetaProbCut( bound-1, bound, DP) >= bound ) return β;

/* v <= α with prob. of at least p? yes => cutoff */ bound = round( (-T * σ + α - b) / a ); if ( alphaBetaProbCut( bound, bound+1, DP) <= bound ) return α; }  /* the remainder of alpha-beta goes here */ ... } code  =Multi–ProbCut= Multi–ProbCut (MPC) enhances ProbCut by
 * Allowing different regression parameters and cut thresholds for different stages of the game
 * Using more than one depth pair
 * Using internal iterative deepening for shallow searches

code format="cpp" struct Param { int d;        /* shallow search depth */ float t;      /* cut threshold */ float a, b, σ; /* slope, offset, standard deviation */ } param[MAX_STAGE+1][MAX_HEIGHT+1][NUM_TRY];

int alphaBetaMPC(int α, int β, int depth) {  if ( depth == 0 ) return evaluate;

if ( depth <= MAX_D ) { for (int i=0; i < NUM_TRY; i++) { int bound; const Param &pa = param[stage][depth][i];

if (pa.d < 0 ) break; /* no more parameters available */

/* v >= β with prob. of at least p? yes => cutoff */ bound = round( ( pa.t * pa.σ + β - pa.b) / pa.a ); if ( alphaBetaMPC( bound-1, bound, pa.d) >= bound ) return β;

/* v <= α with prob. of at least p? yes => cutoff */ bound = round( (-pa.t * pa.σ + α - pa.b) / pa.a ); if ( alphaBetaMPC( bound, bound+1, pa.d) <= bound ) return α; }  }   /* the remainder of alpha-beta goes here */ ... } code

=ProbeCut or MPC in Chess= In 2003, Albert Xin Jiang implemented ProbCut and MPC in Crafty by Robert Hyatt. In his thesis he introductory elaborates on ProbCut in Chess :

In his research, Albert Xin Jiang further determined following parameters by [|linear regression]. The about 2700 positions were chosen randomly from some computer chess tournament games and some of Crafty’s games against human grandmasters on internet chess servers:
 * [[image:CraftyLinearReg.JPG]] ||
 * v' versus v for depth pair (4,8) ||

Linear regression results. The evaluation function’s scale is 100 = one pawn. r is the [|regression correlation coefficient], a measure of how good the data fits the linear model:
 * ~ Pairs ||~  ||~ Stage ||~   ||~ a ||~   ||~ b ||~   ||~ σ ||~   ||~ r ||
 * (3,5) ||~  || Middlegame ||~   || 0.998 ||~   ||> -7.000 ||~   || 55.80 ||~   || 0.90 ||
 * (3,5) ||~  || Endgame ||~   || 1.026 ||~   ||> -4.100 ||~   || 51.80 ||~   || 0.94 ||
 * (4,8) ||~  || Middlegame ||~   || 1.020 ||~   ||> 2.360 ||~   || 82.00 ||~   || 0.82 ||
 * (4,8) ||~  || Endgame ||~   || 1.110 ||~   ||> 1.750 ||~   || 75.00 ||~   || 0.90 ||

While ProbCut did not result in better playing strength of Crafty, Albert Xin Jiang and Michael Buro report an improvement with MPC while playing two times three 64-game matches with three Crafty versions and two time controls versus Dieter Bürssner's program Yace :
 * ~ Pairing ||||~ Crafty % ||
 * ~  ||~ 2min+10sec/move ||~ 8min+20sec/move ||
 * Crafty - Yace ||> 42.0% ||> 50.8% ||
 * MPC Crafty(1.2, 1.0) - Yace ||> 53.1% ||> 56.3% ||
 * MPC Crafty(1.0, 1.0) - Yace ||> 57.0% ||> 55.5% ||

However, Robert Hyatt first stated results were inconclusive, and later that MPC was somewhat worse in every test he tried , also confirmed by Robert Allgeuer, who performed Crafty MPC tests with following conclusion in CCC :

||

=See also=
 * Enhanced Forward Pruning
 * Futility Pruning
 * Late Move Reductions
 * Match Statistics
 * Multi-Cut
 * Null Move Pruning

=Publications=
 * Michael Buro (**1994**). //Techniken für die Bewertung von Spielsituationen anhand von Beispielen.// Ph.D. Thesis. University of Paderborn, Paderborn, Germany. (German), [|pdf]
 * Michael Buro (**1995**). //ProbCut: An Effective Selective Extension of the Alpha-Beta Algorithm.// ICCA Journal, Vol. 18, No. 2, pp. 71-76, [|pdf]
 * Michael Buro (**1997**). //Experiments with Multi-ProbCut and a New High-quality Evaluation Function for Othello.// Technical Report No. 96, NEC Research Institute, Princeton, N.J. [|pdf]
 * Michael Buro (**2000**). //Experiments with Multi-ProbCut and a new High-Quality Evaluation Function for Othello.// Games in AI Research (eds. Jaap van den Herik and Hiroyuki Iida), pp. 77-96. Universiteit Maastricht, Maastricht, The Netherlands. ISBN 90-621-6416-1.
 * Kazutomo Shibahara, Nobuo Inui, Yoshiyuki Kotani (**2002**). //Effect of ProbCut in Shogi - by changing parameters according to position category//. 7th Game Programming Workshop
 * Michael Buro (**2002**). //Multi-ProbCut Search//. slides as [|pdf]
 * Albert Xin Jiang (**2003**). //Implementation of Multi-ProbCut in Chess//. CPSC 449 Thesis, [|pdf]
 * Albert Xin Jiang, Michael Buro (**2003**). //First Experimental Results of ProbCut Applied to Chess//. Advances in Computer Games 10, [|pdf]
 * Maarten Schadd, Mark Winands, Jos Uiterwijk (**2009**). //ChanceProbCut: Forward Pruning in Chance Nodes//. in IEEE Symposium on Computational Intelligence and Games (CIG 2009), [|pdf]

=Forum Posts=
 * [|whats probcut?] by vitor, CCC, August 29, 1999
 * [|muliti probcut] by Martin Fierz, CCC, July 04, 2001
 * [|Multi-ProbCut and Crafty : does it work ?] by Frédéric Louguet, CCC, June 28, 2003
 * [|Crafty MPC tests (long post)] by Robert Allgeuer, CCC, October 18, 2003
 * [|ProbCut: An Effective Selective Extension of the Alpha-Beta Algorithm] by Albert Silver, CCC, July 21, 2004
 * [|Re: Possible search improvment] by Ryan Benitez, CCC, June 17, 2009 » History Leaf Pruning
 * [|Bad Pruning] by Onno Garms, CCC, March 13, 2011
 * [|Probcut] by Gary, CCC, May 24, 2013 » Stockfish

=External Links= > [|Ron Miles], [|Greg Tardy], [|Tony Scherr], [|Kenny Wollesen] > media type="custom" key="24773626"
 * [|Writing an Othello program] by Gunnar Andersson
 * [|SmartGame Library: SgProbCut.h File Reference], [|Fuego Documentation]
 * [|Bill Frisell Quintet] - Probability 13, [|Jazz Baltica], July 1, 2006, [|YouTube] Video

=References= =What links here?= include page="ProbCut" component="backlinks" limit="50"
 * Up one Level**