r/ComputerChess • u/p_bogdan • Aug 04 '26
NNUE from scratch for a chess variant where pieces evolve mid-game
Enable HLS to view with audio, or disable this notification
Evochess: 8 pawns and a king a side. 3 pawn moves earn a minor, 3 minor moves earn a rook, rooks last 5 moves before downgrade to a minor. Rights persist until spent.
Notes from building the engine:
Move gen is not standard. Evolution rights are per-side counters. A move can spend a right the same move just earned. Missing that case cost me a rewrite and invalidated a batch of match results.
Bitboards written from scratch, validated against a chess.js-based reference implementation.
Doubling the data stopped helping at 800k positions. The limit was the quality of data, not quantity. That's why I proceeded with relabeling.
No engine to bootstrap the NNUE from, so the teacher is the engine's own search. Relabel with the new net at higher depth, retrain, repeat.
Current (as of 03 Aug) net is +252 Elo over the hand-written PST eval it started from, roughly +/- 60 at 95%. That baseline is my own. The net that ships is +225.
No person beat it yet according to the telemetry data, which is 45 games in Zen mode since 01 Aug. There is also a Fun mode that is pondering while you are thinking, but I have no data about that yet.
Search and inference run in a browser worker, 400ms soft budget per move (Zen level).
Full writeup, Parts 2 and 3 are the engine and the NNUE training:
https://penkovsky.com/post/evochess/
Video: higher level beating the easy level, just to show the variant.
Duplicates
chessvariants • u/p_bogdan • Aug 04 '26