Kurt

Home * Engines * Kurt



Kurt, a Chess Engine Communication Protocol and UCI compliant open source chess engine under the GNU General Public License, written by Oliver Uwira in C. Able to play Chess960, Kurt participated at the 2nd Livingston Chess960 Computer World Championship 2006 in Mainz. The last recent Kurt 0.9.2.2 beta is available from Jim Ablett's site.

=Bitboards=

Sliding Piece Attacks
Kurt 0.9.2.x beta is a none rotated bitboard engine, and uses a three-dimensional pre-initialized array of 128 KByte to lookup sliding piece attacks, indexed by square (0..63), line occupancy index (0..63, considering the outer squares) and finally the four line directions (0..3) for ranks, files, diagonals and anti-diagonals. The six-bit line occupancy index is calculated from the masked line of empty squares, multiplied by a 64-bit De Bruijn Sequence for each square and direction, shifting the product right by 58.

BitScan
Kurt 0.9.2.x beta uses Matt Taylor's folded BitScan. Returning a byte. static const int LsbDeBruijnMap[64] = {  63, 30,  3, 32, 59, 14, 11, 33,   60, 24, 50,  9, 55, 19, 21, 34,   61, 29,  2, 53, 51, 23, 41, 18,   56, 28,  1, 43, 46, 27,  0, 35,   62, 31, 58,  4,  5, 49, 54,  6,   15, 52, 12, 40,  7, 42, 45, 16,   25, 57, 48, 13, 10, 39,  8, 44,   20, 47, 38, 22, 17, 37, 36, 26 };

unsigned char LeastSignificantBit(bitboard b) { unsigned int fold; b ^= (b - 1); fold = ((int) b) ^ ((int)(b>>32)); return LsbDeBruijnMap[(fold * 0x78291acf) >> 26]; }

Collapsing Files and Ranks
Collapsed files and collapsed ranks, as posted by Urban Koistinen in 1997, and Steffan Westcott in 2006 are used in 0.9.2.x for initialization purposes: /** * CollapseFiles(bitboard) folds a bitboard vertically into an 8 bit word. * By or-ing the files of a bitboard, a 8-bit folded bitboard is calculated. * E.g. by folding a bitboard containing the position of all pawns open files * can be determined: * *   abcdefgh * * 8 00000000    * 7  10100110    * 6  00010001                         abcdefgh * 5 00000000   => CollapseFiles => 11110111 * 4 00010000    * 3  00100000   Negating the result yields the open-property of * 2  11000011   the 8 files => the e-file is open. * 1 00000000    * *     Pawns */ unsigned char CollapseFiles(bitboard src) {  src |= src >> 32; src |= src >> 16; src |= src >> 8; return (unsigned char)(src & 0xff); }

/** * CollapseRanks folds a bitboard horizontally into an 8 bit word. * This is similar to CollapseFiles(bitboard). */ unsigned char CollapseRanks(bitboard src) {  src |= src >> 4;   // No masking needed src |= src >> 2;  //    "         " src |= src >> 1;  //    "         " return (unsigned char)(((src & 0x0101010101010101) * 0x0102040810204080) >> 56); }

=Search= Kurt's search is PVS with null move pruning and killer heuristic with two slots for mate killers and other killer moves each, kept in its parent's node structure. Further, SEE is used in move ordering and quiescence search pruning.

=Evaluation= The evaluation is speeded up by a hash table and considers material and various positional terms such as development, pawn structure, in particular backward pawns and passed pawns, and king safety.

=Forum Posts=
 * One step forward again by Oliver Uwira, CCC, September 22, 2010
 * New Version: Kurt 0.9.2 beta by Oliver Uwira, CCC, October 11, 2010
 * New Version: Kurt 0.9.2 beta by Oliver Uwira, Winboard Forum, October 11, 2010

=External Links=

Chess Engine

 * Index of /chess/engines/Jim Ablett/KURT compiled by Jim Ablett, hosted by Kirill Kryukov
 * Index of /chess/engines/Jim Ablett/+++ LINUX ENGINES ++/64 BIT/kurt


 * Mac Chess Engines Repository by Julien Marcel

Misc

 * Kurt (disambiguation) from Wikipedia
 * Kurt & Rolf Chess Homepage of Kurt Utzinger
 * Kurt Richter from Wikipedia
 * Kurt Tucholsky from Wikipedia
 * Kurt Wallander from Wikipedia
 * Kurt Weill from Wikipedia
 * Louis Armstrong - Mack the Knife, Hollywood Palace, May 01, 1965, YouTube Video


 * Miloš Kopecký - Mackie Messer, YouTube Video

=References= Up one Level