Repository navigation
Approximately +300 Elo over 1.7 (Ordo ~3230, Gauntlet 5 n=1040). Direct self-play vs 1.7: +346.7 Elo (n=10000, +/- 7.3) at 10+0.1.
Where 1.7 split its gain between search and evaluation, 1.8 is the search release: the evaluation is 1.7's, unchanged. It fixes every bug a full audit of 1.7 found, makes the engine about 70% faster before touching the search, then rebuilds the search -- principal variation search, a transposition table on cache-line buckets that quiescence uses too, correction history, and reworked null-move pruning, late move reductions and futility pruning -- and adds parallel search (Lazy SMP) and Syzygy endgame tablebases.
Development followed 1.7's discipline: every change was added alone, measured in self-play against the previous accepted build, and kept only if it measured well. Three long checkpoint matches against 1.7 kept the accumulated total honest along the way: +135.3 (n=10000), +189.0 (n=3220) and +219.6 (n=8120).
Reliability
- Every bug from the audit of 1.7 fixed:
gofollowed at once bystopno longer hangs;positionvalidates its FEN and moves and leaves the board untouched when they are invalid, saying why;go movetime,go nodesandgo infinitedo what they say; clocks of any size, and at zero or below, are handled. None of these triggered in rating conditions. Hashgets exactly the size requested, up to 64 TiB, without the cap to available RAM that made a re-sent value oscillate.
Speed
- One evaluation walk computes the evaluation, the
tracedecomposition and theevalbreakdown, with every piece's attacks computed once (+17% NPS, about +41 Elo); material and piece-square sums are kept up to date as moves are made (+5% NPS); moves are generated in stages, only as the search reaches them (+42% NPS, about +76 Elo). About 70% more nodes per second than 1.7 before any change to the search.
Search
- Exact en passant and evasions: the en passant square is set only when a legal capture exists, so positions hash one way and repetitions are detected (about +10 Elo); quiescence searches every evasion when in check (about +12 Elo).
- Transposition table: four entries per 64-byte cache line, validated without locks, any size, huge pages on Linux (about +11 Elo); quiescence reads and writes it, with fail-soft scores (about +32 Elo).
- Principal variation search, with reverse futility, null-move pruning, razoring, ProbCut and late move pruning kept off the principal variation and reductions at expected cut nodes. About +32 Elo -- both forms tried in 1.7 had measured negative.
- Pruning and reductions reworked: null-move pruning gated on the evaluation, with an adaptive reduction (about +15 Elo); late move reductions from a logarithmic table with node, history and improvement adjustments (about +18 Elo); futility pruning to depth 10 (about +14 Elo); late move reductions in check, the aspiration window after a score of 0, and an interrupted iteration's better move played (about +20 Elo).
- Correction history: seven tables learn where the static evaluation misses -- by pawn structure, minor pieces, major pieces, each side's other pieces, and the last two moves -- and correct it in the main search and in quiescence. About +85 Elo, the largest single gain of the release.
- History across searches: the butterfly history is halved at each new search instead of cleared, with a larger step for a cutoff. About +26 Elo.
Parallel search
- Lazy SMP, with a new
Threadsoption up to 1024: helper threads share the transposition table and the correction history, and the move played is chosen by a vote of the threads. Four threads search almost four times as many nodes per second as one. The rating figures above are single-threaded.
Endgame tablebases
- Syzygy tablebases, read through Pyrrhic (Andrew Grant, MIT license), with the options
SyzygyPath,SyzygyProbeDepthandSyzygyProbeLimit: win/draw/loss probes in the search (about +16 Elo), and the root's moves ranked by distance to zeroing, so that wins close to the 50-move limit are converted -- 80 of 80 in a test where the probes alone converted none.
Features attempted and not shipped
- SEE pruning in the main search: neutral over 8,160 games, and 8% slower.
- A correction to the singular-extension verification: -3.3 Elo over 9,308 games.
- Check extension near the horizon only: neutral; the extension stays at every depth.
- Screened and dropped: capture history, history pruning, two-ply continuation history, multicut, mate distance pruning, quiet checks in quiescence, double and negative extensions.
Checksums (SHA1)
63d27d1f856509f663c1b6f75479f86e1568bd3a facon-1.8
3d5f6d994ea2da6b87c97160b4f3be924066ed71 facon-1.8.exe