Murka

Home * Engines * Murka



Murka, (Мурка) a Chess Engine Communication Protocol and UCI compliant by Igor Korshunov, written in C++. 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, tuned with a modified Nelder–Mead method.

=Description=

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. 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]; }
 * 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

 * Material with adjustment
 * Piece-square tables
 * Recognizing draw material
 * Rooks on open/halfopen files
 * Mobility
 * King Safety
 * Square control
 * Pawn shield
 * Possibility of castling
 * Pawn structure
 * Open/closed pawns
 * Isolated pawns
 * Backward pawns
 * Passed pawns
 * Friendly/opponent piece(s) on passer's frontspan
 * Squares attacked on passer's frontspan exclusively by opponent
 * King passer tropism
 * Candidates
 * 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
 * WildCat

=Forum Posts=
 * 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/15

Misc

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

=References= Up one Level