-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: major improvements to search logic, several bug fixes, and mult…
…iple new search features. (#99) resolves #95 resolves #96 resolves #90 I'll start off by stating that I definitely should not have let this PR get so large. I originally planned to fix a few bugs and make another release, but then kept getting sidetracked with small, easy-to-implement features like razoring and iir. I intend to have much smaller PRs to `main` moving forward. Anyway, here's a summary of what's new: - Razoring - Internal Iterative Reductions - Internal Iterative Deepening - This may be removed in the future, as I have been told that IIR is much more potent and tends to cover IID sufficiently. - Late move pruning - Mate distance pruning - Alternate mate score adjustments, courtesy of @87flowers - Proper PV tracking - Search info now also displays `seldepth` - Project restructure to support other crates in the workspace - Intent is to build the texel tuner in with the engine, as a separate crate. - Search parameters are now contained in their own struct, initialized once at engine startup. - Will eventually set this up so that each parameter has a UCI option for tweaking with SPSA - TT storage and cutoffs in qsearch - New `take` and `place` commands for manually modifying the board - Improvements to detecting if the search should be cancelled - Support for fractional depth during search And some bug fixes: - QSearch now uses a fail-soft framework - No more crashes at low TC if the search did not have enough time to find a bestmove - TT entries store an `Option<Move>` instead of `Move` - `Move` is now a `NonZeroU16`, so a nullmove is `Option::None` - Fullmove counter is no longer a `u8` due to overflow issues --- SPRT against `main`: ``` Elo | 167.36 +- 11.75 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2500 W: 1421 L: 302 D: 777 Penta | [19, 74, 312, 459, 386] ```https://pyronomy.pythonanywhere.com/test/786/ And against `Stash v21.2` (~2714 CCRL Blitz): ``` Elo | 9.88 +- 10.36 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 3060 W: 1283 L: 1196 D: 581 Penta | [199, 226, 608, 283, 214] ```https://pyronomy.pythonanywhere.com/test/784/ This puts Toad at around ~2700. --------- Co-authored-by: lily <[email protected]> Co-authored-by: 87flowers <[email protected]>
- Loading branch information
1 parent
2309360
commit 6eb100f
Showing
36 changed files
with
2,800 additions
and
1,630 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
/target | ||
|
||
pgo.sh | ||
|
||
toad-* |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,10 @@ | ||
[package] | ||
name = "toad" | ||
version = "2.0.0" | ||
edition = "2021" | ||
authors = ["Danny Hammer <[email protected]>"] | ||
license = "MPL-2.0" | ||
description = "A toy chess engine" | ||
repository = "https://github.com/dannyhammer/toad" | ||
homepage = "https://github.com/dannyhammer/toad" | ||
keywords = ["chess", "chess-engine", "uci"] | ||
[workspace] | ||
resolver = "2" | ||
members = ["toad"] | ||
|
||
[dependencies] | ||
anyhow = "1.0.89" | ||
arrayvec = "0.7.6" | ||
clap = { version = "4.5.18", features = ["derive", "string"] } | ||
#uci-parser = { path = "../uci-parser", features = ["parse-go-perft", "parse-position-kiwipete", "clamp-negatives", "err-on-unused-input"] } | ||
uci-parser = { git = "https://github.com/dannyhammer/uci-parser.git", features = ["parse-go-perft", "parse-position-kiwipete", "clamp-negatives", "err-on-unused-input"] } | ||
#uci-parser = { version = "0.2.0", features = ["parse-go-perft", "parse-position-kiwipete", "clamp-negatives", "err-on-unused-input"] } | ||
[profile.release] | ||
panic = 'abort' | ||
strip = true | ||
lto = true | ||
codegen-units = 1 | ||
overflow-checks = true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.