Rusty Rival - UCI (Universal Chess Interface) chess engine written in Rust.
Author:Chris Moreton Rating Chess Engines Diary CEDR=2936
The engine can be about 50% faster if compiled on the machine on which it will be run in order to take advantage of cpu-specific instructions.
Rusty-rival 1.0.52-rc2 what's new?
NET-367 follow-up: drop the null-move changes, add the plies-from-null bound
The v1.0.52-rc1 match came back -19 (+/-25) over 200 games against v1.0.51 -
not significant, but not supportive either, and the wrong direction for a
correctness fix. Investigating rather than shipping on faith.
Two of the three parts were wrong:
- Advancing half_moves on a null move made null subtrees hit the 50-move rule
early, manufacturing draws that do not exist. This SHRANK the bench tree
(10,241,485 vs 10,358,686), masking the real cost of the scan-window fix and
almost certainly causing the Elo loss. Reverted.
- Pushing the null position onto the repetition history let the scan match
across a null move. Positions either side of a null do not form a legal
sequence, so such a match is fictitious. Standard practice is the exact
opposite: bound the scan so it cannot cross a null at all. Reverted, and the
missing bound is now implemented as `history_null_floor`, raised at each
null move and restored after - the plies-from-null rule every mainstream
engine applies, which this engine simply never had.
Kept: the scan-window fix, and the probcut/multicut history pushes (those are
ordinary real-move children, so pushing is correct and consistent; they turn
out not to affect the bench at depth 12 either way).
Measured effect of each part on the bench signature:
v1.0.51 10,358,686
+ scan window fix 12,024,221 (+16.1%)
+ plies-from-null bound 11,954,157 (+15.4%)
So cross-null false positives were NOT the main cost - the bound recovers only
0.6%. The scan-window fix genuinely detects many more repetitions, which is
what it was supposed to do: after a capture or pawn move, quiet shuffling
frequently returns to the position at exactly distance half_moves, and that
candidate was always excluded.
That correctness gain costs ~15% of the tree, which is a real price that the
previous match did not isolate. Needs its own match before shipping.

Comments
Post a Comment