Piece-square and feature weights now converge to a presence-weighted fractional win-rate per cell (percent of games won with a piece there minus percent lost), tracked via running visits/score sums instead of an incrementally clamped nudge.
The training signal is also scaled by how much of a game's result is NOT already explained by the winner's average material edge (via the standard centipawn win-probability curve), so a piece no longer gets credit merely for existing on the winning side of a material blowout in the endgame.
No ABI changes — all changes are internal to native/chess_engine.
Verified with a standalone smoke test: backward-compatible loading of old-format weight files, correct fractional accumulation, a ~125x smaller update for a materially-dominant win vs. an even-material win on the same square, and a full save/load round-trip.
Piece-square and feature weights now converge to a presence-weighted fractional win-rate per cell (percent of games won with a piece there minus percent lost), tracked via running visits/score sums instead of an incrementally clamped nudge.
The training signal is also scaled by how much of a game's result is NOT already explained by the winner's average material edge (via the standard centipawn win-probability curve), so a piece no longer gets credit merely for existing on the winning side of a material blowout in the endgame.
No ABI changes — all changes are internal to native/chess_engine.
Verified with a standalone smoke test: backward-compatible loading of old-format weight files, correct fractional accumulation, a ~125x smaller update for a materially-dominant win vs. an even-material win on the same square, and a full save/load round-trip.
Piece-square and feature weights now converge to a presence-weighted
fractional win-rate per cell (percent of games won with a piece there
minus percent lost), tracked via running visits/score sums instead of
an incrementally clamped nudge. The training signal is also scaled by
how much of a game's result is NOT already explained by the winner's
average material edge (via the standard centipawn win-probability
curve), so a piece no longer gets credit merely for existing on the
winning side of a material blowout in the endgame.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_018CmAti1baCjidbJM2HeJfk
jheaps
merged commit b7c9227bb8 into master2026-08-31 13:43:09 -06:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Piece-square and feature weights now converge to a presence-weighted fractional win-rate per cell (percent of games won with a piece there minus percent lost), tracked via running visits/score sums instead of an incrementally clamped nudge.
The training signal is also scaled by how much of a game's result is NOT already explained by the winner's average material edge (via the standard centipawn win-probability curve), so a piece no longer gets credit merely for existing on the winning side of a material blowout in the endgame.
No ABI changes — all changes are internal to native/chess_engine.
Verified with a standalone smoke test: backward-compatible loading of old-format weight files, correct fractional accumulation, a ~125x smaller update for a materially-dominant win vs. an even-material win on the same square, and a full save/load round-trip.