Before I get into what has changed since version 0.9, I think it is interesting to note what has not changed. Winter is still using the exact same evaluation function as in v0.8, so all strength improvements stem from performance improvements and changes to search. Despite my intentions, Winter is still not supporting endgame tablebases. I know this was an oft requested feature, so there is probably some disappointment. I added support for Pyrrhic, but somewhere I had a bug that I couldn't figure out despite help from Andrew and Terje. I am sure I would have figured it out with a fresh mind the next day, but it kind of killed my motivation, so I decided to postpone EGTB support until the next release.
Now onto what has actually changed! I wrote the following for the release page:
- WDL Search: WDL probabilities are now used in the whole search. Previously the WDL scores were transformed into scalar values for search purposes. This means Winter now outputs wdl estimates.
- Support for UCI_ShowWDL uci option.
- Support for Hash full UCI output.
- Fixed Time, Node and Depth Searches should no longer return instantly in positions with only one legal move.
- PV outputs are no longer restricted by the current depth.
- PV outputs are restricted in the case of draws.
- Winter has joined OpenBench. As a corollary, this means Winter has support for the bench command. A big thank you to Noobpwnftw who graciously donates the majority of resources to OpenBench, to Andrew Grant for writing OpenBench, to the SF dev team who made the original Fishtest and all the other great people working on or donating resources to OpenBench.
- Various changes to the search. In general Winter is now more agressive in its pruning, especially in PV nodes.
- Speed improvements, especially when compiled with GCC. The release binaries should still be significantly faster than in the previous release.
- Time management has been improved. This is true for both repeating TC and TC with increment, but moreso in the case of increment. The time management is also easier to understand, in case someone would like to steal ideas.
- Contempt and Armageddon had a minor rework. The functionality should be comparable to in Winter 0.8, but thanks to the new WDL Search it is easier to invert the effect of contempt. This means that cp and wdl score outputs are based on something close to the eval without contempt. That being said, the inverse does not work with contempt set to 100/-100. Armageddon default is 60/-60 for white and black respectively.
- As mentioned above I would like to support Syzygy via Pyrrhic.
- Fischer Random / Chess960
- Various ideas I have with regards to the evaluation function. I will likely expand my dataset. At the moment Winter's net has less than 1/1000th the number of model parameters when compared to the NNUE based engines. For this reason, overfitting hasn't been much of an issue so far, but I need to modify my dataset in some way if I want to use larger.
- Improve QS move ordering
- Rework high depth move ordering. Most likely replacing the logistic regression model with a small neural net.
- Partial support for NNUE. I am not sure how far I will go in this regard, but main idea is for people to be able to use nets trained for other engines in Winter. I haven't yet decided if I will support the incremental updates or if I will adopt some ideas from NNUE. It is not likely that Winter will use the standard NNUE net architecture.
Finally here are two games. One is a nice miniature from regression testing and the other is a nice win with black against KMCTS from the CCC competition. The KMCTS game was more or less without book (I think just 1.d4). The miniature had a long book, but is well worth playing through, I think.