Winter

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

jorose
Posts: 358
Joined: Thu Jan 22, 2015 3:21 pm
Location: Zurich, Switzerland
Full name: Jonathan Rosenthal

Winter

Post by jorose »

I intend to reuse this thread in the future for all Winter releases, as other authors have done similarly. This first post is the Winter 0.9 release post.

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.
Looking forward there are a number of features I am looking at with regards to the next major version. Here are a few off the top of my head.
  • 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.
The newest release of Winter can be found here. https://github.com/rosenthj/Winter/releases

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]
-Jonathan
User avatar
Werner
Posts: 2871
Joined: Wed Mar 08, 2006 10:09 pm
Location: Germany
Full name: Werner Schüle

Re: Winter

Post by Werner »

Thanks for the new version.
Does version 0.9 use an internal nn ?
Werner
jorose
Posts: 358
Joined: Thu Jan 22, 2015 3:21 pm
Location: Zurich, Switzerland
Full name: Jonathan Rosenthal

Re: Winter

Post by jorose »

Werner wrote: Mon Oct 05, 2020 11:20 am Thanks for the new version.
Does version 0.9 use an internal nn ?
Yes, it has an internal NN. It is a very small network so the weights are actually hardcoded at the moment.

This has been the approach since Winter started using an NN back in version 0.6.2 and was mostly based on passed experiences where users got confused by external weight files.

I have not decided what I will do if the network gets considerably larger.
-Jonathan
User avatar
Guenther
Posts: 4605
Joined: Wed Oct 01, 2008 6:33 am
Location: Regensburg, Germany
Full name: Guenther Simon

Re: Winter

Post by Guenther »

jorose wrote: Mon Oct 05, 2020 11:57 am
Werner wrote: Mon Oct 05, 2020 11:20 am Thanks for the new version.
Does version 0.9 use an internal nn ?
Yes, it has an internal NN. It is a very small network so the weights are actually hardcoded at the moment.

This has been the approach since Winter started using an NN back in version 0.6.2 and was mostly based on passed experiences where users got confused by external weight files.

I have not decided what I will do if the network gets considerably larger.
Thanks for the new release Jonathan!

I tried the ancient and the older compiles here and get around 195-200 kn/s on my old quadcore from startpos (d16-d22).
https://rwbc-chess.de

trollwatch:
Chessqueen + chessica + AlexChess + Eduard + Sylwy
User avatar
Werner
Posts: 2871
Joined: Wed Mar 08, 2006 10:09 pm
Location: Germany
Full name: Werner Schüle

Re: Winter

Post by Werner »

jorose wrote: Mon Oct 05, 2020 11:57 am I have not decided what I will do if the network gets considerably larger.
Thanks, I am not interested in a Winter Chess Engine with a Stockfish NNUE.
Werner
Gabor Szots
Posts: 1362
Joined: Sat Jul 21, 2018 7:43 am
Location: Szentendre, Hungary
Full name: Gabor Szots

Re: Winter

Post by Gabor Szots »

Thanks Jonathan.
Gabor Szots
CCRL testing group
User avatar
CMCanavessi
Posts: 1142
Joined: Thu Dec 28, 2017 4:06 pm
Location: Argentina

Re: Winter

Post by CMCanavessi »

"Before I get into what has changed since version 0.9"

Typo :mrgreen:
Follow my tournament and some Leela gauntlets live at http://twitch.tv/ccls
jorose
Posts: 358
Joined: Thu Jan 22, 2015 3:21 pm
Location: Zurich, Switzerland
Full name: Jonathan Rosenthal

Re: Winter

Post by jorose »

Guenther wrote: Mon Oct 05, 2020 12:27 pm Thanks for the new release Jonathan!

I tried the ancient and the older compiles here and get around 195-200 kn/s on my old quadcore from startpos (d16-d22).
How fast is this compared to Winter 0.8? I am expecting it to be considerably more than it was previously.
Werner wrote: Mon Oct 05, 2020 1:59 pm Thanks, I am not interested in a Winter Chess Engine with a Stockfish NNUE.
Yes, that isn't something I am intending. If I do add support for NNUE networks it would still not be based on any SF code and my referencing SF code would mostly be to make sure networks are compatible. Even so, the primary Winter networks will probably not be compatible with SF style NNUE. The thought process here is people will be able to train nets for Winter if they want and have a guarantee that they will still work even if I change my codebase. At the moment I have not really encouraged users to train new nets, because with how things currently are, whenever I come up with a new set of input features, previous networks all become incompatible.
Gabor Szots wrote: Mon Oct 05, 2020 3:43 pm Thanks Jonathan.
No, thank you! Chess programming is a very solitary hobby. Without the support of all the testers, fans and fellow developers it would be quite depressing I think. Winter would not be the same and neither would I.
CMCanavessi wrote: Mon Oct 05, 2020 5:56 pm "Before I get into what has changed since version 0.9"

Typo :mrgreen:
Or maybe I was just super prolific in the short time span between making this thread and releasing version 0.9?

Good catch :)
-Jonathan
User avatar
Guenther
Posts: 4605
Joined: Wed Oct 01, 2008 6:33 am
Location: Regensburg, Germany
Full name: Guenther Simon

Re: Winter

Post by Guenther »

jorose wrote: Mon Oct 05, 2020 6:37 pm
Guenther wrote: Mon Oct 05, 2020 12:27 pm Thanks for the new release Jonathan!

I tried the ancient and the older compiles here and get around 195-200 kn/s on my old quadcore from startpos (d16-d22).
How fast is this compared to Winter 0.8? I am expecting it to be considerably more than it was previously.
Oh yes! I checked it now vs. the same compilation of version 0.8.
Here it is between 110-115 kn/s (same conditions as above), so 0.9 seems nearly 80% faster.
https://rwbc-chess.de

trollwatch:
Chessqueen + chessica + AlexChess + Eduard + Sylwy
jorose
Posts: 358
Joined: Thu Jan 22, 2015 3:21 pm
Location: Zurich, Switzerland
Full name: Jonathan Rosenthal

Re: Winter

Post by jorose »

I don't really want to post many individual games here, but I just replayed a miniature from Graham's Amateur Division 2 that shall be among the exceptions. I'm not sure when I last saw a game with this many pawn sacrifices!

[pgn][Event "Computer game"]
[Site "GrahamCCRL.dyndns.org\\82nd Amateur D2.e1e"]
[Date "2020.10.11"]
[Round "?"]
[White "Roc 2020Jul10"]
[Black "Winter 0.9 SSE4.2"]
[TimeControl "40/1500"]
[Result "0-1"]

1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 e6 6.g4 h6 7.Be3 e5 8.Bb5+ Bd7
9.Bxd7+ Nbxd7 10.Nb3 Qc7 11.f3 a6 12.Qe2 b5 13.a3 b4 14.axb4 d5 15.Nxd5 Nxd5
16.exd5 Bxb4+ 17.Kf1 Nf6 18.Bd4 O-O 19.Bxe5 Qd8 20.Qd3 Re8 21.Bxf6 Qxf6 22.Kg2
h5 23.Ra4 a5 24.Rf1 Bd6 25.Kh1 Rac8 26.Nxa5 Ra8 27.Qd2 Bc7 28.gxh5 Qf5 29.Raa1
Bf4 30.Qg2 Qxh5 31.c4 g6 32.c5 Re5 33.Ra4 Qh6 34.Rxf4 Qxf4 35.Nc6 Rh5 36.Qf2 Kg7
37.b4 Rxd5 38.Qg3 Qf6 39.Na5 Qb2 40.Re1 Qxb4 41.Nb7 Qxb7 42.Rf1 Qb2 43.Rf2 Ra1+
44.Kg2 0-1[/pgn]
-Jonathan