Skip to content

Tetrarch v3

Choose a tag to compare

@IchNukeDichWeg IchNukeDichWeg released this 31 Jul 17:50

v3 -- lazy evaluation. The throwaway eval's king-danger term ran 32
is_attacked calls per node and measured 54% of all search time. This computes
material first and skips it when material alone already settles the bound by
more than the danger term could possibly move it.

Elo   | +42.88 +- 6.50 (95%)
SPRT  | none -- sprt.py not built yet; fixed-N campaign
Conf  | FIXED TIME movetime 200, Hash=256MB, classic/Teams, 100 workers
Games | N: 10000 (2500 openings x 4 rotations)   score 5614.0 (56.14%)
Dist  | 61, 13, 428, 44, 953, 46, 719, 17, 219
Base  | vs v2
Bench | 93,846,865 perft nodes (unchanged)
Pins  | unchanged -- the tree does not move, only the clock
NPS   | 1,418,577 -> 1,620,220 at depth 7 on an M2 Pro (+14.2%)

Measured on fixed time, and that mattered. It changes speed and not the
tree, so a fixed-nodes campaign would have reported exactly zero and
under-credited the entire gain. Screened +64.66 +- 15.12 over 2000 games; the
confirm came in lower because it ran against the new v2 baseline, and LMR had
already bought some of the depth lazy eval was buying. Confirming against the
current default rather than the one a feature was screened on is the point --
the two gains are not additive.

Evaluation

  • Lazy eval -- bail margin 4 * 8 * king_danger = 384, the most the danger
    term can move the score. Not exact: every cutoff DECISION is identical, but a
    bail returns the material term rather than the true eval and fail-soft
    propagates that value. It measured node-identical over 80 positions all the
    same, which selftest watches rather than assumes.

A correction

This feature was described in-session as "exact, needs no games". That was
wrong, for the reason above. The claim was retracted before the A/B was run,
not after.