Dorky 5.1 - new version chess engine
Dorky - Dorky 5.0 adds native UCI protocol support and Syzygy endgame
What's new?
Dorky 5.1 is about +105 Elo stronger than Dorky 5.0.
Measured directly on the shipping binary against tagged v5.0, matched UCI
protocol, one core, no engine book, UHO_4060_v4.epd repeated-color openings,
transposition hash 256 MB and pawn hash 64 MB:
| time control | games | W-L-D | score | Elo | 95% CI |
|---|---|---|---|---|---|
| 10+0.1 | 4,500 | 2289-983-1228 | 64.51% | +103.8 | [+95.0, +112.8] |
| 60+0.6 | 927 | 454-168-305 | 65.43% | +110.8 | [+92.3, +130.0] |
| pooled | 5,427 | 2743-1151-1533 | 64.67% | +105.0 | [+97.0, +113.1] |
Elo intervals use the trinomial W/L/D standard error and the logistic Elo
transform. This is a single direct measurement of the complete 5.0 → 5.1 span,
not a figure composed from the individual changes listed below.
What changed
The dominant change is the evaluation rewrite.
Evaluation
- Full tapered middlegame/endgame evaluation. Dorky now carries independently
tuned MG and EG values for the whole evaluator and interpolates them
continuously over a conventional 24-step material phase. This replaces the old
partial, term-by-term phase handling. It brought wider ordinary piece-square
tables, a tapered king table, and a simplified tapered pawn-chain model built on
color-specific base attacks. The full tune fitted K=1.0211 and cut holdout MSE
from 0.094405 to 0.093281. - Outpost redesign, retuned, shipped as a bundle together with two new trap
terms: Greek-gift sacrifice evaluation and the fishing-pole / trojan
pattern. The Stonewall structure handling was repaired in the same work. - Mobility reworked and fully tuned, including a minor-supporting-piece term
and a centralized mobility area. The rook mobility terms were kept alongside the
existing rook terms rather than replacing them. - Separate middlegame and endgame queen values, plus
BISHOP_PLUS_PAWNS_ON_COLORand a knight-pair redundancy term. - Development gradient. While a side still has a minor on its home square, the
positive half of the knight piece-square table is scaled down, so repositioning
an already-developed knight gains less than bringing a new piece out. Bishops
are deliberately excluded: their home squares score near zero, so the same
scaling would penalize the first developing move instead. A queen half of the
same shape also ships. Both scales spent part of the release span reverted to
inert and re-entered as fitted values from the full tune, so neither carries a
standalone strength measurement. - Bug fixes:
BISHOP_XRAY_HEAVYindexed the slider tables with empty occupancy;
the heavy-piece xray code had a second defect; king-king tropism was
de-registered from tuning and restored to its origin value.
Search
- Singular extensions.
- Logarithmic LMR reduction schedule —
log(depth) x log(moveCount). - Mate-distance pruning, plus a fix replacing invented near-mate constants
withMATE_THRESHOLD, which had been corrupting aspiration-window searches. - The root aspiration ladder is now a function of the iteration rather than of
whichever move happens to sit inroot_moves[0].
Speed and correctness
- BMI2
PEXTsliding-piece attacks, behind a compile guard, with the rotated
bitboards retained as a validation oracle. Worth about −5.19% search time. - UCI protocol performance fix — Dorky was doing per-move work on every move
under UCI.currmoveoutput is now optional and off by default. - An SMP
nodes_searchedrace is fixed by counting into a local move count. - Faster string parsing on the protocol path.
- Castling out of check is no longer generated. The castling legality test
checked the squares the king crosses and lands on but never the square it
starts on. Quiescence's checking-move generator could therefore produce a
castle that escaped check and delivered one simultaneously — a move that does
not exist — and search it. It never reached the board: the played move comes
from legal root generation, and the transposition table's move is validated
before use, so this cost search accuracy rather than legality. The defect had
been present since the project's first commit in 2015. Measured over 2,584
games at two time controls, correcting it produced no detectable change in
playing strength (+1.4 at 10+0.1, +1.3 at 60+0.6); it ships as a correctness
fix.
Component results are history, not arithmetic
The individually measured ships were LMR +9.0, MG/EG queen value +11.0, full
mobility +6.4, singular extension +9.1, the outpost/trap bundle +14.6, and the
full phase split +44.4. Those point estimates are development history. They are
not a composable rating claim and they do not sum to the release figure. The
direct 5.1-vs-5.0 arm above is the measurement that counts.
Compatibility notes
- Dorky 5.1 requires a BMI2-capable CPU — Intel Haswell (2013) or newer, AMD
Excavator (2015) or newer. ThePEXTslider index has no runtime fallback, so
older hardware that ran 5.0 will fail on 5.1 with an illegal-instruction crash.
AMD Zen 1 and Zen 2 run correctly but microcode the instruction and gain
nothing from it. - The Linux archive ships no opening book.
book createdoes not work on the
Linux build, and a book is not portable between platforms — the footer stores
its cluster length in a Clong, 4 bytes on Windows and 8 on Linux, so each
rejects the other'sbook.bin. The Linux engine plays from move one with no
error; GUI-supplied books work normally. The Windows archive ships a book as
before. - UCI
currmoveis no longer emitted unless enabled. GUIs that displayed the
current root move will show nothing there by default. Dorky.inidefaults remaintransposition_table=256,pawn_table=64. Every
number in this document was measured at those sizes.
Verification
- Strength: the arm above, 5,427 games across two time controls.
- Determinism and tactics: four fixed-depth suites reproduce their expected
node signatures exactly on the release binary —games.epdd10 483,965,181,wac.epdd10 78,125,927, and the 100-position depth subset 717,554,936 at
depth 14 and 2,892,203,018 at depth 16. All three recorded perfts return their
exact values: start position depth 6 = 119,060,324, Kiwipete depth 4 =
4,085,603, promotion-dense depth 4 = 422,333. - Tablebases:
scripts/check-tablebases.ps1passes 1,191 of 1,191
positions, with Syzygy and Nalimov agreeing on every shared position, the
hand-annotated anchors holding, and 5-man Syzygy-only fallback behaving. - Trap evaluation:
trap-eval.epdwithscripts/check-trap-eval.ps1compares
a live build against a compile-time detector stub. Positive controls, mirrored
by color and wing, cover fishing-poleSETandSPRUNG, Greek-giftBASE,SACKED, andCONTROL; one-condition-negative controls cover each required
precondition individually. Thirty live-versus-stub root-move comparisons at
depths 8 through 16 were identical, so neither detector induces a sacrificial
root choice. Temporary instrumentation overgames.epdrecorded 132,531
fishing-pole and 71,487 Greek-gift scoring events, confirming both detectors
fire in ordinary play; that instrument does not ship. - Runtime: a multi-core
Release VALIDATEsoak across UCI and XBoard, ponder
on and off, and with a Syzygy path configured.
Known limitations and deferred work
- Drawish material signatures are not scaled. Configurations such as rook
versus minor are still scored on their raw material difference rather than
pulled toward zero. - Won pawnless endgames convert slowly. This is a separate, open problem.
- Also deferred past this release: the blocked-pawn redesign, aspiration-window
experiments, further outpost tuning, and NNUE.
Dorky 5.1 download mirror

Comments
Post a Comment