Older Version
Newer Version
GerdIsenberg
Nov 11, 2016
**[[Home]] * [[Engines]] * Murka**
|| [[image:Cat_Murka_silhouette.svg.png width="222" height="261" link="http://commons.wikimedia.org/wiki/File:Cat_Murka_silhouette.svg"]] ||~ || **Murka**, (Мурка)
a [[Chess Engine Communication Protocol]] and [[UCI]] compliant [[Open Source Engines|open source chess engine]] written in [[Cpp|C++]] by [[Igor Korshunov]]. Since his [[WildCat]] sources became no longer maintainable, Igor decited to start a new engine from scratch, first released in May 2010 <ref>[[http://immortalchess.net/forum/showthread.php?t=2202|Мурка / Murka]] by [[Igor Korshunov|Wildcat]], [[Computer Chess Forums|immortalchess]], May 31, 2010 (Russian)</ref>. In July 2013, the significant improved Murka 3.0 was released <ref>[[http://www.talkchess.com/forum/viewtopic.php?t=48673|Murka 3.0 released]] by Günther Höhne, [[CCC]], July 17, 2013</ref>, apparently [[Automated Tuning|tuned]] with a modified [[http://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method|Nelder–Mead method]] <ref>[[http://immortalchess.net/forum/showthread.php?t=2202&page=43|Re: Мурка / Murka # 852]] by [[Igor Korshunov|Wildcat]], [[Computer Chess Forums|immortalchess]], December 11, 2011 (Russian)</ref>. ||
|| Murka’s silhouette <ref>Силуэт сидящей кошки Мурки, [[http://commons.wikimedia.org/wiki/File:Cat_Murka_silhouette.svg|Sitting cat Murka’s silhouette]] by [[http://commons.wikimedia.org/wiki/User:AVRS|AVRS]], January 2007</ref> ||~ ||^ ||
[[toc]]
=Description=
<ref>Description based on Murka_3.rar/Murka_3/description_eng.txt</ref>
==Bitboard Infrastructure==
Initially starting with [[Rotated Bitboards|rotated bitboards]], Murka now uses [[Magic Bitboards|magic bitboards]] to determine [[Sliding Piece Attacks|sliding piece attacks]]. [[#BitScan]][[BitScan#Bitscanforward|Bitscan forward]] is either done by even [[BitScan#DeBruijnMultiplation|De Bruijn Multiplication]] or [[x86-64]] [[BitScan#bsfbsr|processor instruction]] via the _BitScanForward64 intrinsic <ref>[[http://msdn.microsoft.com/en-us/library/wfd9z0bb%28v=VS.100%29.aspx|_BitScanForward, _BitScanForward64]], Visual C++ Language Reference</ref> . However, on [[x86-64]] for scalar integers with appropriate reduced value range, it is not recommended to use [[Byte|8-bit]] or [[Word|16-bit]] types, but 32-bit [[Double Word|double words]].
[[code format="cpp"]]
#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
[[code]]
==Move Generation==
The staged [[Move Generation|move generator]] uses five routines, one for all moves, and further for [[Captures|captures]] and [[Promotions|queening]], [[Check#CheckEvasion|check evasions]], [[Quiet Moves|quiet moves]], and finally [[Quiescence Search#Checks|checks]], which has a mask to exclude already generated captures.
==Search==
Murka applies [[Fail-Soft|fail-soft]] [[Principal Variation Search|PVS]] with [[Transposition Table|transposition table]] inside an [[Iterative Deepening|iterative deepening]] framework at the [[Root|root]]. [[Selectivity]] is realized by [[Null Move Pruning#AdaptiveNullMovePruning|adaptive null move pruning]] with [[Depth Reduction R|R]] increased with [[Depth|depth]] and on [[Evaluation|evaluation]] [[Score|score]] by margin worse than [[Alpha|alpha]], and [[Late Move Reductions|LMR]] with verification, very aggressively at [[Node Types#CUT|Cut-nodes]]. [[Check Extensions|Checks]] and [[Recapture Extensions|good recaptures]] are [[Extensions|extended]] at [[Node Types#PV|PV-nodes]] only, while [[Pruning|pruning]] is done at shallow depths in too good and too bad positions. [[Move Ordering|Move ordering]] considers [[Hash Move|hash move]], [[MVV-LVA|MVV/LVA]] for good [[Captures|captures]] with [[Static Exchange Evaluation|SEE]] >= 0, two [[Killer Move|killer moves]], [[Quiet Moves|quiet moves]] by [[History Heuristic|history heuristic]], and remaining captures. The [[Quiescence Search|quiescence search]] looks for good captures in MVV/LVA order and [[Promotions|queen promotions]]. At the [[Horizon Node|horizon]], the first ply of quiescence, [[Quiescence Search#Checks|check giving moves]] are tried.
==Evaluation Features==
* [[Material]] with adjustment
* [[Piece-Square Tables|Piece-square tables]]
* Recognizing [[Draw Evaluation|draw material]]
* [[Rook on open file|Rooks on open/halfopen files]]
* [[Mobility]]
* [[King Safety]]
> [[King Safety#SquareControl|Square control]]
> [[King Safety#PawnShield|Pawn shield]]
> [[Castling rights|Possibility of castling]]
* [[Pawn Structure|Pawn structure]]
> [[Open Pawns (Bitboards)|Open/closed pawns]]
> [[Isolated Pawns (Bitboards)|Isolated pawns]]
> [[Backward Pawns (Bitboards)|Backward pawns]]
* [[Passed Pawns (Bitboards)|Passed pawns]]
> Friendly/opponent piece(s) on passer's [[Pawn Spans|frontspan]]
> [[Square Control|Squares attacked]] on passer's [[Pawn Spans|frontspan]] exclusively by opponent
> [[King Pawn Tropism|King passer tropism]]
> [[Candidates (Bitboards)|Candidates]]
* [[Trapped Pieces|Trapped bishop]]
* [[Bad bishop]]
* [[Bishops of Opposite Colors|Opposite colors bishops ending]]
* [[Tempo|Side to move bonus]]
=Etymology=
Murka (Мурка) is a Russian common pet name for a [[http://en.wikipedia.org/wiki/Cat|cat]], and one of the most famous [[http://en.wikipedia.org/wiki/Russian_chanson|Russian chansons]] <ref>[[http://ru.wikipedia.org/wiki/%D0%9C%D1%83%D1%80%D0%BA%D0%B0_%28%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%29|Мурка (значения, disambiguation) — Википедия]] (Russian)</ref>. The original version of the lyrics played by [[http://en.wikipedia.org/wiki/Konstantin_Sokolsky|Konstantin Sokolsky]] was apparently written by [[http://en.wikipedia.org/wiki/Odessa|Odessa]] poet [[http://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D0%BE%D0%B2,_%D0%AF%D0%BA%D0%BE%D0%B2_%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B8%D1%87|Jacob Yadov]] in 1923 .
=See also=
* [[CookieCat]]
* [[Various Classifications#Mammal|Mammal]]
* [[WildCat]]
=Forum Posts=
* [[http://immortalchess.net/forum/showthread.php?t=2202|Мурка / Murka]] by [[Igor Korshunov|Wildcat]], [[Computer Chess Forums|immortalchess]], May 31, 2010 (Russian) [[http://translate.google.com/translate?sl=ru&tl=en&js=n&prev=_t&hl=en&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fimmortalchess.net%2Fforum%2Findex.php|translated]]
* [[http://www.talkchess.com/forum/viewtopic.php?t=48673|Murka 3.0 released]] by Günther Höhne, [[CCC]], July 17, 2013
* [[http://www.talkchess.com/forum/viewtopic.php?t=48775|You are from Russia !!!!!]] by [[Marco Costalba]], [[CCC]], July 28, 2013
=External Links=
==Chess Engine==
* [[http://www.sdchess.ru/download_engines.htm|Downloads]] from [[http://www.sdchess.ru/|sdchess.ru]]
* [[http://www.computerchess.org.uk/ccrl/4040/cgi/compare_engines.cgi?family=Murka&print=Rating+list&print=Results+table&print=LOS+table&print=Ponder+hit+table&print=Eval+difference+table&print=Comopp+gamenum+table&print=Overlap+table&print=Score+with+common+opponents|Murka]] at [[CCRL|CCRL 40/40]]
==Misc==
* [[http://ru.wikipedia.org/wiki/%D0%9C%D1%83%D1%80%D0%BA%D0%B0|Мурка — Википедия]] (Russian)
* [[http://ru.wikipedia.org/wiki/%D0%9C%D1%83%D1%80%D0%BA%D0%B0_%28%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%29|Мурка (значения, disambiguation) — Википедия]] (Russian)
* [[http://de.wikipedia.org/wiki/Murka|Murka – Wikipedia.de]] (German)
* [[http://ru.wikipedia.org/wiki/%D0%A3%D1%82%D1%91%D1%81%D0%BE%D0%B2,_%D0%9B%D0%B5%D0%BE%D0%BD%D0%B8%D0%B4_%D0%9E%D1%81%D0%B8%D0%BF%D0%BE%D0%B2%D0%B8%D1%87|Леонид Утёсов]]: не спетая "Мурка" вторая половина 1920х, ([[http://en.wikipedia.org/wiki/Leonid_Utyosov|Leonid Utyosov]] - Murka, late 20s), [[http://en.wikipedia.org/wiki/YouTube|YouTube]] Video
> [[media type="custom" key="23535890"]]
=References=
<references />
=What links here?=
[[include page="Murka" component="backlinks" limit="60"]]
**[[Engines|Up one Level]]**