gaviota support for uci and selfplay #2044
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This patch provides support for Gaviota endgame table databases in both
uci
mode andselfplay
mode. The intended use case that motivated me writing it is to generate better training data, but sinceuci
mode is covered, it can be used generally.The implementation is inspired by the implementation of syzygy support, and much of the code is copied from
rescorer/rescorer.cc
which already supports Gaviota. Unlike the syzygy implementation it provides no new classes since Gaviota support only required two new functions, both located insearch.cc
.The implementation is done via
Search::MakeRootFilter()
which deletes legal but sub-optimal moves from the root node before search is started. With syzygy, optimal included every move that did not worsen the game outcome, but with Gaviota support we can define optimal moves as moves "resulting in the shortest path to mate" (for the winning side) and "resulting in the longest path to mate" for the losing side. (For drawn positions both syzygy and Gaviota treats all non-losing moves as optimal).