Skip to content

Facón 1.8 - Cabo

Latest

Choose a tag to compare

@CMCanavessi CMCanavessi released this 03 Nov 17:11

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: go followed at once by stop no longer hangs; position validates its FEN and moves and leaves the board untouched when they are invalid, saying why; go movetime, go nodes and go infinite do what they say; clocks of any size, and at zero or below, are handled. None of these triggered in rating conditions.
  • Hash gets 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 trace decomposition and the eval breakdown, 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 Threads option 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, SyzygyProbeDepth and SyzygyProbeLimit: 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