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].
Contents
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)