Skip to content
Alexis Olson edited this page Jul 6, 2026 · 1 revision

lc0 Search Knowledge Base

A provenance-traceable wiki of Leela Chess Zero's search-algorithm discussion: how lc0 turns a neural-net policy and value into a played move, why its PUCT variant behaves the way it does, and the years of community debate behind each design choice. Every quoted claim links to its exact source — a Discord message, a GitHub issue/PR, or a paper — so anything here can be traced back and checked.

It doubles as an onboarding reference for anyone wanting to contribute to lc0's search.

Concepts

Formula & move selection

  • puct-formula — How lc0's PUCT selection rule (argmax over Q plus a policy-multiplied exploration bonus) behaves, where it breaks on big trees, and the knobs hung off it: cpuct and its scaling, the root/tree split, and LCB move selection.
  • fpu — The placeholder eval lc0 gives an as-yet-unvisited move — the parent's Q reduced by a tuned constant, by default — and the decade of definitions, dissent, tuning saga, and redesign attempts that have gathered around that one number.
  • root-selection-gumbel — How lc0 turns a finished search tree into a single move to play: the shipped max-N / temperature / max-P rule, the LCB reorder that actually landed, and the long-running Gumbel / sequential-halving proposals that keep circling the root against a standing objection that their math assumes randomness lc0's deterministic net never supplies.

Value, backup & contempt

  • value-uncertainty — The recurring, never-shipped idea of quantifying how confident lc0 is in an evaluation — what PUCT's exploration term already models, the taxonomy of uncertainties the community names, and the string of head-proposals, variance-scaled PUCT variants, and distributional workarounds that keep running into the same correlation wall.
  • backup-operators — How lc0 propagates a leaf evaluation back up the tree (plain incremental averaging), why that operator is co-adapted with PUCT rather than freely swappable, and the decade of attempts to replace it that keep failing on the same constraint.
  • contempt-wdl — How lc0's Contempt reprices the whole WDL estimate instead of avoiding draws — the drawscore prehistory, the WDL-rescale transform and its calibration knobs, the expected-score-vs-game-pair Elo tradeoff, and contempt's footprint across the rest of search.

Policy & tuning

  • policy-decay — The long-running proposal that a move's policy prior should flatten toward a ceiling as visits accumulate, so that late in a search only Q governs exploration effort, and the eight-year, still-unresolved effort to build it without breaking PUCT.
  • tuning-methodology — How the lc0 community tests and tunes search parameters without fooling itself: the no-early-stopping rule and pre-selection protocol, gating and publication-bias leaks, fixed-node testing and whether a tune transfers across node counts, the equilibrium-vs-tree parameter split, SPSA's cost and iteration, default skepticism toward large gains, and the training-time stopper.

Architecture

  • search-architecture — Why lc0's search has been hard to experiment with for seven years running: PUCT is hardcoded and duplicated across the tree walk, issue #1734 proposes prying the search heuristic apart into swappable classes, and a separate, older thread asks whether the single-parent tree should become a DAG at all.

Reference

  • papers — the theory literature (AlphaZero/MuZero/Gumbel, RPO, regret analyses) each concept page draws on, with canonical arXiv/OpenReview links.
  • disagreements — the standing cruxes in lc0 search, kept as first-class content: contradiction is not resolved away.

How to read the citations

Every quote is verbatim from the raw source and verified — never paraphrased from a summary layer. The citation after each quote names the speaker and links the exact message or document:

"verbatim text" — author, #channel, YYYY-MM-DD

  • Discord — deep-link to the exact message in the Leela Chess Zero server.
  • GitHub#NNNN links to the issue or PR.
  • src: — exact file#Lstart-Lend at LeelaChessZero/lc0@v0.31.2, the authoritative statement of what the shipped code does.
  • ext: / paper: — an external reference (paper, other engine, chessprogramming wiki), cited by link and retrieval date. External sources enter as support to the community discussion, not as primary voices.

Citation tiers mark provenance, not authority — no single voice is the last word.

Clone this wiki locally