VeryChess 0.11.0
Overview
This release is a broad one: no single change dominates, but a long series of search and evaluation improvements adds up, and the engine's inner loop got substantially faster without changing a single search decision. On Apple Silicon the engine now searches about 30% more positions per second than 0.10.0; on an older Intel machine the three structural speed-ups alone added roughly +40%.
Strength
In a gauntlet tournament against other well-known chess engines (the permanent testing group used for VeryChess benchmarking) on an ARM64 Mac with an M2 CPU, VeryChess 0.11.0 achieved a rating of 2960 ± 26 ELO. Compared with VeryChess 0.10.0, which scored 2909 ± 27 ELO under the same benchmark configuration, version 0.11.0 shows an improvement of +51 ELO.
What's new
Search
- Correction history. The engine now learns, during a search, how far its static evaluation tends to be off for a given pawn structure and for each side's piece configuration, and corrects the evaluation used by reverse futility pruning and by the quiescence "stand pat".
- History bonus for the move that led to a failing node. When every reply in a position fails to raise the score, the quiet move that led into that position was evidently strong — it now gets credit in the move-ordering history, where previously nothing was learned.
- Reverse futility pruning respects threats. If the opponent is attacking one of our pieces with a cheaper one, the engine now asks for an extra safety margin before skipping a position as "already good enough".
- Multi-cut in the singular-extension verification search: when even the second-best move already refutes the opponent, the node is resolved immediately.
- Killer moves removed. An audit found that the killer-move heuristic had in practice been inactive for a long time — the slots were cleared before any sibling position could use them. A working version was built and measured, so the mechanism was removed entirely rather than kept in its inert form.
Evaluation
- Passed pawns: king distance — a passed pawn is worth more when the enemy king is far from its path and our own king is close.
- Passed pawns: free path — the pawn's whole route to promotion is examined: whether the squares ahead are attacked or occupied by the opponent, and whether our pieces support the next step.
- Fifty-move rule awareness. The evaluation now fades smoothly toward a draw as the fifty-move counter grows, so the engine prefers to make progress instead of shuffling in a position it cannot convert.
- Rook and pawn vs rook endgames. Three drawing patterns (the defending king in front of the pawn, and two king-race cases) are now recognised and scored as drawish. The rules were derived from and checked against endgame tablebases offline; the engine itself still needs no external files.
Speed
All of the following leave the search tree exactly unchanged — the same moves are searched in the same order at the same depths — and were checked that way on both Apple Silicon and Intel:
- Static evaluation is 32% faster (templated per-piece evaluation, bit-parallel pawn structure and pawn shelter, cheaper endgame-scaling checks).
- Making and unmaking moves costs 6.4% fewer instructions per node.
- Transposition-table indexing uses a bit mask instead of an integer division on the usual hash sizes (+6% positions per second on Intel; division is cheap on Apple Silicon).
- Late-move pruning before the move is made. Whether a quiet move gives check is now decided on the current board, so moves that would be pruned anyway are never played and taken back (+11% on Intel, −3.6% CPU cycles per node on Apple Silicon).
- Move ordering skips moves that will be pruned. Once late-move pruning is active in a position, the move picker no longer sorts the quiet moves it would discard (+18% on Intel, −15% CPU cycles per node on Apple Silicon).