Static Exchange Evaluation

Home * Search * Move Ordering * Static Exchange Evaluation



A Static Exchange Evaluation (SEE) examines the consequence of a series of exchanges on a single square after a given move, and calculates the likely evaluation change (material) to be lost or gained, Donald Michie coined the term swap-off value. A positive static exchange indicates a "winning" move. For example, PxQ will always be a win, since the Pawn side can choose to stop the exchange after its Pawn is recaptured, and still be ahead. Some programs optimize the SEE function to only return a losing or equal/winning flag, since they only use SEE to determine if a move is worth searching and do not need the actual value. SEE is useful in move ordering, futility pruning and especially in quiescence search in conjunction with delta pruning, as well to reduce "bad" captures and checks.

=Implementation= A didactic recursive implementation of SEE is shown below. In most programs, however, an iterative version is used, as demonstrated in SEE - The Swap Algorithm with bitboards. In CCC, Harm Geert Muller deduced an iterative SEE approach directly from Alpha-Beta. int see(int square, int side) {  value = 0; piece = get_smallest_attacker(square, side); /* skip if the square isn't attacked anymore by this side */ if ( piece ) {     make_capture(piece, square); /* Do not consider captures if they lose material, therefor max zero */ value = max (0, piece_just_captured -see(square, other(side)) ); undo_capture(piece, square); }  return value; } This uses a trick, equivalent to negamax in tree search, where the loss for the current side is the gain for the opposite side. This can be seen in the expression piece_just_captured - see(square); which is the value of the piece captured (piece_just_captured) minus the gain that the opponent might make after the move by recapturing. If that term becomes negative, one would better choose standing pat rather than to capture, which can be done by a conditional assignment, or by a max function with zero as second argument.

=Seeing a Capture= To statically evaluate a capture, that particular capture should be forced, because it might not be the lowest attacker that makes the capture, and must not allow the option of standing pat. int seeCapture(int from, int to, int side) {  value = 0; piece = board[from];

make_capture(piece, to); value = piece_just_captured - see(to, other(side)); undo_capture(piece, to); return value; } =SOMA= Instead of using a quiescence search, some (early) chess programs aimed to determine the material balance of a position by a static analysis of all possible capture-move sequences. These routines are often referred to as SOMA (Swapping Off Material Analyzer) based on the swap-off algorithm used in the one-ply analyzing "paper machine" SOMA by evolutionary biologist John Maynard Smith, the Smith One-Move Analyzer designed in the early 60s.

=See also=
 * Negamax
 * Futility Pruning
 * Delta Pruning
 * Guard Heuristic
 * Quiescence Search
 * MVV-LVA
 * Ed's Lookup from Attack and Defend Maps
 * SEE - The Swap Algorithm with Bitboards
 * SOMA
 * Swap-off algorithm


 * Swap-off by Helmut Richter

=Publications=
 * John Maynard Smith, Donald Michie (1961). Machines that play games. New Scientist, 12, 367-9. google books » SOMA
 * Donald Michie (1966). Game Playing and Game Learning Automata. Advances in Programming and Non-Numerical Computation, Leslie Fox (ed.), pp. 183-200. Oxford, Pergamon. » Includes Appendix: Rules of SOMAC by John Maynard Smith
 * Donald Michie (1974). On Machine Intelligence. Edinburgh: University Press, ISBN 10: 085224262X, ISBN 13: 9780852242629, abebooks.com, alibris.com, biblio.com
 * Dan Spracklen, Kathe Spracklen (1978). An Exchange Evaluator for Computer Chess. BYTE, Vol. 3, No. 11
 * David Levy (1979). Chess Programming - Before You Begin. Personal Computer World, May 1979
 * Jeff Rollason (2000). SUPER-SOMA - Solving Tactical Exchanges in Shogi without Tree Searching. Lecture Notes In Computer Science; Vol. 2063, CG 2000, Word preprint
 * Hiroyuki Iida, Makoto Sakuta, Jeff Rollason (2002). Computer Shogi. Artificial Intelligence, Vol. 134, Elsevier, CiteSeerX
 * Fritz Reul (2009). New Architectures in Computer Chess, Ph.D. Thesis, Chapter 4, Static Exchange Evaluation, pdf
 * Fritz Reul (2010). Static Exchange Evaluation with αβ-Approach. ICGA Journal, Vol. 33, No. 1

=Forum Posts=

1990 ...

 * efficient algorithm for safety of pieces by Deniz Yuret, rgc, March 18, 1993
 * Computer Chess: swap down evaluators vs capture search by Jon Dart, rgc, October 24, 1994

1995 ...

 * mvv/lva vs SEE capture ordering test results by Robert Hyatt, rgcc, August 10, 1995
 * MVV/LVA vs SEE move ordering - more test results by Robert Hyatt, rgcc, August 25, 1995
 * Re: MVV/LVA vs SEE move ordering - more test results by Brian Sheppard, rgcc, August 27, 1995


 * MVV/LVA and SEE - what do they mean? by Peter Kappler, rgcc, August 28, 1995 » MVV/LVA
 * Quiescence vs swapoff by Peter Fendrich, CCC, April 15, 1998
 * Question about static exchange evaluation by Larry Coon, CCC, November 12, 1998
 * Help with Static Exchange Evaluator by William Bryant, CCC, July 18, 1999
 * SEE for forward pruning in Q. Search by Tom King, CCC, August 04, 1999 » Quiescence Search
 * SEE for forward pruning in the Q. search - I'm confused! by Tom King, CCC, August 11, 1999

2000 ...
2001
 * Re: Explain SEE (static exchange evaluator)? by Bruce Moreland, CCC, October 25, 2000
 * Qsearch problems...(about sorting and SEE) by Severi Salminen, CCC, November 26, 2000 » Quiescence Search
 * MVV/LVA or SEE - liability? by Severi Salminen, CCC, November 29, 2000 » MVV-LVA
 * About SEE by Severi Salminen, CCC, January 04, 2001
 * Should an engine using SEE beat another not using it? by Severi Salminen, CCC, January 27, 2001
 * SEE and possible EXChess bug by Gian-Carlo Pascutto, CCC, April 01, 2001 » EXchess
 * Static Exchange Eval (SEE) by Leen Ammeraal, CCC, July 10, 2001
 * Static Exchange Eval by Artem Pyatakov, CCC, August 02, 2001
 * I want to SEE by Matthias Gemuh, CCC, December 21, 2001
 * Re: I want to SEE by Matthias Gemuh, CCC, December 21, 2001

2002 2003 2004
 * Value of King in SEE by David Rasmussen, CCC, January 07, 2002
 * Static exchange evaluator and 0x88 by Pierre Bokma, CCC, October 30, 2002
 * Static Exchange Evaluation (SEE) for pruning in quiescence (?) by Omid David, CCC, August 19, 2003
 * table-based SEE or "evaluation in rebel (hanging pieces)" by Martin Fierz, CCC, November 27, 2003 » Hanging Piece, Rebel
 * A SIMD idea, eg. Piece/Gain of a capture target by Gerd Isenberg, CCC, January 21, 2004
 * SEE and FH-% by Renze Steenhuisen, CCC, March 30, 2004
 * SEE results by Stuart Cracraft, CCC, August 10, 2004
 * SEE and pin detection by Dan Honeycutt, CCC, August 30, 2004 » Pin
 * Pin aware SEE by Dan Honeycutt, CCC, October 03, 2004

2005 ...
2007 2008 2009
 * Help on how to implement move ordering with a Static Exchange Evaluator by Carlos Magno, CCC, February 09, 2005
 * Static Exchange Evaluation Methods by Pradu Kannan, Winboard Forum, March 14, 2005
 * SEE with magic bitboards by Pradu Kannan, Winboard Forum, January 24, 2007 » Magic Bitboards
 * SEE on non-capture moves in main search by Gary, CCC, March 28, 2007 » Move Ordering
 * How good is your SEE? by mjlef, Winboard Forum, April 24, 2007
 * Re: Movei added to Crafty vs Rybka comparison data by Edsel Apostol, CCC, June 06, 2007
 * SEE algorithm by Robert Pope, CCC, December 02, 2007
 * SEE problem by Tord Romstad, CCC, April 13, 2008
 * How is SEE used? by Mathieu Pagé, CCC, October 13, 2008
 * SEE Observation by Brian Richardson, CCC, August 02, 2009 » Tinker
 * SEE algorithm on chessprogramming wiki by Sven Schüle, CCC, December 02, 2009

2010 ...
2011 2013 2014
 * SEE Improvement Idea by Mark Lefler, CCC, January 04, 2010
 * GetSmallestAttacker in 16x12 board representation by metax, CCC, January 17, 2010 » Piece-Lists
 * Using SEE to prune in main search by Tom King, CCC, January 08, 2011 » Pruning, Reductions
 * Simple question about SEE by Andres Valverde, CCC, January 12, 2011
 * Implementing SEE by colin, CCC, Aug 12, 2011
 * SEE with alpha beta by Onno Garms, CCC, August 14, 2011 » Onno
 * Reducing/Pruning Bad Captures (SEE < 0) by Edsel Apostol, CCC, August 19, 2011 » Reductions, Pruning
 * question about SEE by Alberto Sanjuan, CCC, September 05, 2011
 * SEE by Rasjid Chan, CCC, February 25, 2013
 * Static Exchange Evaluation... by Steve Maughan, CCC, July 10, 2013
 * SEE is slow and SEE is fast by Steven Edwards, CCC, August 09, 2013
 * SEE by Richard Delorme, CCC, February 13, 2014
 * SEE logic by Youri Matiounine, CCC, March 08, 2014 » Piece-Square Tables

2015 ...

 * SEE Map by Matthew Lai, CCC, July 20, 2015
 * Magic SEE by Harm Geert Muller, CCC, September 07, 2015
 * Problems with SEE by Matthew R. Brades, CCC, June 03, 2017
 * Evasion (capture) moves ordering by See by Tamás Kuzmics, CCC, August 06, 2017
 * see by Folkert van Heusden, CCC, November 28, 2017
 * Poor man's SEE by Harm Geert Muller, CCC, December 11, 2017
 * Fast SEE (Ed's lookup revisited) by Harm Geert Muller, CCC, December 17, 2018 » Ed's lookup

2020 ...

 * SEE versus SEE_GE by Vivien Clauzon, CCC, January 21, 2020
 * SEE (Static Exchange Evaluation) pruning nodes by Marcel Vanthoor, CCC, March 01, 2021
 * Static exchange evaluation with promotion by Guido Flohr, CCC, July 23, 2021
 * Static Exchange Evaluation without bitboards by Jonathan McDermid, CCC, October 22, 2021
 * Move ordering using SEE by Christian Dean, CCC, January 08, 2022

=External Links=
 * SEE fromBruce Moreland's Programming Topics (Wayback Machine)
 * Static exchange evaluation (SEE) from Mediocre Chess by Jonatan Pettersson
 * Static Exchange Evaluation in Chess by Steve Maughan, Chess Programming Blog, July 9, 2013
 * Wolfgang Schmid - Ringading Dang, Special Kick (2002), YouTube Video
 * feat.: Joo Kraus, Libor Shima, Peter Wölpl, Marco Minnemann

=References= Up one level