Repository navigation
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.
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.
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.
| 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.