Murka

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. In July 2013, the significant improved Murka 3.0 was released, apparently tuned with a modified [|Nelder–Mead method]. || toc =Description=
 * Home * Engines * Murka**
 * [[image:Cat_Murka_silhouette.svg.png width="222" height="261" link="http://commons.wikimedia.org/wiki/File:Cat_Murka_silhouette.svg"]] ||~  || **Murka**, (Мурка)
 * Murka’s silhouette ||~  ||^   ||

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. 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. code format="cpp" inline uint8 LSB(BitBoard b) // Least Significant Bit {  register unsigned long index; _BitScanForward64(&index, b); return index; } 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 };
 * 1) ifdef _M_X64
 * 1) else

inline uint8 LSB(const BitBoard b) { return deBruijnIndex64[((b & -b) * 0x07EDD5E59A4E28C2) >> 58]; } code
 * 1) endif

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
 * Material with adjustment
 * Piece-square tables
 * Recognizing draw material
 * Rooks on open/halfopen files
 * Mobility
 * King Safety
 * Pawn structure
 * Passed pawns
 * Trapped bishop
 * Bad bishop
 * Opposite colors bishops ending
 * Side to move bonus

=Etymology= Murka (Мурка) is a Russian common pet name for a [|cat], and one of the most famous [|Russian chansons]. The original version of the lyrics played by [|Konstantin Sokolsky] was apparently written by [|Odessa] poet [|Jacob Yadov] in 1923.

=See also=
 * CookieCat
 * Mammal
 * WildCat

=Forum Posts=
 * [|Мурка / Murka] by Wildcat, immortalchess, May 31, 2010 (Russian) [|translated]
 * [|Murka 3.0 released] by Günther Höhne, CCC, July 17, 2013
 * [|You are from Russia !!!!!] by Marco Costalba, CCC, July 28, 2013

=External Links=

Chess Engine

 * [|Downloads] from [|sdchess.ru]
 * [|Murka] at CCRL 40/40

Misc
> media type="custom" key="23535890"
 * [|Мурка — Википедия] (Russian)
 * [|Мурка (значения, disambiguation) — Википедия] (Russian)
 * [|Murka – Wikipedia.de] (German)
 * [|Леонид Утёсов]: не спетая "Мурка" вторая половина 1920х, ([|Leonid Utyosov] - Murka, late 20s), [|YouTube] Video

=References= =What links here?= include page="Murka" component="backlinks" limit="60"
 * Up one Level**