Skip to content

Let the time horizon fall from a twentieth to a tenth by move 60 - #397

Merged
aywrite merged 1 commit into
masterfrom
claude/candidate-6-root-effort-2q00jf
Oct 11, 2026
Merged

aywrite merged 1 commit into
masterfrom
claude/candidate-6-root-effort-2q00jf

Conversation

@aywrite

@aywrite aywrite commented Oct 11, 2026

Copy link
Copy Markdown
Owner

With no movestogo the share was the clock over 20 at every move, and at 10+0.1 master ended its games with about 3.5 s of the 10 s clock unspent. Now the horizon is 20 at the first move searched on a clock since ucinewgame and falls in a straight line to 10 at move 60. The interface keeps that first move number; an earlier one (a new game without ucinewgame, or a takeback) starts the count again. Everything else in the share is as before.

Results against master 8ade39b:

  • 10+0.1: sprt [0, 10] passed, +18 ±10 over 2,000 games (LLR 5.28). A stopped estimate, so it leans high.
  • 30+0.3: a fixed 1,000 games, +18 ±13 (95% +5 to +32).
  • No time losses in either. The candidate had 1.094 of master's time at 10+0.1 and ended games 1,269 ms lower, against 1,272 predicted by re-running master's clocks. At 30+0.3 it had 1.076 of the time and ended 3,166 ms lower.

The bench is fixed depth and unchanged at 11,088,536. One line in docs/ROADMAP.md named the removed constant and now describes the falling horizon.

🤖 Generated with Claude Code

https://claude.ai/code/session_011saZHGHgVvBWxJ7nougTPN


Generated by Claude Code

…ove 60

With no movestogo the share was the clock over 20 at every move. At
10+0.1 that ended master's games with about 3.5 s of the 10 s clock
unspent. Now the horizon is 20 at the first move searched on a clock
since ucinewgame and falls in a straight line to 10 at move 60, where it
stays. The interface remembers that first move number, and a position
with an earlier one (a new game sent without ucinewgame, or a takeback)
starts the count again. The increment, the cap at a third of the clock,
the overhead, a sent movestogo, a move time and a node budget are all
read as before.

Re-running the clocks of master's side of 500 games at 10+0.1, each
move's spend over its share held fixed, predicted 1.096 of master's time,
games ending 1.27 s lower, and +16 at most from the time odds of about
124 elo a doubling taken move by move.

Played at 10+0.1 against master 8ade39b, it passed sprt [0, 10] at LLR
5.28: +18 ±10 over 2,000 games in four batches, which read +22, +5, +14
and +33. The estimate is a stopped sequential one, so it leans high. A
fixed 1,000 games at 30+0.3 read +18 ±13 (95% +5 to +32). No time losses
in either. At 10+0.1 the candidate had 1.094 of master's time and ended
1,269 ms lower (95% -1,290 to -1,249), with at least 0.80 s left on any
move against master's 1.73 s; at 30+0.3 it had 1.076 of the time and
ended 3,166 ms lower.

The bench is fixed depth and reads no clock, so it is unchanged.

Bench: 11088536
Elo: +18 ±10 (sprt [0, 10] passed, 2000 games, 10+0.1, vs 8ade39b)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011saZHGHgVvBWxJ7nougTPN
@github-actions

Copy link
Copy Markdown
Contributor

Speed against 8ade39b1

Measured on AMD EPYC 7763 64-Core Processor.
Both sides built with rustc 1.99.0 (b940084d7 2026-09-28).

Both sides built and run on this runner in this job, the way
scripts/speed.sh measures a perf commit. Each round runs
both sides on a layout of its own, the same compiled code with
its code and data shuffled and moved, so the 95% interval carries
where the code landed as well as the run. The verdict holds the
interval against a 1% threshold. The default layout, the one a
release ships, is measured after as a diagnostic. The node
counts are the search's: they move when the search does, and a
speed change leaves them alone.

round     base nps  candidate nps  change
    1      4218861        4292922   +1.8%
    2      4352191        4240930   -2.6%
    3      4344562        4349006   +0.1%
    4      4305689        4288384   -0.4%
    5      4270646        4246753   -0.6%
    6      4322800        4306936   -0.4%
    7      4323779        4254306   -1.6%
    8      4282577        4322163   +0.9%
    9      4319949        4253029   -1.5%
   10      4360434        4272026   -2.0%
   11      4409412        4265838   -3.3%
   12      4279467        4288384   +0.2%
   13      4364422        4295569   -1.6%
   14      4371515        4378611   +0.2%
   15      4359806        4337128   -0.5%
   16      4286178        4272670   -0.3%
   17      4308543        4323879   +0.4%
   18      4349897        4333914   -0.4%
   19      4305615        4190059   -2.7%
   20      4345643        4238140   -2.5%
   21      4200613        4271364   +1.7%
   22      4224242        4309650   +2.0%
   23      4346684        4326283   -0.5%
   24      4220962        4079101   -3.4%
   25      4250888        4167857   -2.0%
   26      4118506        4355583   +5.8%
   27      4241975        4274137   +0.8%
   28      4418482        4323624   -2.1%
   29      4311699        4392557   +1.9%
   30      4232021        4271972   +0.9%
   31      4174777        4340521   +4.0%
   32      4278861        4241227   -0.9%
   33      4330777        4245343   -2.0%
   34      4300751        4302145   +0.0%
   35      4395916        4325469   -1.6%
   36      4371652        4434137   +1.4%
   37      4413047        4412351   -0.0%
   38      4295745        4447504   +3.5%
   39      4498557        4402125   -2.1%
   40      4441499        4419465   -0.5%

              nodes    time  median nps  faster half
base       11088536  2.57 s     4315824      4372051
candidate  11088536  2.58 s     4298857      4357153
change                            -0.4%        -0.3%

paired change -0.4%, 95% interval -1.0% to +0.2%
diagnostic, on the default layout alone -0.5%, 95% interval -1.3% to +0.6%, 13 rounds

no change beyond ±1.0%: the whole interval is inside it

Speed: -0.4% (bench nps, 95% interval -1.0% to +0.2%, 40 interleaved rounds over shuffled layouts vs 8ade39b1)

The instructions each side's bench executed, counted under
cachegrind. The count repeats to within a few hundred
instructions, so a small change here is a real one, but it
prices instructions only: cache misses, mispredicted branches
and where the code lands are the speed's to show.

instructions against 8ade39b1, one cachegrind run a side, bench

             instructions     nodes  per node
base       16,519,610,883  11088536    1489.8
candidate  16,519,608,649  11088536    1489.8
change             -0.00%              -0.00%

within ±0.7%, as far as edits not made for speed have moved the count

@aywrite
aywrite merged commit 54fb9a6 into master Oct 11, 2026
21 checks passed
@aywrite
aywrite deleted the claude/candidate-6-root-effort-2q00jf branch October 11, 2026 19:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants