Dorky 5.1 - new version chess engine



Dorky - Dorky 5.0 adds native UCI protocol support and Syzygy endgame
tablebases, and closes the crash and time-forfeit problems present in 4.8.
Author - Matt McKnight  Rating CEDR=2854

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 controlgamesW-L-DscoreElo95% CI
10+0.14,5002289-983-122864.51%+103.8[+95.0, +112.8]
60+0.6927454-168-30565.43%+110.8[+92.3, +130.0]
pooled5,4272743-1151-153364.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_COLOR and 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_HEAVY indexed 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
    with MATE_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 in root_moves[0].

Speed and correctness

  • BMI2 PEXT sliding-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. currmove output is now optional and off by default.
  • An SMP nodes_searched race 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. The PEXT slider 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 create does not work on the
    Linux build, and a book is not portable between platforms — the footer stores
    its cluster length in a C long, 4 bytes on Windows and 8 on Linux, so each
    rejects the other's book.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 currmove is no longer emitted unless enabled. GUIs that displayed the
    current root move will show nothing there by default.
  • Dorky.ini defaults remain transposition_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.epd d10 483,965,181,
    wac.epd d10 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.ps1 passes 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.epd with scripts/check-trap-eval.ps1 compares
    a live build against a compile-time detector stub. Positive controls, mirrored
    by color and wing, cover fishing-pole SET and SPRUNG, Greek-gift BASE,
    SACKED, and CONTROL; 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 over games.epd recorded 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 VALIDATE soak 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

Popular posts from this blog

Reckless 0.9.0 - new version super strong chess engine

Reckless 0.10.0 - new version super strong chess engine