…placement
An entry's worth to the replacement policy is now its depth less eight
plies for each search since it was stored. In a full bucket the victim is
the entry worth least rather than the shallowest. A store is refused by
an entry whose worth is above its depth, or by an exact entry of the same
position whose worth equals it where the store is not exact. Before this,
age counted only at the twelve search cliff, so an entry stored for an
earlier move held its slot against a shallower one from this search until
then. Stockfish chooses its victim with the same weight.
A position's own entry from an earlier search now gives way to a
shallower store of the same position once the store reaches its worth,
where the deeper old entry used to turn it away.
Within one search every entry is worth its depth, so the policy is the old
one and the bench is identical. The change shows only across searches.
Eight self-play games put the share of stores it can reach at under 0.2%
at 256 MB and 10+0.1, and at 11% to 22% at 16 MB, where that many stores
are turned away by a deeper entry for another position in a bucket that
also holds an older one.
It was played in two stages. At 10+0.1 with a 16 MB table, where the
policy decides most, it read +19 ±13 over 1,500 games and passed sprt
[0, 10]. At 30+0.3 with the default 256 MB it read +4 ±9 over 2,500 games
and passed sprt [-10, 0], after one extension past a 2,000 game cap the
test reached at an LLR of 2.93 against 2.94. In those games the candidate
counted 0.968 to 0.985 of the baseline's nodes a second. That is the tree
and not the code: replayed on the same positions at fixed nodes the two
run level, and the gap sits in long endgames, where the baseline's old
entries answer nodes almost for nothing and the candidate searches two
plies deeper in the same time.
The age is read in the victim loop: bench games +0.19% instructions,
node counts identical.
Elo: +4 ±9 (sprt [-10, 0] passed, 2500 games, 30+0.3, vs 31eb33b)
Bench: 5965973
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WmzY2g6SZGYszT5dnuQ6tw
The transposition table's replacement policy now values an entry at its depth less eight plies for each search since it was stored. A full bucket gives up the entry worth least rather than the shallowest, and a store is refused only by an entry worth more than its depth. Before this, age counted only at the twelve search cliff, so an entry from an earlier move held its slot against a shallower one from the current search until then.
What a reviewer should know
arche benchcounts 5,965,973 on the base and the branch.bench gamesruns +0.19% instructions with identical node counts.d9379f3. The one conflict was a comment in a block that master had rewritten; the comments now say "replacement contest" where they said "depth contest". Release (780) and debug (782) tests, clippy with and withoutmachine-test, and the tactical and strategic suites pass.The workflow change that let the 16 MB match be dispatched is a separate pull request.
🤖 Generated with Claude Code
https://claude.ai/code/session_01WmzY2g6SZGYszT5dnuQ6tw
Generated by Claude Code