Skip to content

Measuring

ict edited this page Oct 16, 2026 · 1 revision

Measuring

Changes here are measured, not guessed. tools/match plays ENGINE_A against ENGINE_B over UCI and reports the score and an Elo difference. Each engine is a persistent UCI process (moves cost only the search); every opening is played twice with the colours swapped, which cancels the first-move advantage.

Running a match

cd tools && make
./match ../src/liteblue ../src/liteblue 6 6 160 book.epd        # fixed depth
./match ../src/liteblue ../src/liteblue 0 0 160 book.epd 15000  # fixed nodes

book is a file of opening positions, one FEN per line — the standard UHO_Lichess set works well. Without it a small built-in list is used. Over 512 openings the Elo error bar is about +/-30; an identical-engine match scores exactly 0.500.

Fixed depth vs fixed nodes — this matters

Evaluation changes alter which move looks best, so measure them at fixed depth. Search changes (pruning, move ordering) pay off by searching deeper, so fixed-depth games cannot reward them — measure those at fixed nodes (the nodes argument) or fixed time.

Results (versus 1.0.0)

change mode Elo
king safety (1.1.0) depth 6 +50
pawn structure (1.2.0) depth 6 +35
null-move pruning (on vs off) depth 6 / nodes ~0
search pruning (futility + LMP + reverse futility) depth 6 / nodes -42 / +20

The evaluation terms moved the needle; the search-efficiency changes we tried landed in the noise. Perft is unchanged throughout.

Clone this wiki locally