18.14 Minor bug in ResignOrDraw() code caused Crafty to not offer draws
although it would accept them when appropriate. Rook vs Minor
is now evaluated as "neither side can win" an oversight in the
EvaluateWinner() code. minor bug in ResignOrDraw() would fail to
offer draws due to the +0.01/-0.01 draw scores returned by the
EGTB probe code.
18.15 change in endgame draw recognition to handle the case where one
side appears to be in a lost ending but is stalemated. the code
now evaluates such positions as "DrawScore()" instead. the code
to accept/decline draws has been modified. when a draw offer is
received, a global variable "draw_offer_pending" is set to 1.
when the search for a move for crafty terminates, crafty then
uses this value to decide whether to accept or decline the draw.
this means that the accept/decline won't happen until _after_ the
search has a chance to see if something good is happening that
should cause the draw to be declined, closing a timing hole that
used to exist that let a few "suspects" get away with draws that
should not have happened (ie crafty has - scores for a long time,
the opponent suddenly fails low and sees he is losing and offers
a draw quickly. Crafty would accept before doing a search and
noticing that it was suddenly winning.) minor evaluation change
to notice that K+B+right RP vs K+B is not necessarily won if the
weaker side has a bishop of the right color.
* Deep Blue extension limit removed and restored to one ply of extension per
ply of search.
* pruning in q-search fixed so that a capture will be considered if it takes
the total material on the board down to a bishop or less for the opponent,
as that can greatly influence the evaluation with the EvaluateWinner() code.
* as the 50 move rule draws near, the hash table scores are marked as invalid
every 5 moves so that hashing can't hide potential 50-move-rule draws.
* lazy evaluation code modified to be more conservative, since in endgames
the positional score can be a large change.
* EvaluatePassedPawnRaces() fixed so that if one side has two pawns that are
far enough apart, it will recognize that even though the king is "in the
square" of either, it can't always stay in the square of one if it has to
capture the other.
* pawn hash signature restored to 64 bits after testing proved that 32 was
producing an unacceptable number of collisions.
* search node counter is now 64 bits as well to avoid overflows.
* in the outside passed pawn code fixed (bad mask).
version 18.10 include:
- the pawn ram code is now disabled when playing a computer, although the
normal 'blocked pawn' code is always active.
- bug in the code that penalizes a rook with no horizontal mobility was fixed.
if the first rook scored had horizontal mobility, the second rook appeared
to have this mobility as well, which was wrong.
- pawn hash statistics were wrong on longer searches due to an int overflow on
a multiply and divide calculation. this has been re-ordered to avoid the
overflow.
- for unknown reasons, epd support was disabled. it is now enabled as it
should be.
- bug in EvaluateDraws() fixed to not call KBB vs KN a draw if the correct
tablebase is not available.
- bishop pair scores now vary depending on how many pawns are left on the
board. a pair is not worth a lot if there are 7-8 pawns left as most
diagonals will be blocked by pawns.
- a new way of handling the search extensions is in place. with the old
approach, one ply could not extend more than one full ply. with the new
approach, borrowed from Deep Blue, two consecutive plies can not extend more
than two plies total. It averages out to be the same, of course, but the
effect is a bit different. Now it is possible for a check and recapture to
be applied at the same ply, where they could not before (since a check was
already a full one-ply extension). whether this is better or not is not
clear yet, but it is worth careful analysis.
Changes since 18.9:
minor bug in book.c would let crafty play lines that were very
rarely played even though there were others that had been played
far more times and were more reliable. king safety scores ramped
up a bit and made more "responsive".
18.9 Book() modified to increase the responsiveness of book learning.
the new code, plus the default weights for the book parameters
now make Crafty learn very aggressively and repeat good opening
lines and avoid bad ones.
18.8 recapture extension turned back on for a while. changes to the
evaluation code, particularly EvaluatePawns() to make it more
efficient and accurate. IE it was possible for an isolated pawn
to be penalized for being isolated, weak, and blocked, which made
little sense.
18.7 BOOK_CLUSTER_SIZE increased to 2000 to handle making really large
books. a book made without this change could produce clusters
that would cause memory overwrites.
18.6 "new" no longer produces a new log.nnn/game.nnn file if no moves
have actually been played. minor change to rook scoring gives a
penalty when a rook has no horizontal (rank) mobility, to avoid
moves like Ra2 protecting the pawn on b2, etc. glitch in the
code that initializes is_outside[][] and is_outside_c[][] could
cause missed outside pawn cases to happen. this has been there
a long time.
18.5 minor change to RootMove() to use Quiesce() rather than the more
complicated way it was ordering with Evaluate()/EnPrise(). this
is no faster, but it is simpler and eliminated the need for the
EnPrise() function totally, making the code a bit smaller. bug
in EvaluateDraws() would let it think that the bishop+wrong rook
pawn endings were winnable if both kings were very close to the
queening square, even with the wrong bishop.
18.4 recapture extension was left in SearchSMP() erroneously. this
has now been protected by a #ifdef just like it was in Search().
bug in RepetitionCheck() was causing problems in SMP versions.
The entire repetition list code was modified to clean this up.
the problem was most noticable on things like fine #70. bug in
LearnImportBook() confused the learn value sign, due to the other
changes to make +=white all the time. opposite bishop scoring
has been beefed up a bit to avoid these drawish endings.
include:
18.3 minor bug in "avoid_null_move" test used R=2 for the test rather
than testing R=2/3 as the real null-move search uses. the kibitz
for "Hello from Crafty Vx.xx" has been moved so that it works
with the new xboard/winboard 4.2.2 versions. book learning was
badly broken in the previous version and has been fixed/tested.
The main feature is that it fixes the winboard hang problem when crafty plays
black on a chess server. It also has much more aggressive book learning (code
has been significantly changed). A minor bug was fixed in analyze mode that
would break the "h" command when black was on move, and show one less move for
either side that had actually been played in the game. Another fixed bug
reversed the sign of a score whispered in analysis mode.
Pkgsrc changes include fixing the build target on Solaris (untested).
main source tree, so no more pkgsrc patches. Changes from version 17.13:
another endgame evaluation problem fixed. the outside passed
pawn code worked well, up until the point the pawn had to be
given up to decoy the other side's king away from the remainder
of the pawns. Crafty now understands the king being closer to
the pawns than the enemy king, and therefore transitions from
outside passer to won king-pawn ending much cleaner.
new command "selective" as requested by S. Lim, which allows the
user to set the min/max null move R values (default=2/3). they
can be set to 0 which disables null-move totally, or they can be
set larger than the default for testing.
minor changes to init.c sent by Eugene Nalimov to handle 64 bit
pointer declarations for win64 executable compilation.
NetBSD changes included along with a new Makefile that requires
no editing to use for any known configuration ("make help" will
explain how to use it). this was submitted by Johnny Lam.
serious changes to the outside passed pawn code. the evaluator
now understands that outside passers on _both_ sides of the
board is basically winning. same goes for candidate passers.