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.
[pgn][Event "CPU Blitz Madness (3|2)"]
[Site "?"]
[Date "2020.09.08"]
[Round "1"]
[White "Komodo MC"]
[Black "Winter"]
[Result "0-1"]
[ECO "D30"]
[GameDuration "00:09:15"]
[GameEndTime "2020-09-08T21:48:20.969 PDT"]
[GameStartTime "2020-09-08T21:39:05.241 PDT"]
[Opening "Queen's gambit declined"]
[PlyCount "118"]
[TimeControl "180+2"]
1. d4 d5 2. c4 e6 3. Bf4 c5 4. e3 Nf6 5. Nf3 cxd4 6. exd4 Be7 7. c5 O-O 8. Nc3
b6 9. b4 Ne4 10. Rc1 a5 11. Na4 Nd7 12. Bb5 axb4 13. c6 Ba6 14. c7 Qc8 15. Bc6
Ra7 16. Bxd7 Qxd7 17. Nxb6 Qb5 18. c8=Q Nc3 19. Qxc3 bxc3 20. Na4 Rc8 21. Nxc3
Bb4 22. Bd2 Qd3 23. Ne5 Qxd4 24. Nf3 Qd3 25. Ne5 Qf5 26. f4 d4 27. Ne2 Rxc1 28.
Qxc1 Qe4 29. O-O Bxd2 30. Qxd2 Bxe2 31. Rc1 h6 32. h3 Kh7 33. Rc8 f6 34. Ng4
Qb1+ 35. Kh2 Bxg4 36. Qxd4 e5 37. fxe5 Bxc8 38. Qxa7 f5 39. Qf2 Qe4 40. Qb2 Be6
41. Kg1 Qe3+ 42. Kh2 Bd5 43. h4 Qe4 44. Qf2 Qxe5+ 45. Kg1 Be6 46. a4 Qa1+ 47.
Kh2 Qxa4 48. h5 Qg4 49. Kg1 Bd5 50. Qd2 Be4 51. Kf2 Qxg2+ 52. Ke3 f4+ 53. Kxf4
Qxd2+ 54. Kxe4 g5 55. Kf5 Qd4 56. Ke6 Kg7 57. Ke7 Qd5 58. Ke8 Kf6 59. Kf8 Qd8#
0-1
[Event "?"]
[Site "?"]
[Date "2020.09.14"]
[Round "63"]
[White "Winter v0.8.13"]
[Black "Winter v0.8"]
[Result "1-0"]
[ECO "C52"]
[GameDuration "00:01:51"]
[GameEndTime "2020-09-14T03:37:15.247 EDT"]
[GameStartTime "2020-09-14T03:35:23.563 EDT"]
[Opening "Evans gambit"]
[PlyCount "87"]
[TimeControl "60+0.6"]
[Variation "compromised defense"]
1. e4 {book} e5 {book} 2. Nf3 {book} Nc6 {book} 3. Bc4 {book} Bc5 {book}
4. b4 {book} Bxb4 {book} 5. c3 {book} Ba5 {book} 6. d4 {book} exd4 {book}
7. O-O {book} dxc3 {book} 8. Qb3 {book} Qf6 {book} 9. e5 {book} Qg6 {book}
10. Nxc3 {book} Nge7 {book} 11. Ne2 {0.00/16 3.5s} b5 {0.00/17 2.5s}
12. Bd3 {+0.07/17 3.4s} Qe6 {+0.24/17 2.6s} 13. Qa3 {-0.27/17 1.8s}
b4 {+0.34/16 2.6s} 14. Qa4 {-0.42/16 1.8s} Nxe5 {+0.08/17 2.7s}
15. Ned4 {-0.26/18 2.8s} Nxf3+ {+0.73/16 3.1s} 16. Nxf3 {-0.01/18 1.5s}
Bb6 {+0.45/17 2.4s} 17. Re1 {-0.17/19 2.4s} Qd6 {+0.15/17 2.0s}
18. Be4 {-0.08/17 2.0s} Rb8 {+0.35/17 2.7s} 19. Bg5 {+0.11/17 1.9s}
Kf8 {+0.23/16 1.6s} 20. Rad1 {+0.82/18 1.4s} Qc5 {0.00/19 1.3s}
21. Bb7 {+0.74/19 1.6s} Qxf2+ {+0.07/16 2.5s} 22. Kh1 Bxb7 {-2.17/15 2.4s}
23. Qxd7 {+2.93/18 1.8s} Nc6 {-2.19/15 2.3s} 24. Re7 {+3.44/18 1.4s}
Bd4 {-3.31/16 1.1s} 25. Qxc7 {+3.82/17 1.4s} h6 {-3.46/16 2.2s}
26. Nxd4 {+4.02/19 2.3s} Kg8 {-3.34/17 1.4s} 27. Be3 {+4.02/20 1.6s}
Qxa2 {-3.61/16 2.0s} 28. Nxc6 {+4.02/19 2.2s} Bxc6 {-4.06/17 1.2s}
29. Qxb8+ {+4.35/18 2.0s} Kh7 {-3.73/18 1.8s} 30. Qg3 {+4.13/19 1.9s}
Qb3 {-4.08/15 1.8s} 31. Qg4 {+4.49/16 1.9s} Rg8 {-4.13/15 1.7s}
32. h3 {+4.58/15 1.8s} a5 {-4.39/13 1.7s} 33. Rd6 {+6.77/17 1.2s}
Bxg2+ {-6.27/14 1.3s} 34. Kxg2 {+8.84/18 1.2s} Qc2+ {-7.48/16 0.95s}
35. Kg3 {+17.66/19 1.0s} Rf8 {-9.44/18 1.3s} 36. Bd4 {+17.66/19 0.87s}
g6 {-10.61/19 0.78s} 37. Rf6 {+M15/16 1.4s} Qd3+ {-17.68/17 1.5s}
38. Kh4 {+M13/16 1.1s} Kg8 {-M12/17 0.96s} 39. Rexf7 {+M11/17 1.1s}
Rxf7 {-M10/18 1.0s} 40. Qc8+ {+M9/18 1.0s} Kg7 {-M8/19 1.1s}
41. Rxg6+ {+M7/18 0.91s} Kxg6 {-M6/19 0.89s} 42. Qe6+ {+M5/19 1.2s}
Rf6 {-M4/19 0.70s} 43. Qxf6+ {+M3/19 0.95s} Kh7
44. Qg7# {+M1/20 0.80s, White mates} 1-0
[/pgn]