Murka

From Chessprogramming wiki
Jump to: navigation, search

Home * Engines * Murka

Murka’s silhouette [1]

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

[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. 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

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

External Links

Chess Engine

Misc

References

  1. Силуэт сидящей кошки Мурки, Sitting cat Murka’s silhouette by AVRS, January 2007
  2. Мурка / Murka by Wildcat, immortalchess, May 31, 2010 (Russian, no longer available)
  3. Murka 3.0 released by Günther Höhne, CCC, July 17, 2013
  4. Re: Мурка / Murka # 852 by Wildcat, immortalchess, December 11, 2011 (Russian, no longer available)
  5. Description based on Murka_3.rar/Murka_3/description_eng.txt
  6. Мурка (значения, disambiguation) — Википедия (Russian)

Up one Level