e4 · Chess engine

Falcon

Private code

A UCI chess engine in C++ with NNUE evaluation. It plays on Lichess, rated around 2800.

  • The current network combines 4 king-buckets with 8 output-buckets.
  • Lazy SMP multi-threaded search.
  • Method: every change must pass SPRT before being accepted.

“Standard architectures, well executed, before inventions; measure, don’t assume.”

The code is private; the rating is read live from the public Lichess API.

Technical decisions

Measure before you believe. Most of the lost months weren’t caused by bad ideas but by measurement errors. Every change now plays thousands of games against the previous version until an SPRT decides, and first I check that the test measures what it claims to.

One variable at a time. The first big jump came when I stopped changing architecture, recipe and data all at once. Since then, each experiment touches a single thing and has its abort rule written down before it starts.

The hardware decides. Falcon plays on a modest laptop CPU, and that sets the width of the network: a smarter net that evaluates more slowly can lose. Before training anything, I measure what it would cost to run.

Start from public recipes. The deep network now in production began as a replica of a public bullet recipe. Inventing my own architectures cost me more than adapting known ones well.

Milestones

SPRT-confirmed gains · August–October 2026

  • Evaluation scale calibration+52.8 Elo
  • New network architecture (king and output buckets)+19.8 Elo
  • No TT cutoffs at PV nodes+18.0 Elo
  • Fail-soft qsearch in TT+10.7 Elo
  • Deep network r2+16.9 Elo
  • Dual activation+6.3 Elo
  • Longer training tail+3.7 Elo

Coordinates

Tap the requested square. a1 is bottom-left.

Play e4

Related writing

  • Losing to a linear network

    In the second half of September I lost every game that mattered. Not me: my networks. Every neural network with hidden layers I trained for Falcon, my chess en…

    · 8 min

    • falcon
    • nnue
    • chess
    • methodology