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[1] .
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 [5] .
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) [6] based on the swap-off algorithm used in the one-ply analyzing "paper machine" SOMA by evolutionary biologistJohn Maynard Smith, the Smith One-Move Analyzer designed in the early 60s [7] .
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[8]
Jeff Rollason (2000). SUPER-SOMA - Solving Tactical Exchanges in Shogi without Tree Searching. Lecture Notes In Computer Science; Vol. 2063, CG 2000, Word preprint[10]
Table of Contents
Implementation
A didactic recursive implementation of SEE is shown below [3] . 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 [4] .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 [5] .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) [6] 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 [7] .See also
Swap-off algorithm
Publications
Forum Posts
1990 ...
1995 ...
Re: MVV/LVA vs SEE move ordering - more test results by Brian Sheppard, rgcc, August 27, 1995
2000 ...
- 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
2001- 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 [11]
- 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
2002Re: I want to SEE by Matthias Gemuh, CCC, December 21, 2001
- Value of King in SEE by David Rasmussen, CCC, January 07, 2002
- Static exchange evaluator and 0x88 by Pierre Bokma, CCC, October 30, 2002
2003- 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
20042005 ...
- 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
2007- 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
2008- SEE problem by Tord Romstad, CCC, April 13, 2008
- How is SEE used? by Mathieu Pagé, CCC, October 13, 2008
20092010 ...
- SEE Improvement Idea by Mark Lefler, CCC, January 04, 2010
2011- 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
2013- SEE by Rasjid Chan, CCC, February 25, 2013
- Static Exchange Evaluation... by Steve Maughan, CCC, July 10, 2013 [12]
- SEE() is slow and SEE() is fast by Steven Edwards, CCC, August 09, 2013
20142015 ...
External Links
References
What links here?
Up one level