This is a temporary, read-only recovery of the chessprogrammingwiki while a longer-term plan is worked out. Editing is not possible right now, but will be again soon.
Chess Programming Wiki All pages Other namespaces

Murka

Home * Engines * Murka

Murka’s silhouette 1Murka’s silhouette 1


  1. Силуэт сидящей кошки Мурки, Sitting cat Murka’s silhouette by AVRS, January 2007↩︎

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 1. In July 2013, the significant improved Murka 3.0 was released 2, tuned with a modified Nelder–Mead method 3.

Contents
  1. Description
    1. Bitboard Infrastructure
    2. Move Generation
    3. Search
    4. Evaluation Features
  2. Etymology
  3. See also
  4. Forum Posts
  5. External Links
    1. Chess Engine
    2. Misc
  6. References

Description

4

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.

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 5. The original version of the lyrics played by Konstantin Sokolsky was apparently written by Odessa poet Jacob Yadov in 1923 .

See also

Forum Posts

Chess Engine

Misc

Watch on YouTube

References

Up one Level


  1. Мурка / Murka by Wildcat, immortalchess, May 31, 2010 (Russian, no longer available)↩︎

  2. Murka 3.0 released by Günther Höhne, CCC, July 17, 2013↩︎

  3. Re: Мурка / Murka # 852 by Wildcat, immortalchess, December 11, 2011 (Russian, no longer available)↩︎

  4. Description based on Murka_3.rar/Murka_3/description_eng.txt↩︎

  5. Мурка (значения, disambiguation) — Википедия (Russian)↩︎

Categories: Open Source · UCI · WinBoard · XBoard · X86 · X64 · PC · Windows · Linux · Mammal · Music

What links here

Contributors: GerdIsenberg.