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 [2].
In July 2013, the significant improved Murka 3.0 was released [3], tuned with a modified Nelder–Mead method [4].
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.
#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
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
- Pawn structure
- 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 [6]. The original version of the lyrics played by Konstantin Sokolsky was apparently written by Odessa poet Jacob Yadov in 1923 .
See also
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
- ↑ Силуэт сидящей кошки Мурки, Sitting cat Murka’s silhouette by AVRS, January 2007
- ↑ Мурка / Murka by Wildcat, immortalchess, May 31, 2010 (Russian, no longer available)
- ↑ Murka 3.0 released by Günther Höhne, CCC, July 17, 2013
- ↑ Re: Мурка / Murka # 852 by Wildcat, immortalchess, December 11, 2011 (Russian, no longer available)
- ↑ Description based on Murka_3.rar/Murka_3/description_eng.txt
- ↑ Мурка (значения, disambiguation) — Википедия (Russian)