Changes

Jump to: navigation, search

Crafty

38,753 bytes added, 16:12, 31 May 2018
Created page with "'''Home * Engines * Crafty''' FILE:CraftyOwl.jpg|border|right|thumb|link=http://twogirlsbeingcrafty.blogspot.de/2011/04/owl-pin-cushion.html|Crafty Owl <r..."
'''[[Main Page|Home]] * [[Engines]] * Crafty'''

[[FILE:CraftyOwl.jpg|border|right|thumb|link=http://twogirlsbeingcrafty.blogspot.de/2011/04/owl-pin-cushion.html|Crafty Owl <ref>[http://twogirlsbeingcrafty.blogspot.de/2011/04/owl-pin-cushion.html Two Girls Being Crafty: Owl Pin Cushion]</ref> ]]

'''Crafty''', <ref>[http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=410448&t=39381 Re: Robert - How did you came up with the name Crafty] by [[Robert Hyatt]], [[CCC]], June 16, 2011</ref> <br/>
a portable [[Open Source Engines|open source engine]] supporting the [[Chess Engine Communication Protocol]] written by [[Robert Hyatt]] in [[C|ANSI C]] starting in the early 90s, loosely derived from [[Cray Blitz]], winner of the [[WCCC 1983|1983]] and [[WCCC 1986|1986]] World Computer Chess Championships <ref>[https://en.wikipedia.org/wiki/Crafty Crafty from Wikipedia]</ref>. Crafty pioneered in using [[Rotated Bitboards|Rotated bitboards]] , [[Parallel Search|parallel search]] and probing [[Nalimov Tablebases]]. It performs a [[Principal Variation Search|principal variation search]], [[Null Move Pruning|null move pruning]], [[Late Move Reductions|LMR]] as well as a [[SEE - The Swap Algorithm|SEE swap algorithm]] for [[Move Ordering|move ordering]] and to [[Pruning|prune]] "bad" [[Captures|captures]] in [[Quiescence Search|quiescence search]]. In 2006/2007, Crafty switched from rotated to [[Magic Bitboards|Magic bitboards]] <ref>[http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=5452&start=56 Re: Fastest Magic Move Bitboard Generator ready to use] by [[Robert Hyatt]], [[Computer Chess Forums|Winboard Forum]], November 09, 2006</ref>, according to Robert Hyatt because it was not faster but simpler <ref>[http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=140141&t=16002 Re: BitBoard Tests Magic v Non-Rotated 32 Bits v 64 Bits] by [[Robert Hyatt]], [[CCC]], August 25, 2007</ref>. Crafty '''25.1''', released in October 2016, not only includes an increase in playing strength <ref>[http://www.craftychess.com/ Crafty Chess] managed by [[Tracy Riegle]]</ref> but support for [[Syzygy Bases|Syzygy bases]] by [[Ronald de Man]] aided by the coding [[Syzygy Bases#Fathom|contributions]] of [[Basil Falcinelli]] <ref>[http://www.talkchess.com/forum/viewtopic.php?t=61594 Crafty 25.1 Release] by [[Michael Byrne|Michael B]], [[CCC]], October 04, 2016</ref>. Crafty '''25.3''' features [[Playing Strength|playing strength]] adjustment between 800 and 2600 Elo <ref> [http://www.talkchess.com/forum/viewtopic.php?t=62907 Crafty Play By Elo ( Crafty v25.3)] by [[Michael Byrne|Michael B]], [[CCC]], January 23, 2017</ref>.

=Team Members=
as mentioned at [[WCRCC 2010]] <ref>[http://aigames.net/ACCA/ACCAWCRCC/2010ACCAWCRCC/WCRCCPart.html 2010 Fourth Annual ACCA World Computer Rapid Chess Championships - Participants]</ref> and [[CCT15]], 2013 <ref>[https://www.cctchess.com/previous-events/cct-15/participants/ CCT 15 Participants | CCT Events]</ref>
* [[Peter Berger]], Crafty's [[Opening Book Authors|book author]] at [[WCCC 2004]], [[WCCC 2005]] and [[WCCC 2006]]
* [[Michael Byrne]]
* [[Robert Hyatt]]
* [[Tracy Riegle]]
* [[Peter Skinner]]

=Tournaments=
Crafty participated at four [[World Microcomputer Chess Championship|World Microcomputer Chess Championships]], the [[WMCCC 1996]], [[WMCCC 1997]], [[WMCCC 2000]], and [[WMCCC 2001]], three [[World Computer Chess Championship|World Computer Chess Championships]], the [[WCCC 2004]], [[WCCC 2005]] and [[WCCC 2006]], the [[ACCA Americas' Computer Chess Championship|ACCA Americas' Computer Chess Championships]], the [[ACCA World Computer Rapid Chess Championship|ACCA World Computer Rapid Chess Championships]], [[CCT Tournaments|CCT]] and various other [[Tournaments|tournaments]]. Crafty won the [[CCT1]] in 2000, [[CCT5]] in 2003 and [[CCT6]] in 2004. At the [[ACCA 2010|Fifth Annual ACCA Americas' Computer Chess Championships]] in 2010 Crafty was runner-up behind [[Thinker]] <ref>[http://compchess.org/ACCAChampionships/ACCA2010Championships/2010ACCCResults.html The 2010 Fifth Annual ACCA Americas' Computer Chess Championships - Results]</ref> .

=Descriptions=
==1997==
from the [[ICGA]] page <ref>[https://www.game-ai-forum.org/icga-tournaments/program.php?id=34 Crafty's ICGA Tournaments]</ref> :
Crafty is a "bitmapper" using 64 bit words to represent the chess board, along the lines of the famous [[Chess (Program)|Chess 4.x]] program from [[Northwestern University]]. It uses a traditional [[Alpha-Beta|alpha/beta search]] with the [[Principal Variation Search|PVS]] ([[Null Window|null-window]]) enhancement, along with [[Null Move Pruning|null-moves]] ([[Depth Reduction R|R]]=2) and lots of search [[Extensions|extensions]] including "[[Extensions#FractionalExtensions|fractional ply extensions]]" to drive the search deeper along interesting lines. It has a very simple [[Quiescence Search|quiescence search]] that only considers [[Captures|capture moves]] and is fairly selective about which captures are included. It does a full endpoint [[Evaluation|evaluation]], with no root [[Piece-Square Tables#Preprocessing|pre-processing]] nor [[Incremental Updates|incrementally updated]] scoring terms. It is currently about 37,000 lines of ANSI C with about 3,000 lines of that being evaluation.

Since Crafty uses [[Bitboards|bitmaps]], much of the [[Evaluation|evaluation]] is significantly shorter than it would be in a more traditional (array-based) [[Board Representation|board representation]], so that this 3,000 lines of code is somewhat misleading (for example, to ask "can this pawn run and promote before the opposing king can get there?" only takes one line of code in Crafty. It is still very fast, searching around 100,000 moves per second. At 60 seconds per move, it solves 297/300 of the [[Win At Chess]] tactical positions. It has a large [[Opening Book|opening database]] composed from 250,000 GM games, and uses 3-4-5 piece [[Endgame Tablebases|endgame databases]] during the search (not just at the [[Root|root]] of the [[Search Tree|tree]].) It has played over 100,000 games during the past two years, playing on various [[Chess Server|chess servers]] around the world, and has maintained ratings on these servers that are always near the very top.

==2008==
from a [[CCC]] post <ref>[http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=235340&t=25215 Re: Hardware vs Software - test result] by [[Robert Hyatt]], [[CCC]], December 03, 2008</ref> :
Crafty's basic search is pretty simple. Just [[Principal Variation Search|PVS]] + [[Null Move Pruning|null-move]] + [[Late Move Reductions|LMR]] + [[Check Extensions|check extension]] (all others have been removed after testing showed they hurt performance rather than helped), + simple q-search checks (I am playing with this as I write this however and it might change) + simple q-search. I've used [[Killer Heuristic|killers]] and [[Transposition Table|hashing]] since middle 70's so those are not new. [[Bitboards]] were around in the middle 70's so that's not new. I don't think there is anything remarkable in my evaluation, certainly nothing we were not doing 15 years ago or longer, other than tuning adjustments.

As far as tuning goes on LMR and null-move, I have not gone very far afield there. I use [[Depth Reduction R|R]]=3 everywhere. LMR is a 1-ply reduction although I have plans to try a variable reduction so that for moves that look really ugly I reduce them even further (white playing Na1 for example, with king on the other side of the board, no passed pawns, etc...)

I have even run without the check extension, the only one that is left. Many think the purpose of this extension is to find deep mates. That's wrong. The purpose is to try to expose [[Horizon Effect|horizon-effect]] moves and avoid them when possible. I also want to test a restricted check extension, where it is only applied in the last N plies where the horizon effect is most notable, where right now I apply them everywhere with no limit, always +1 ply added to depth.
<span id="25"></span>
==Generation II==
Crafty '''25.0''', Generation II, December 2015 <ref>[http://www.talkchess.com/forum/viewtopic.php?t=58688 Crafty 25.0 Release] by Michael B, [[CCC]], December 25, 2015</ref>
* This version contains a major rewrite of the [[Parallel Search|parallel search]] code, now referred to as '''Generation II'''. It has a more lightweight split algorithm, that costs the parent MUCH less effort to split the search. The key is that now the individual "helper" [[Thread|threads]] do all the work, allocating a split block, copying the data from the parent, etc., rather than the parent doing it all. Gen II based on the [[Dynamic Tree Splitting|DTS]] "late-join" idea so that a thread will try to join existing split points before it goes to the idle wait loop waiting for some other thread to split with it. In fact, this is now the basis for the new split method where the parent simply creates a split point by allocating a split block for itself, and then continuing the search, after the parent split block is marked as "joinable". Now any idle threads just "jump in" without the parent doing anything else, which means that currently idle threads will "join" this split block if they are in the "wait-for-work" spin loop, and threads that become idle also join in exactly the same way. This is MUCH more efficient, and also significantly reduces the number of split blocks needed during the search. We also now pre-split the search when we are reasonably close to the root of the tree, which is called a "gratuitous split. This leaves joinable split points laying around so that whenever a thread becomes idle, it can join in at these pre-existing split points immediately. We now use a much more conservative approach when dealing with [[Fail-High|fail highs]] at the [[Root|root]]. Since [[Late Move Reductions|LMR]] and such have introduced greater levels of [[Search Instability|search instability]], we no longer trust a fail-high at the root if it fails low on the research. We maintain the last [[Score|score]] returned for every root move, along with the [[Principal variation|PV]] . Either an [[Exact Score|exact score]] or the [[Bound|bound]] score that was returned. At the end of the iteration, we sort the root move list using the backed-up score as the sort key, and we play the move with the best score. This solves a particularly ugly issue where we get a score for the first move, then another move fails high, but then fails low and the re-search produces a score that is actually WORSE than the original [[Best Move|best move]]. We still see that, but we always play the best move now. One other efficiency trick is that when the above happens, the search would tend to be less efficient since the best score for that fail-high/fail-low move is actually worse than the best move/score found so far. If this happens, the score is restored to the original best move score (in Search()) so that we continue searching with a good [[Lower Bound|lower bound]] , not having to deal with moves that would fail high with this worse value, but not with the original best move's value.
* We also added a new method to automatically tune the new SMP parameters. The command is autotune and "help autotune" will explain how to run it.
* In addition , we did a complete re-factor of pawn evaluation code. There were too many overlapping terms that made tuning difficult. Now a pawn is classified as one specific class, there is no overlap between classes, which simplifies the code significantly. The code is now easier to understand and modify. In addition, the [[Passed Pawn|passed pawn]] evaluation was rewritten and consolidates all the passed pawn evaluation in one place. The evaluation used to add a bonus for [[Tarrasch Rule|rooks behind passed pawns]] in rook scoring, blockading somewhere else, etc. All of this was moved to the passed pawn code to make it easier to understand and modify.
* Added a limited version of [[Futility Pruning#MoveCountBasedPruning|late move pruning]] (LMP) for the last two plies. Once a set number of moves have been searched with no fail high, non-interesting moves are simply skipped in a way similar to [[Futility Pruning|futility pruning]].
* We had a minor change to [[History Heuristic|history counters]] that now rely on a "saturating counter" idea. I wanted to avoid the aging idea, and it seemed to not be so clear that preferring history moves by the depth at which they were good was the way to go. I returned to a history counter idea I tested around 2005 but discarded, namely using a saturating counter. The idea is that a center value (at present 1024) represents a zero score. Decrementing it makes it worse, incrementing it makes it better. But to make it saturate at either end, I only reduce the counter by a fraction of its distance from the saturation point so that once it gets to either extreme value, it will not be modified further avoiding wrap-around. This [[Relative History Heuristic|basic idea]] was originally reported by [[Mark Winands]] in 2005. It seems to provide better results (slightly) on very deep searches. One impetus for this was an intent to fold this into a move so that I could sort the moves rather than doing the selection approach I currently use. However, this had a bad effect on testing, since history information is dynamic and is constantly changing, between two moves at the same ply in fact. The sort fixed the history counters to the value at the start of that ply. This was discarded after testing, but the history counter based on the saturating counter idea seemed to be OK and was left in even though it produced minimal Elo gain during testing.
* We change to the way moves are counted, to add a little more consistency to LMR. Now Next*() returns an order number that starts with 1 and monotonically increases, this order number is used for LMR and such decisions that vary things based on how far down the move list something occurs. Root move counting was particularly problematic with parallel searching, now things are at least "more consistent". The only negative impact is that now the move counter gets incremented even for illegal moves, but testing showed this was a no-change change with one thread, and the consistency with multiple threads made it useful.
* Added the [[Countermove Heuristic|"counter-move" heuristic]] for move ordering ([[Jos Uiterwijk]], [[ICGA Journal#15_1|IJICCA]]) which simply remembers a fail high move and the move at the previous ply. If the hash, captures or killer moves don't result in a fail high, this move is tried next. No significant cost, seems to reduce tree size noticeably. Added a follow-up idea based on the same idea, except we pair a move that fails high with the move two plies back, introducing a sort of "connection" between them. This is a sort of "plan" idea where the first move of the pair enables the second move to fail high. The benefit is that this introduces yet another pair of good moves that get ordered before history moves, and is therefore not subject to reduction. I have been unable to come up with a reference for this idea, but I believe I first saw it somewhere around the time [[Fruit]] showed up, I am thinking perhaps in the [[ICGA Journal|JICCA/JICGA]]. Any reference would be appreciated.
* A minor change to the way the PV and fail-hi/fail-low moves are displayed when [[Pondering|pondering]] .
* Crafty now adds the ponder move to the front of the PV enclosed in parentheses so that it is always visible in console mode. The depths are reaching such extreme numbers the ponder move scrolls off the top of the screen when running in console mode or when "tail -f" is used to watch the log file while a game is in progress. This is a bit trickier than you might think since Crafty displays the game move numbers in the PV.
* The penalty for pawns on same color as bishop now only applies when there is one bishop.
<span id="BitScan"></span>
==Leading or Trailing Zeros==
Crafty had always mapped square-index 0 to square 'a1', 7 to 'h1', and 63 to 'h8' respectively, but recently (crafty-20.6) reversed the bit-index versus square-index mapping from [[BitScan#LeadingZeroCount|leading]] to [[BitScan#TrailingZeroCount|trailing zero count]] based [[Square Mapping Considerations#LittleEndianRankFileMapping|little-endian rank-file]] (LERF), using [[BitScan#Bitscanforward|bitscan forward]] ([[General Setwise Operations#TheLeastSignificantOneBitLS1B|LSB]]) to retrieve squares in '''a1-h8''' order, as most often used in [[MappingHint|CPW]] bitboard samples.

===LSB===
[[BitScan#TrailingZeroCount|Trailing zero count]] aka bitscan forward for non empty sets as used in [[Bitboard Serialization|bitboard serialization]] for [[Move Generation|move generation]] and [[Evaluation|evaluation]] purposes, is implemented with [[x86-64]] [[BitScan#bsfbsr|bsf instruction]] via intrinsic or [[Assembly#InlineAssembly|inline assembly]] if available (there are also 32-bit [[x86]] bsf versions), and a conditional 16-bit [[Byte|byte]] lookup approach otherwise - [[Windows|Windows 64]], [[Linux|Linux 64]] and lookup versions with preprocessor instructions for conditional compiles omitted <ref>[http://www.craftychess.com/downloads/source/ Index of /downloads/source] crafty-23.5.zip, inline64.h, boolean.c</ref>:
<pre>
int LSB(BITBOARD arg1) {
unsigned long index;
if (_BitScanForward64(&index, arg1))
return index;
else
return 64;
}

int static __inline__ LSB(long word)
{
long dummy, dummy2;

asm(" bsfq %1, %0 " "\n\t"
" jnz 1f " "\n\t"
" movq $64, %0 " "\n\t"
"1: " "\n\t"
: "=&r"(dummy), "=&r" (dummy2)
: "1"((long) (word))
: "cc");
return (dummy);
}

unsigned char lsb[65536];

int LSB(BITBOARD arg1) {
if ( arg1 & 65535) return (lsb[ arg1 & 65535]);
if ((arg1 >> 16) & 65535) return (lsb[(arg1 >> 16) & 65535] + 16);
if ((arg1 >> 32) & 65535) return (lsb[(arg1 >> 32) & 65535] + 32);
return (lsb[arg1 >> 48] + 48);
}
</pre>
===Last One===
Earlier Crafty versions prior to 20.6 had a [[BitScan#LeadingZeroCount|leading zero count]] compliant, [[Big-endian|big-endian]] rank-file mapping. Left-bottom square (from White's point of view) 'a1' with square-index 0 was mapped to the leftmost, arithmetical most significant bit of an unsigned 64-bit integer with bit-index 63, while square 'h8' with square-index 63, was mapped to the rightmost, arithmetical least significant bit with bit-index 0. Bitscan forward and found index [[Flipping Mirroring and Rotating#Rotationby180degrees|reversal]] was used in LastOne, to retrieve squares in '''h8-a1''' order <ref>[http://www.craftychess.com/downloads/source/ Index of /downloads/source], crafty-20.5.zip, boolean.c</ref>:
<pre>
int LastOne(BITBOARD arg1)
{
unsigned long index;
if (_BitScanForward64(&index, arg1))
return 63 - index;
else
return 64;
}
</pre>
This one was found in 15.17 with [[MAC OS]] support <ref>[http://www.craftychess.com/downloads/source/ Index of /downloads/source], crafty-15.17.zip, boolean.c</ref>
<pre>
int LastOne(register BITBOARD a)
{
register unsigned long i;
if (i = a & 0xffffffff)
return(__cntlzw(i ^ (i - 1)) + 32);
if (i = a >> 32)
return(__cntlzw(i ^ (i - 1)));
return(64);
}
</pre>

=Selected Games=
==WCCC 2004==
[[WCCC 2004]], round 9, [[Falcon]] - [[Crafty]] <ref>[https://www.game-ai-forum.org/icga-tournaments/round.php?tournament=24&round=9&id=3 Ramat-Gan 2004 - Chess - Round 9 - Game 3 (ICGA Tournaments)]</ref>
<pre>
[Event "WCCC 2004"]
[Site "Ramat Gan, Israel"]
[Date "2004.07.11"]
[Round "9"]
[White "Falcon"]
[Black "Crafty"]
[Result "0-1"]

1.e4 e5 2.Nf3 Nc6 3.Bb5 Nf6 4.Nc3 Bd6 5.O-O O-O 6.d3 h6 7.Be3 a6 8.Ba4 b5
9.Bb3 Na5 10.d4 exd4 11.Bxd4 Be7 12.e5 Ne8 13.Nd5 Nxb3 14.axb3 c5 15.Be3
Bb7 16.b4 Bxd5 17.Qxd5 Nc7 18.Qb7 Rb8 19.Qe4 cxb4 20.Rfd1 Qc8 21.Nd4 Re8
22.Nf5 Bf8 23.Qg4 Kh7 24.Bxh6 gxh6 25.Qh5 Kg8 26.Rd3 Re6 27.Rg3+ Rg6 28.Rxg6+
fxg6 29.Qxg6+ Kh8 30.Nxh6 Bxh6 31.Qxh6+ Kg8 32.Qg6+ Kf8 33.Rd1 Ne6 34.Rd3
Ke7 35.Qf6+ Ke8 36.Rg3 Qc5 37.Rg8+ Nf8 38.Rg7 Rb6 39.Qf7+ Kd8 40.Rg8 Kc7
41.Qxf8 Qxf8 42.Rxf8 a5 43.Ra8 a4 44.g3 Rb8 45.Ra7+ Rb7 46.Ra5 Kb6 47.Ra8
Ra7 48.Rb8+ Kc6 49.Rc8+ Kd5 50.e6 dxe6 51.Rd8+ Kc5 52.Rc8+ Kb6 53.Re8 a3
54.Rxe6+ Kc5 55.bxa3 0-1
</pre>

==WCCC 2006==
[[WCCC 2006]], round 8, [[Diep]] - [[Crafty]] <ref>[https://www.game-ai-forum.org/icga-tournaments/round.php?tournament=16&round=8&id=5 Turin 2006 - Chess - Round 8 - Game 5 (ICGA Tournaments)]</ref>
<pre>
[Event "WCCC 2006"]
[Site "Turin, Italy"]
[Date "2006.05.30"]
[Round "8"]
[White "Diep"]
[Black "Crafty"]
[Result "0-1"]

1.e4 e5 2.Nf3 d6 3.d4 exd4 4.Nxd4 Nf6 5.Nc3 Be7 6.Bf4 O-O 7.Qd2 c6 8.O-O-O b5
9.f3 b4 10.Nce2 c5 11.Nb3 Nc6 12.Bxd6 c4 13.Nc5 Qa5 14.Bxe7 Nxe7 15.Qd6 Nf5
16.exf5 Qxa2 17.g4 a5 18.Rd4 Re8 19.Kd1 Qxb2 20.Nc1 b3 21.cxb3 cxb3 22.Bd3 a4
23.Re1 Rxe1+ 24.Kxe1 Qxc1+ 25.Ke2 Bb7 26.Qd8+ Ne8 27.Qe7 Bc6 28.Bc4 Nf6 29.Bxf7+
Kh8 30.Nd3 b2 31.Rd8+ Rxd8 32.Qxd8+ Be8 33.Bxe8 Qc2+ 34.Ke3 Nd5+ 35.Kd4 Qc3+
36.Ke4 Qc7 37.Qxc7 Nxc7 38.Nxb2 a3 39.Bf7 axb2 40.Ba2 Nb5 41.Kd3 Na3 42.g5 b1=B+
43.Bxb1 Nxb1 44.h4 Kg8 45.h5 Kf8 46.f4 Ke7 47.Kd4 Nd2 48.Ke3 Nc4+ 49.Kd4 Nd6
50.Ke5 Nf7+ 51.Kd5 h6 52.f6+ gxf6 53.g6 Nd8 54.f5 Nb7 55.Kc6 Na5+ 0-1
</pre>

=Copyright=
Many programmers did not grasp Crafty's [https://en.wikipedia.org/wiki/Copyright Copyright] statement, but apparently took remarks by [[Robert Hyatt]] like in his reply to [[Ren Wu]], January 26, 1999, concerning [https://en.wikipedia.org/wiki/Code_reuse code reuse] and not [https://en.wikipedia.org/wiki/Reinventing_the_wheel reinventing the wheel] as alibi for their chess programming <ref>[https://www.stmintz.com/ccc/index.php?id=40922 Re: Bionic v Crafty - a possible solution] by [[Robert Hyatt]], [[CCC]], January 26, 1999</ref> :
This is a basic tenet of software engineering called 'code reuse'. Why should I pay you to write something from scratch and take a year, if you can take something that exists and modify it to do the same thing in a month? And then I don't have as much trouble debugging and testing, since it is mostly already done...

that's not a bad side to this... Of course occasionally starting over is a good thing. But not starting from 'scratch'. IE if you don't know what has already been tried, you will re-invent the same bad wheels over and over and probably follow the same footsteps many before you did... software engineering wants to avoid that 'reinvention' problem...

[[Robert Hyatt]] further on the copyright problem <ref>[http://groups.google.com/group/rec.games.chess.computer/msg/db825bdc948464b6 Re: crafty copyright problem] by [[Robert Hyatt]], [[Computer Chess Forums|rgcc]], February 17, 1999</ref> :
My primary requirement is that if something is done to crafty to make it 'better', then that 'something' must be as public as the original code was. Because many have contributed bits and pieces... Eugene, George, Steffen, Mark, SJE, and many others that are to numerous to mention. Seems unfair that they modify what I did, then they make their stuff public, and then someone else takes _all_ of this and purports it to be 'original'.

I suppose it has to do with 'national morals' or whatever, ie the software piracy problem in China, to name but one.
<span id="CraftyClones"></span>
=Crafty Clones=
* [[Bionic Impakt]]
* [[Brause]]
* [[Chinito]]
* [[Fafis]]
* [[Gunda-1]]
* [[Kaissa (BY)]]
* [[LaGrande]]
* [[LaPetite]]
* [[Patriot]]
* [[Voyager]]

=See also=
* [[Cray Blitz]]
* [[Nalimov Tablebases]]
* [[Open Source Engines]]

=Publications=
==1997 ...==
* [[Robert Hyatt]], [[Monroe Newborn]] ('''1997'''). ''CRAFTY Goes Deep''. [[ICGA Journal#20_2|ICCA Journal, Vol. 20, No. 2]]
==2000 ...==
* [[Ernst A. Heinz]] ('''2001'''). ''Modeling the “Go Deep” Behaviour of CRAFTY and DARK THOUGHT.'' [[Advances in Computer Games 9]] » [[Depth]], [[DarkThought]]
* [[Levente Kocsis]], [[Jos Uiterwijk]], [[Eric Postma]], [[Jaap van den Herik]] ('''2002'''). ''[http://link.springer.com/chapter/10.1007/978-3-540-40031-8_11 The Neural MoveMap Heuristic in Chess]''. [[CG 2002]], [http://www.pradu.us/old/Nov27_2008/Buzz/research/parallel/movemap_heuristic.pdf pdf] » [[Neural MoveMap Heuristic]]
* [[Albert Xin Jiang]] ('''2003'''). ''Implementation of Multi-ProbCut in Chess''. CPSC 449 Thesis, [http://www.cs.ubc.ca/%7Ejiang/papers/thesis.pdf pdf]
* [[Jan Renze Steenhuisen]] ('''2005'''). ''New Results in Deep-Search Behaviour''. [[ICGA Journal#28_4|ICGA Journal, Vol. 28, No. 4]], [http://www.st.ewi.tudelft.nl/%7Erenze/doc/ICGA_2005_4_DeepSearch.pdf pdf]
* [[Matej Guid]], [[Ivan Bratko]] ('''2007'''). ''Factors affecting diminishing returns for searching deeper''. [[CGW 2007]] » [[Crafty]], [[Rybka]], [[Shredder]], [[Depth#DiminishingReturns|Diminishing Returns]]
* [[Matej Guid]], [[Ivan Bratko]] ('''2007'''). ''Factors affecting diminishing returns for searching deeper''. [[ICGA Journal#30_2|ICGA Journal, Vol. 30, No. 2]], [http://www.ailab.si/matej/doc/Factors_Affecting_Diminishing_Returns.pdf pdf]
* [[Matej Guid]], [[Aritz Pérez]], [[Ivan Bratko]] ('''2007'''). ''How trustworthy is Crafty's analysis of world chess champions''? [[CGW 2007]]
* [[Matej Guid]], [[Aritz Pérez]], [[Ivan Bratko]] ('''2008'''). ''How trustworthy is Crafty's analysis of world chess champions''? [[ICGA Journal#31_3|ICGA Journal, Vol. 31, No. 3]], [http://www.ailab.si/matej/doc/How_Trustworthy_is_Craftys_Analysis.pdf pdf]
==2010 ...==
* [[Eric Stock]], [[David J. King]] ('''2010'''). ''[https://rke.abertay.ac.uk/en/publications/a-new-enhancement-to-mtdf A new enhancement to MTD(f)]''. Games and Arts, [https://en.wikipedia.org/wiki/Abertay_University Abertay University], [https://www.researchgate.net/publication/304307495_A_New_Enhancement_to_MTDf ResearchGate] » [[MTD(f)]]
* [[Robert Hyatt]] ('''2014'''). ''A Solution to Short PVs Caused by Exact Hash Matches''. [[ICGA Journal#37_3|ICGA Journal, Vol. 37, No. 3]] » [[Transposition Table]], [[Principal Variation#SeparateTT|Separate TT for the PV]]
* [[Monroe Newborn]], [[Robert Hyatt]] ('''2014'''). ''Computer Chess Endgame Play with Pawns: Then and Now''. [[ICGA Journal#37_4|ICGA Journal, Vol. 37, No. 4]] » [[Peasant]], [[Pawn Endgame]]
* [[Guy Haworth]] ('''2015'''). ''Chess Endgame News''. [[ICGA Journal#38_1|ICGA Journal, Vol. 38, No. 1]] » [[FinalGen]]

=Forum Posts=
==1995 ...==
* [http://groups.google.com/group/rec.games.chess.computer/msg/a1c2d43fab3601ab Re: Crafty version 8.7] by [[Robert Hyatt]], [[Computer Chess Forums|rgcc]], October 05, 1995
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/f2c922d3c296bbbe Crafty V9.22] by [[Robert Hyatt]], [[Computer Chess Forums|rgcc]], April 05, 1996
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/1c03a81c896c048b Crafty V9.26] by [[Robert Hyatt]], [[Computer Chess Forums|rgcc]], May 08, 1996
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/784986ccb84e473b Crafty's opening book - technical details] by [[Robert Hyatt]], [[Computer Chess Forums|rgcc]], October 04, 1996
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/f2ff4847ad3bb180 Crafty 11.15] by [[Robert Hyatt]], [[Computer Chess Forums|rgcc]], January 30, 1997
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/6e999936bc7e5200 Repetitions in Crafty] by [[Martin Borriss]], [[Computer Chess Forums|rgcc]], January 30, 1997 » [[Repetitions]]
* [https://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/ca0300b50438a388 quiescence search] by [[Andrew Tridgell]], [[Computer Chess Forums|rgcc]], April 16, 1997 » [[Quiescence Search]], [[Check]]
* [https://www.stmintz.com/ccc/index.php?id=12532 Crafty and fastest Cray: question to Bob] by [[Jouni Uski]], [[CCC]], December 01, 1997
* [https://www.stmintz.com/ccc/index.php?id=15912 Parallel Crafty] by [[Robert Hyatt]], [[CCC]], March 19, 1998
* [https://groups.google.com/d/msg/rec.games.chess.computer/C6z6Nnh2Nbs/G3LOexi_PMUJ Current Crafty strength on SMP?] by Charlton Harrison, [[Computer Chess Forums|rgcc]], April 29, 1998
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/cc8520f40dc69198 crafty copyright problem] by [[Robert Hyatt]], [[Computer Chess Forums|rgcc]], February 17, 1999 » [[Voyager]]
* [https://www.stmintz.com/ccc/index.php?id=43533 Crafty Modifications MUST be made available to Robert Hyatt] by [[KarinsDad]], [[CCC]], February 17, 1999
* [http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/ed89415506592e02 Crafty implications ...] by [[Chris Whittington]], [[Computer Chess Forums|rgcc]], March 4, 1999
* [https://www.stmintz.com/ccc/index.php?id=75923 Do have the Crafty the Assembler written core?] by [[Leonid Liberman|Leonid]], [[CCC]], November 01, 1999
==2000 ...==
* [https://www.stmintz.com/ccc/index.php?id=92088 Crafty internal iterative deepening] by [[Tijs van Dam]], [[CCC]], January 26, 2000 » [[Internal Iterative Deepening]]
* [https://www.stmintz.com/ccc/index.php?id=136233 Crafty 17.13 - re-importing FEN files?] by [[Wieland Belka]], [[CCC]], November 02, 2000
* [https://www.stmintz.com/ccc/index.php?id=136234 Crafty 17.13 - using game archives by engines?] by [[Wieland Belka]], [[CCC]], November 02, 2000
* [https://www.stmintz.com/ccc/index.php?id=246598 razoring in crafty version 16.9, mid 1999] by [[Vincent Diepeveen]], August 21, 2002
* [https://www.stmintz.com/ccc/index.php?id=310051 Crafty SMP questions] by Matthew Hull, [[CCC]], August 05, 2003 » [[SMP]]
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=18&t=45863 Crafty 19.08 SE 2004 released ...] by [[Michael Byrne]], [[Computer Chess Forums|Winboard Forum]], January 01, 2004 » [[Wb2UCI]]
* [https://www.stmintz.com/ccc/index.php?id=347219 Re: Crafty 1910 SE vs Ruffian2 I hate this , but] by [[Peter Skinner]], [[CCC]], February 04, 2004 » [[Ruffian]]
* [https://www.stmintz.com/ccc/index.php?id=353751 is this a sign of broken smp] by [[Michael Byrne]], [[CCC]], March 09, 2004 » [[SMP]]
* [https://www.stmintz.com/ccc/index.php?id=376529 Question about Crafty and Bishop Pair] by [[Jan Renze Steenhuisen|Renze Steenhuisen]], [[CCC]], July 13, 2004 » [[Bishop Pair]]
==2005 ...==
* [https://www.stmintz.com/ccc/index.php?id=412534 Re: need help in compiling Crafty] by [[Joshua Haglund]], [[CCC]], February 19, 2005
* [https://www.stmintz.com/ccc/index.php?id=424820 Crafty and assembly code] by [[Alain Zanchetta]], [[CCC]], May 08, 2005
* [http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=140141&t=16002 Re: BitBoard Tests Magic v Non-Rotated 32 Bits v 64 Bits] by [[Robert Hyatt]], [[CCC]], August 25, 2007 » [[Magic Bitboards]]
* [http://www.talkchess.com/forum/viewtopic.php?t=19706 crafty-22.0] by [[Robert Hyatt]], [[CCC]], February 18, 2008
* [http://www.talkchess.com/forum/viewtopic.php?t=21194 Crafty questions] by [[Pablo Vazquez]], [[CCC]], May 16, 2008
* [http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=220004&t=23894 Re: Lemming Poll] by [[Robert Hyatt]], [[CCC]], September 22, 2008 » [[Tapered Eval]], [[LearningLemming]]
* [http://www.talkchess.com/forum/viewtopic.php?t=25224 Crafty - no analysis output near mate?] by [[Matthew Lai|cyberfish]], December 03, 2008
==2010 ...==
* [http://www.talkchess.com/forum/viewtopic.php?t=36040 old crafty vs new crafty on new hardware] by [[Robert Hyatt]], [[CCC]], September 11, 2010
* [http://www.talkchess.com/forum/viewtopic.php?t=36050 Crafty tests show that Software has advanced more] by [[Don Dailey]], [[CCC]], September 12, 2010
* [http://www.talkchess.com/forum/viewtopic.php?t=36059 Final results - Crafty - hardware vs software] by [[Robert Hyatt]], [[CCC]], September 13, 2010
* [http://www.talkchess.com/forum/viewtopic.php?t=36088 hardware doubling number for Crafty] by [[Robert Hyatt]], [[CCC]], September 15, 2010
'''2011'''
* [http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=407977&t=39149 On Crafty...] by [[Robert Hyatt]], [[CCC]], May 22, 2011
* [http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=410448&t=39381 Re: Robert - How did you came up with the name Crafty] by [[Robert Hyatt]], [[CCC]], June 16, 2011
* [http://www.open-chess.org/viewtopic.php?f=3&t=1477&start=10#p13013 Re: Still waiting on Ed] by [[Mark Watkins|BB+]], [[Computer Chess Forums|OpenChess Forum]], July 07, 2011 » on 22.1 vs. 23.4. differences
* [http://www.open-chess.org/viewtopic.php?f=3&t=1477&start=20#p13017 Re: Still waiting on Ed] by [[Robert Hyatt]], [[Computer Chess Forums|OpenChess Forum]], July 07, 2011 » on 22.1 vs. 23.4. differences
* [http://www.talkchess.com/forum/viewtopic.php?t=40853 ICGA rule #2 / opening books / Diep-Crafty, Turino 2006] by [[Peter Berger]], [[CCC]], October 22, 2011 » [[Opening Book]], [[WCCC 2006]]
'''2012'''
* [http://www.talkchess.com/forum/viewtopic.php?t=45338 Crafty source] by [[Robert Hyatt]], [[CCC]], September 26, 2012
'''2013'''
* [http://www.talkchess.com/forum/viewtopic.php?t=48351 Crafty 23.6 released] by [[Peter Skinner]], [[CCC]], June 20, 2013
* [http://www.talkchess.com/forum/viewtopic.php?t=49450 interesting SMP bug] by [[Robert Hyatt]], [[CCC]], September 24, 2013 » [[Parallel Search]]
* [http://www.talkchess.com/forum/viewtopic.php?t=50030 Crafty 23.8] by [[Robert Hyatt]], [[CCC]], November 11, 2013
'''2014'''
* [http://www.talkchess.com/forum/viewtopic.php?t=52432 Crafty 24.0] by [[Robert Hyatt]], [[CCC]], May 26, 2014
* [http://www.talkchess.com/forum/viewtopic.php?t=53907 Crafty 24.1] by [[Daniel José Queraltó]], [[CCC]], October 01, 2014
* [http://www.talkchess.com/forum/viewtopic.php?t=54059 Threads test incl. Crafty 24.1] by [[Andreas Strangmüller]], [[CCC]], October 15, 2014 » [[Thread]], [[Parallel Search]]
==2015 ...==
* [http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=30107 Grafty vs Crafty] by [[Marcel van Kervinck]], [[Computer Chess Forums|Rybka Forum]], April 21, 2015 » [[Stockfish]]
* [http://www.talkchess.com/forum/viewtopic.php?t=56595 parallel speedup and assorted trivia] by [[Robert Hyatt]], [[CCC]], June 05, 2015 » [[Parallel Search]]
* [http://www.talkchess.com/forum/viewtopic.php?t=56935 Crafty UCI version] by [[Marek Soszynski]], July 10, 2015 » [[UCI]]
* [http://www.talkchess.com/forum/viewtopic.php?t=58160 An interesting parallel search non-bug] by [[Robert Hyatt]], [[CCC]], November 05, 2015 » [[Parallel Search]]
* [http://www.talkchess.com/forum/viewtopic.php?t=58688 Crafty 25.0 Release] by Michael B, [[CCC]], December 25, 2015
* [http://www.talkchess.com/forum/viewtopic.php?t=58711 Crafty 25.0 announcement] by [[Robert Hyatt]], [[CCC]], December 28, 2015
'''2016'''
* [http://www.talkchess.com/forum/viewtopic.php?t=58758 crafty eval cache] by [[Alvaro Cardoso]], [[CCC]], January 01, 2016 » [[Evaluation Hash Table]]
* [http://www.talkchess.com/forum/viewtopic.php?t=58830 NUMA 101] by [[Robert Hyatt]], [[CCC]], January 07, 2016 » [[NUMA]]
* [http://www.talkchess.com/forum/viewtopic.php?t=58931 Crafty 25.0.1] by [[Robert Hyatt]], [[CCC]], January 15, 2016
* [http://www.talkchess.com/forum/viewtopic.php?t=58944 Crafty's four hash tables] by [[Louis Zulli]], [[CCC]], January 17, 2016 » [[Hash Table]]
* [http://www.talkchess.com/forum/viewtopic.php?t=59464 Crafty c questions] by [[J. Wesley Cleveland]], [[CCC]], March 10, 2016 » [[C]]
* [http://www.talkchess.com/forum/viewtopic.php?t=59577 Crafty chess engine] by Krzysztof Grzelak, [[CCC]], March 20, 2016
* [http://talkchess.com/forum/viewtopic.php?t=59745 Crafty SMP measurement] by [[Robert Hyatt]], [[CCC]], April 04, 2016 » [[Parallel Search]]
* [http://www.talkchess.com/forum/viewtopic.php?t=61289 Around Crafty dev. ...] by [[Frank Quisinsky]], [[CCC]], August 31, 2016
: [http://www.talkchess.com/forum/viewtopic.php?t=61289&start=2 Re: Around Crafty dev. ...] by [[Robert Hyatt]], [[CCC]], September 01, 2016
* [http://www.talkchess.com/forum/viewtopic.php?t=61594 Crafty 25.1 Release] by [[Michael Byrne|Michael B]], [[CCC]], October 04, 2016
* [http://www.talkchess.com/forum/viewtopic.php?t=61874 Crafty v25.2 Release] by [[Michael Byrne|Michael B]], [[CCC]], October 29, 2016
'''2017'''
* [http://www.talkchess.com/forum/viewtopic.php?t=62907 Crafty Play By Elo ( Crafty v25.3)] by [[Michael Byrne|Michael B]], [[CCC]], January 23, 2017 » [[Playing Strength]]

=External Links=
==Chess Engine==
* [https://github.com/MichaelB7/Crafty GitHub - MichaelB7/Crafty]
* [http://www.craftychess.com/ Crafty Chess] managed by [[Tracy Riegle]]
* [http://www.craftychess.com/downloads/source/ Index of /downloads/source]
* [https://en.wikipedia.org/wiki/Crafty Crafty from Wikipedia]
* [http://www.craftychess.com/documentation/craftydoc.html Crafty Documentation]
* [https://www.game-ai-forum.org/icga-tournaments/program.php?id=34 Crafty's ICGA Tournaments]
* [http://www.chessgames.com/perl/chessplayer?pid=5405 The chess games of Crafty (Computer)] from [http://www.chessgames.com/index.html chessgames.com]
* [http://wbec-ridderkerk.nl/html/details1/Crafty.html Crafty] from [[WBEC|WBEC Ridderkerk]]
* [http://wondersmith.com/rants/howfar.htm How Far We've Come: 20 Years of Personal Computing] by [http://wondersmith.com/scifi/author.htm Blake Linton Wilfong], November 05, 2000 » [[ACM 1981]], [[Sargon]], [[Cray Blitz]]
* [http://www.spec.org/cpu2000/CINT2000/186.crafty/docs/186.crafty.html 186.crafty: SPEC CPU2000 Benchmark Description]
* [http://www.computerchess.org.uk/ccrl/4040/cgi/compare_engines.cgi?family=Crafty&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 Crafty Versions] at [[CCRL|CCRL 40/40]]
==Misc==
* [http://en.wiktionary.org/wiki/crafty crafty - Wiktionary]
* [https://en.wikipedia.org/wiki/Craft Craft from Wikipedia]
* [https://en.wikipedia.org/wiki/American_craft American craft from Wikipedia]
* [https://en.wikipedia.org/wiki/Arts_and_Crafts_movement Arts and Crafts movement from Wikipedia]
* [https://en.wikipedia.org/wiki/American_Craftsman American Craftsman from Wikipedia]
* [https://en.wikipedia.org/wiki/Guitar_Craft Guitar Craft from Wikipedia]
* [[Videos#RobertFripp|Robert Fripp]] and the League of Crafty Guitarists, [https://en.wikipedia.org/wiki/YouTube YouTube] Video
: {{#evu:https://www.youtube.com/watch?v=D57fYwyhajk|alignment=left|valignment=top}}

=References=
<references />

'''[[Engines|Up one level]]'''

Navigation menu