The honest test is head-to-head play. Against a player that just makes random legal
moves it wins essentially every game — usually by a gammon or backgammon. Against
HCE, a competent hand-written evaluator that races and counts pips, the
network wins about 94%. Against the previous champion — the best net the
self-play era produced, and the same size and speed — it wins 53.4% over
40,000 games.
Searching deeper has quietly stopped mattering. Looking one move ahead used to beat the
same network playing instantly 62% of the time; for today's net it is
barely 52%, and against GNU Backgammon it makes no measurable
difference at all — the engine scores the same whether it searches nought, one or two
plies deep, even though the extra search changes about a third of its moves. That is what
a good evaluator does to search: it leaves it nothing to fix.
Two honest caveats about that table. First, the top six are separated by
less than the measurement error: 2-ply beat 1-ply by 50.5% over 400 games, which is a
coin-flip. Treat them as one band of similar strength, not a strict order.
Second, the Rollout figure deserves an asterisk. A rollout gets a fixed
time budget per move, so the number of cores it can use directly determines how many
games it plays out, and therefore how accurate its answer is. The row above measures it
with 8 cores — roughly a typical laptop — where it comes out slightly
below plain 1-ply search.
It was reasonable to assume a big machine would change that, and for a while the app
switched to rollouts on any machine with 32 cores or more. It was never tested, and when
it finally was, it was wrong: given all 128 logical cores of a
Threadripper — and the box to itself, since a rollout starved of cores measures its own
handicap — the rollout scored 51.0% against 2-ply over 341 games. Level,
not ahead, at roughly fifty times the thinking time per move. So 2-ply is now the default
everywhere, and the honest summary of this whole table is that every neural setting
plays about as well as every other; what actually differs is how long you wait.
Those two GNU Backgammon rows used to be one row, and it said the wrong thing.
For months the project reported roughly 46% against GNU Backgammon and treated the
remaining four points as the gap still to close. The harness had a bug: it built the
network with its search depth hard-wired to zero, so every "equal depth" run was really
our static evaluation against a searching opponent. The giveaway was there all
along — 0-ply, 1-ply and 2-ply returned 46.1%, 46.3% and 46.3%, three numbers agreeing
far too closely across 9,000 games, and that agreement was published as a finding
instead of investigated as a bug. Measured properly, the engine is level with
GNU Backgammon at equal depth: 49.1% over 3,000 money games and 48.5% of 400
seven-point matches played with the cube. Neither is far enough from 50% to claim more
than parity — but parity with GNU Backgammon is where a network distilled from it was
always going to top out, and it has arrived there.
The network has been rebuilt and retrained many times to get here.
The first breakthrough was depth — a second hidden layer broke a ceiling a single
wider layer couldn't. Later steps changed shape rather than size: a
Stockfish-NNUE-style net with one shared body and multiple output heads,
the head chosen by position class — race, crashed, or contact, borrowing
GNU Backgammon's classification — so one network specialises for each phase without
splitting its training data. But each step gained less than the last, and richer input
features, tried twice, failed outright.
Then it stopped altogether, and the reason turned out to be more
interesting than the architecture. Every way of generating training labels ran through the
engine itself: self-play results, its own Monte-Carlo rollouts, its own search values. And
a network distilled from its own engine cannot exceed it. Every label was, in the
end, its own opinion — so a dozen careful experiments all landed in the same place.
The way out was to learn from somebody else. GNU Backgammon — world-class,
decades mature — will judge a position in a fraction of a millisecond, and it turns out you
can ask it 2,600 times a second. The current network (shipped in v1.10.0) is trained on
22.5 million positions labelled by gnubg, from scratch, in under an hour.
It beats the best self-play net 53.4% over 40,000 games at the same size
and the same speed, and closes about 38% of the remaining gap to gnubg
itself. There is a hard ceiling to this: a student cannot pass its teacher, and at
46% against gnubg's 2-ply play we are some way short of that ceiling but
can no longer reach it by asking gnubg more questions.