Pawn+Hash+Table


 * Home * Evaluation * Pawn Structure * Pawn Hash Table**
 * [[image:Elke_Rehder_Chess_Schach_Woodcut_Pawns_King_Bauer_Koenig.jpg link="http://www.elke-rehder.de/Chess_Woodcuts.htm"]] ||~  || A **Pawn Hash Table** is often used inside a chess programs to [|cache] purely pawn related pattern and evaluation stuff. Compared to the main transposition table, since the pawn structure inside the search changes rarely or transpose, the number of cached entries required might be quite low (a few K) to get a sufficient hit rate above 95% or even 99% for most positions, specially if the pawn structure is settled or relatively fixed after the opening. On the other hand, most programmers store not only pure aggregated pawn evaluation scores, but other computation expensive pawn structure stuff which is used in second pass evaluation considering pieces and king. Terms for various game phases and king origins for all possible wings/center per side are often calculated [|speculatively], i.e. pawn shield or pawn storm stuff later used by king safety.

While the content of the pawn hash table entry varies a lot between different chess programs and their implementation, it is not uncommon that one entry exceeds 1/2 K-Byte. Some programs store sets or bitboards of strong pawns (passers, candidates), square of most advanced passer, different kind of weak pawn sets and whatever else. Despite, some programs cache pawn-king stuff separately which requires king squares included inside the index calculation as well table entry for verifications. || toc =Pawn Hash Index= Most simple, common and recommend is to keep an incremental updated, dedicated Zobrist- or BCH-keys similar to the main transposition table, initialized from all squares occupied by pawns only, side to move does not matter. The update of that key is therefor only necessary for the relative rare pawn moves or captures with pawns as aggressor or victim. The hash table index is computed by key modulo number of entries, which might be a cheap and-instruction from the key for power of two sized tables.
 * Pawns threaten the King ||~  ||^   ||

Alternatively, considering hits from the transposition table, or a dedicated evaluation hash table, one may use a fast hash function to compute an index from the white and black pawn bitboards on the fly, i.e. either a modulo or a multiplication and shift à la magic bitboards by the difference of the disjoint pawn sets. To verify correct entries while probing, one needs either to store (a part) of the dedicated Zobrist/BCH key, or for 100% correctness 2*48 bits from the pawn occupancy bitboards. This value could be further compressed with the expense of more calculation overhead by means of n-like men:

> math \sum\limits_{wp=0}^{8}\sum\limits_{bp=0}^{8}\frac {48!}{wp! (48-wp)!}\frac {(48-wp)!}{bp! (48-wp-bp)!} = 2^{55.45} math

This can be further reduced by mirroring the board, considering symmetric positions or detecting illegal positions.

=See also=
 * Evaluation Hash Table
 * Hash Table
 * Material Hash Table
 * Material Tables
 * Transposition Table

=Forum Posts=

1999

 * [|Q: pawn hash?] by Scott Gasch, CCC, July 20, 1999
 * [|regular hash key & pawn hash key together - good idea?] by Tom Kerrigan, CCC, September 16, 1999

2000 ...

 * [|A question about pawn hash tables] by Andreas Herrmann, CCC, September 13, 2000
 * [|A few hashing questions] by Severi Salminen, CCC, December 02, 2001
 * [|Pawn Hash Collisions in Crafty] by David Rasmussen, CCC, December 05, 2001
 * [|Crafty's 32-bit pawn hash collision figures?] by Severi Salminen, CCC, December 06, 2001
 * [|Pawn hash table: need some helps?] by Pham Hong Nguyen, CCC, June 23, 2002
 * [|Ultra small pawn hash efficiency] by Vladimir Medvedev, CCC, November 21, 2002
 * [|programmers: pawn hash tables] by Joel, CCC, March 08, 2003
 * [|pawn hash tables] by Joshua Lee, CCC, August 01, 2003
 * [|The key of pawn hash tables is based on what exactly?] by Uri Blass, CCC, September 06, 2003
 * [|Pawn hashing without Zobrist keys] by Gerd Isenberg, CCC, September 12, 2003
 * [|Pawn Hash Question] by Dan Honeycutt, CCC, March 15, 2004
 * [|Which pawn positions go into a pawn hash table?] by pd42, rgcc, May 26, 2004
 * [|pawn hash] by Tor Lattimore, CCC, July 03, 2004
 * [|Initialization of pawn hash table] by Zach Wegner, CCC, September 26, 2004

2005 ...

 * [|About pawn hash tables] by Uri Blass, CCC, May 10, 2007
 * [|An interesting bug in Hamsters] by Alessandro Scotti, CCC, August 02, 2007 » Hamsters

2010 ...

 * [|Pawn Hash] by Harm Geert Muller, CCC, March 18, 2010
 * [|Possible pawn hash speed optimization?] by John Merlino, CCC, September 19, 2011

2015 ...

 * [|pawn hash and ep] by J. Wesley Cleveland, CCC, February 01, 2016
 * [|Buckets for pawn hash?] by J. Wesley Cleveland, CCC, February 04, 2016
 * [|pawn hash and eval tuning] by J. Wesley Cleveland, CCC, February 21, 2016 » Automated Tuning
 * [|hash eval, hash pawn or twice ?] by Daniel Anulliero, March 19, 2016 » Evaluation Hash Table
 * [|Pawn hash] by Karlo Bala Jr., CCC, October 06, 2016
 * [|pawn hash] by Volker Annuss, CCC, November 18, 2016

=External Links=
 * [|Transposition table - Related techniques, from Wikipedia]
 * [|Chess Engine Anomalies, evidently caused by hash-table collisions and effects of multithreading] by Kenneth Wingate Regan

=References= =What links here?= include page="Pawn Hash Table" component="backlinks" limit="120"
 * Up one level**