π Search
- Improving: LMP (#1129)
- Improving: RFP (#1130, #1133)
- Improving: LMR (#1135)
- NMP, tweak reduction using eval - beta (#1139)
- NMP: Use the right score for TT condition (#1268)
- LMR: reduce more on cutnode (#1233)
- LMR: avoid when being checkmated (#1231)
- LMR: increase pv min moves 2 (#1230)
- History:
History_BestScoreBetaMargin
80 -> 60 (#1118) - History: increase bonus when best score is over beta by some margin (#1110)
- History: increase bonus when static eval is lower than alpha (#1123)
- Save static eval in TT (#1084, #1085)
- Aspiration windows: fail high reduction (#800, #1285)
β Time management
- Add node time management (#1203, #1206)
- Add best move stability (#1211)
- Add score stability (#1223)
- Soft limit <= hard limit (#1210)
β‘ Speedups
- Move to .NET 9 (#1108)
- Don't attempt continuation history on root moves (#1065)
- Use
Unsafe.Add
forPSQT()
(#1153) - Make
TaperedEvaluationTerm
fields constant (#1174) - Make TT (wrapper) a readonly struct (#1200)
- Flatten killer moves array (and stack-allocate it) (#1247)
- Minimal speedup in
go
UCI command parsing (#1264)
π Bug fixes
- Clear
PlyStackEntry
shared array on return (#1182) - Don't allow the search to stop if no best move is found (#1251)
- IDDFS finishes some depths with no moves (#1266)
- Incorrect (too negative) mate scores when being checkmated (#1271)
- Make sure
staticEval
var always gets initialized as part of the search (#1272) - Prevent aspiration windows to go outside of [MinEval, MaxEval] after window overflow (#1275)
π° Multithreaded search
-
Add support for multi-threaded search: basic lazy SMP implementation (#1263)
Threads # 1 2 4 8 ELO @ 8+0.08 - +100.96 +195.65 +263.42 ELO @ 40+0.4 - +83.35 +167.44 +220.54 NPS 1.21 Mnps 2.47 Mnps 4.88 Mnps 10.07 Mnps More detailed results can be found here.
Non strength-winning changes
- Allow non-power of two Hash sizes, implemented via 'fixed-point multiplication trick' (#1072)
- Improve and standardize
nps
reporting (#1081) - Use the total max ply as
selfdepth
value instead of last search's max ply (#1289) - Make
bench
quiet by default, and addverbosebench
(#1286) - Various big refactorings to accommodate multithreaded search (#1147, #1184, #1201, #1262)
Full Changelog: v1.7.0...v1.8.0