LimUnltd . . . Top Up . . . First Prev Next Last . . . Help

Crafty 5.x Version History

5.15
passed pawns supported by a king, or connected passed pawns now get a large bonus as they advance. minor fix to the ICC resume feature to try to avoid losing games on time.

5.14
artificially isolated pawns recognized now, so that Crafty won't push a pawn so far it can't be defended. also, the bonus for a outside passed pawn was nearly doubled.

5.13
optimization to avoid doing a call to MakeMove() if it can be avoided by noting that the move is not good enough to bring the score up to an acceptable level.

5.12
improved null-move code by computing the Knuth/Moore node type and then only trying null-moves at type 2 nodes. this has resulted in a 2x speedup in test positions.

5.11
two king-safety changes. (1) the program's king safety score is now "doubled" to make it much less likely that it will try to win a pawn but destroy it's king-side. (2) the attack threshold has been lowered which is used to key the program that it is now necessary to move pieces to defend the king-side, in an effort to protect a king-side that is deemed somewhat unsafe.

5.10
added code to handle king and pawn vs king, which understands the cases where the pawn can't outrun the king, but has to be assisted along by the king.

5.9
removed "futility" forward pruning. exhaustive testing has proved that this causes significant tactical oversights.

5.8
EvaluateOutsidePassedPawns() fixed to correctly evaluate those positions where both sides have outside passed pawns. before this fix, it only evaluated positions where one side had a passed pawn, which overlooked those won/lost positions where both sides have passed pawns but one is "distant" or "outside" the other.

5.7
king safety now "hates" a pawn at b3/g3 (white) or b6/g6 (black) to try and avoid the resulting mate threats.

5.6
improved move ordering by using the old "killer move" idea. an additional advantage is that the killers can be tried before generating any moves (after the captures.) quiescence now only includes "safe" checks (using Swap() to determine if it is a safe checking move.

5.5
checks are now back in the quiescence search. Crafty now stores a negative "draft" in the transposition table rather than forcing any depth < 0 to be zero. the null-move search now searches the null-move to depth-1 (R=1) rather than depth-2 (R=2) which seemed to cause some tactical oversights in the search.

5.4
new Swap() function that now understands indirect attacks through the primary attacking piece(s). this corrects a lot of sloppy move ordering as well as make the "futility" cutoffs added in in version 5.3 much more reliable.

5.3
performance improvement produced by avoiding calls to MakeMove() when the attack information is not needed. since the first test done in Quiesce() is to see if the material score is so bad that a normal evaluation and/or further search is futile, this test has been moved to inside the loop *before* Quiesce() is recursively called, avoiding the MakeMove() work only to discover that the resulting position won't be searched further.

5.2
evaluation terms scaled down to prevent positional scores from reaching the point that sacrificing material to avoid simple positional difficulties begins to look attractive.

5.1
pondering logic now has a "puzzling" feature that is used when the search has no move to ponder. it does a short search to find a move and then ponders that move, permanently eliminating the "idle" time when it has nothing to ponder.

5.0
selective search extensions removed. with the extensions now in the basic full-width search, these became more a waste of time than anything useful, and removing them simplifies things quite a bit.

LimUnltd . . . Top Up . . . First Prev Next Last . . . Help

Lim Unlimited / 24 Jul 1996