#ifdef _M_X64 inline uint8 LSB(BitBoard b) // Least Significant Bit { register unsigned long index; _BitScanForward64(&index, b); return index; } #else const uint8 deBruijnIndex64[64] = { 63, 0, 58, 1, 59, 47, 53, 2, 60, 39, 48, 27, 54, 33, 42, 3, 61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43, 14, 22, 4, 62, 57, 46, 52, 38, 26, 32, 41, 50, 36, 17, 19, 29, 10, 13, 21, 56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5 }; inline uint8 LSB(const BitBoard b) { return deBruijnIndex64[((b & -b) * 0x07EDD5E59A4E28C2) >> 58]; } #endif
a Chess Engine Communication Protocol and UCI compliant open source chess engine written in C++ by Igor Korshunov. Since his WildCat sources became no longer maintainable, Igor decited to start a new engine from scratch, first released in May 2010 [1]. In July 2013, the significant improved Murka 3.0 was released [2], apparently tuned with a modified Nelder–Mead method [3].
Table of Contents
Description
[5]Bitboard Infrastructure
Initially starting with rotated bitboards, Murka now uses magic bitboards to determine sliding piece attacks. Bitscan forward is either done by even De Bruijn Multiplication or x86-64 processor instruction via the _BitScanForward64 intrinsic [6] . However, on x86-64 for scalar integers with appropriate reduced value range, it is not recommended to use 8-bit or 16-bit types, but 32-bit double words.Move Generation
The staged move generator uses five routines, one for all moves, and further for captures and queening, check evasions, quiet moves, and finally checks, which has a mask to exclude already generated captures.Search
Murka applies fail-soft PVS with transposition table inside an iterative deepening framework at the root. Selectivity is realized by adaptive null move pruning with R increased with depth and on evaluation score by margin worse than alpha, and LMR with verification, very aggressively at Cut-nodes. Checks and good recaptures are extended at PV-nodes only, while pruning is done at shallow depths in too good and too bad positions. Move ordering considers hash move, MVV/LVA for good captures with SEE >= 0, two killer moves, quiet moves by history heuristic, and remaining captures. The quiescence search looks for good captures in MVV/LVA order and queen promotions. At the horizon, the first ply of quiescence, check giving moves are tried.Evaluation Features
Square control
Pawn shield
Possibility of castling
Open/closed pawns
Isolated pawns
Backward pawns
Friendly/opponent piece(s) on passer's frontspan
Squares attacked on passer's frontspan exclusively by opponent
King passer tropism
Candidates
Etymology
Murka (Мурка) is a Russian common pet name for a cat, and one of the most famous Russian chansons [7]. The original version of the lyrics played by Konstantin Sokolsky was apparently written by Odessa poet Jacob Yadov in 1923 .See also
Forum Posts
External Links
Chess Engine
Misc
References
What links here?
Up one Level