Older Version Newer Version

GerdIsenberg GerdIsenberg Jan 23, 2018

**[[Home]] * [[Engines]] * Winter**
|| [[image:ZurichInWinter.jpg link="http://se.ethz.ch/~meyer/images/zurich/lake.jpg"]] ||~ || **Winter**,
an [[UCI]] compliant [[Open Source Engines|open source chess engine]] by [[Jonathan Rosenthal]], written in [[Cpp|C++]], released on January 08, 2018 under the terms of [[Free Software Foundation#GPL|GPL Version 3]]. Winter is inspired by [[Learning|machine learning]] techniques, as applied in [[Move Ordering|move ordering]] and in particular in [[Evaluation|evaluation]], and heavily relies on [[https://en.wikipedia.org/wiki/Template_(C%2B%2B)|C++ templates]] but not on any library aside from [[https://en.wikipedia.org/wiki/Standard_Template_Library|STL]] as it comes with its own implementations for [[https://en.wikipedia.org/wiki/Statistics|statistics]] <ref>[[https://github.com/rosenthj/Winter/blob/master/src/learning/statistics.h|Winter/statistics.h at master · rosenthj/Winter · GitHub]]</ref> and [[https://en.wikipedia.org/wiki/Linear_algebra|linear algebra]] <ref>[[https://github.com/rosenthj/Winter/blob/master/src/learning/linear_algebra.h|Winter/linear_algebra.h at master · rosenthj/Winter · GitHub]]</ref>. Winter started its life in 2016 as a group project at [[ETH Zurich]] in a course on parallel computing along with Jonas Kuratli and Jonathan Maurer - the current release with Jonathan Rosenthal as sole author has removed the parallel portion of the code <ref>[[http://www.talkchess.com/forum/viewtopic.php?t=66266|Winter Released]] by [[Jonathan Rosenthal]], [[CCC]], January 08, 2018</ref>. It started to play on-line at [[Harm Geert Muller|HGM's]] [[Online Engine Blitz Tourneys]] in April 2017 <ref>[[http://www.talkchess.com/forum/viewtopic.php?t=63777&start=9|Re: On-line engine blitz tourney April]] by [[Harm Geert Muller]], [[CCC]], April 22, 2017</ref>. ||
|| [[https://en.wikipedia.org/wiki/Winter|Winter]] in [[https://en.wikipedia.org/wiki/Z%C3%BCrich|Zurich]], [[ETH Zurich]] view <ref>Image clipped from [[http://se.ethz.ch/~meyer/|Winter views from our floor]] by [[Mathematician#BMeyer|Bertrand Meyer]], [[ETH Zurich]], [[http://se.ethz.ch/~meyer/images/zurich/lake.jpg|Gray moment]] with [[https://en.wikipedia.org/wiki/Zentralbibliothek_Z%C3%BCrich|Zentralbibliothek]] and [[https://en.wikipedia.org/wiki/Predigerkirche_Z%C3%BCrich|Predigerkirche]] in the foreground,  [[https://en.wikipedia.org/wiki/Lake_Zurich|Lake Zurich]], [[https://en.wikipedia.org/wiki/Grossm%C3%BCnster|Grossmünster]], [[https://en.wikipedia.org/wiki/Fraum%C3%BCnster|Fraumünster]] and [[https://en.wikipedia.org/wiki/St._Peter,_Z%C3%BCrich|St. Peter]] behind, in the background foothill of [[https://en.wikipedia.org/wiki/Uetliberg|Uetliberg]], from [[http://se.ethz.ch/~meyer/|Bertrand Meyer's ETH home page]]</ref>  ||~ ||^ ||
[[toc]]
=Selected Features= 
<ref>based on [[http://www.talkchess.com/forum/viewtopic.php?t=66266|Winter Released]] by [[Jonathan Rosenthal]], [[CCC]], January 08, 2018</ref>
==[[Board Representation]]== 
* [[Bitboards]]
* [[8x8 Board]]
* [[Magic Bitboards#Fancy|Fancy Magic Bitboards]]
> [[BMI2#PEXTBitboards|BMI2 - PEXT Bitboards]]
==[[Search]]==
* [[Fail-Hard]]  [[Iterative Deepening]]
* [[Alpha-Beta]] [[Principal Variation Search]]
* [[Transposition Table]]
* [[Move Ordering]] is based on the linear part of a [[Automated Tuning#LogisticRegression|Logistic Regression]] [[https://en.wikipedia.org/wiki/Statistical_classification|classifier]] aka [[https://en.wikipedia.org/wiki/Cluster_analysis|cluster analysis]] 
** The classifier is trained via [[Temporal Difference Learning|temporal difference learning]]  to predict whether a [[Moves|move]] will return [[Beta|beta]]
** Classifier considers [[Hash Move|TT move]], [[Killer Move|killers]], [[Moves#Type|move type]], [[Origin Square|from square]], [[Target Square|target square]], [[Captures|capture target]], [[Static Exchange Evaluation|SEE]], target square of last move, [[Check|check]] and changes between forcing and unforcing moves (a capture is more likely after another capture)
* [[Selectivity]]
** [[Null Move Reductions]]
** [[Reverse Futility Pruning|Static Null Move Pruning]]
** [[Late Move Reductions]]
** [[Futility Pruning]]
** [[Quiescence Search]]
** [[Static Exchange Evaluation]]
==[[Evaluation]]==
* Non standard approach relies on a [[https://en.wikipedia.org/wiki/Mixture_model|mixture model]] <ref>[[http://www.talkchess.com/forum/viewtopic.php?t=66266&start=7|Re: Winter Released]] by [[Jonathan Rosenthal]], [[CCC]], January 09, 2018</ref>
** Assumes [[Chess Position|positions]] encountered in search come from some set of k [[https://en.wikipedia.org/wiki/Gaussian_function|Gaussians]] <ref>[[https://en.wikipedia.org/wiki/K-means_clustering|k-means clustering from Wikipedia]]</ref> <ref>[[http://stanford.edu/~cpiech/cs221/handouts/kmeans.html|K Means]] by [[https://web.stanford.edu/~cpiech/bio/index.html|Chris Piech]]</ref>  [[image:320px-Normal_Distribution_PDF.svg.png link="https://en.wikipedia.org/wiki/Gaussian_function#/media/File:Normal_Distribution_PDF.svg" align="right" caption="A set of Gaussians"]]
** Mixture model is trained via [[https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm|EM algorithm]] <ref>[[http://www.ics.uci.edu/~smyth/courses/cs274/notes/EMnotes.pdf|The EM Algorithm for Gaussian Mixtures - Probabilistic Learning: Theory and Algorithms, CS 274A]] (pdf) [[https://en.wikipedia.org/wiki/University_of_California,_Irvine|University of California, Irvine]]</ref> <ref>[[http://people.csail.mit.edu/dsontag/courses/ml12/slides/lecture21.pdf|Mixture Models & EM algorithm Lecture 21]] (pdf) by [[https://people.csail.mit.edu/dsontag/|David Sontag]], [[https://en.wikipedia.org/wiki/New_York_University|New York University]]</ref> either on [[Databases|database games]] or positions sampled from search 
** For each Gaussian a separate evaluation function is trained. When the evaluation function is called the relative probability a position stems from each Gaussian is estimated, the evaluation functions are computed and the final score is returned as the weighted average - a generalization of [[Tapered Eval|tapered eval]] with [[Game Phases|game phases]] <ref>[[http://www.talkchess.com/forum/viewtopic.php?t=65466&start=4|Re: Tapered Eval between 4 phases]] by [[Jonathan Rosenthal]], [[CCC]], October 16, 2017</ref>
* Parameter weights are trained via a mixture of [[Reinforcement Learning|reinforcement ]] ([[Temporal Difference Learning|temporal difference]]) learning and [[Supervised Learning|supervised learning]]
** Minimizing the [[https://en.wikipedia.org/wiki/Cross_entropy|cross entropy]] loss of a [[Automated Tuning#LogisticRegression|Logistic Regression]] model for each of the k Gaussians
** Training converges fast due to [[https://en.wikipedia.org/wiki/Linear_model|linear model]] at the heart 
==Misc==
* [[Perft]]
* Print pretty [[Pieces#Unicode|Unicode]] [[Chessboard|chess boards]]

=Forum Posts=
* [[http://www.talkchess.com/forum/viewtopic.php?t=65466&start=4|Re: Tapered Eval between 4 phases]] by [[Jonathan Rosenthal]], [[CCC]], October 16, 2017 » [[Tapered Eval]]
* [[http://www.talkchess.com/forum/viewtopic.php?t=66266|Winter Released]] by [[Jonathan Rosenthal]], [[CCC]], January 08, 2018
> [[http://www.talkchess.com/forum/viewtopic.php?t=66266&start=7|Re: Winter Released]] by [[Jonathan Rosenthal]], [[CCC]], January 09, 2018
> [[http://www.talkchess.com/forum/viewtopic.php?t=66266&start=8|Windows version released]] by [[Jonathan Rosenthal]], [[CCC]], January 23, 2018

=External Links=
==Chess Engine==
* [[https://github.com/rosenthj/Winter|GitHub - rosenthj/Winter: UCI Chess Engine]]
==Misc==
* [[https://en.wikipedia.org/wiki/Winter|Winter from Wikipedia]]
* [[https://en.wiktionary.org/wiki/Winter|Winter - Wiktionary]]
* [[https://en.wiktionary.org/wiki/winter|winter - Wiktionary]]
* [[https://en.wikipedia.org/wiki/Winter_(disambiguation)|Winter (disambiguation) from Wikipedia]]
* [[https://www.ethz.ch/en/the-eth-zurich/sustainability/education/summer-and-winter-schools.html|Summer and Winter Schools]] | [[ETH Zurich]]
* [[https://en.wikipedia.org/wiki/Wintel|Wintel from Wikipedia]]
* [[https://en.wikipedia.org/wiki/AI_winter|AI winter from Wikipedia]]
* [[https://en.wikipedia.org/wiki/Winter_(surname)|Winter (surname) from Wikipedia]]
* [[https://en.wikipedia.org/wiki/Edward_Winter_%28chess_historian%29|Edward Winter (chess historian) from Wikipedia]]
* [[Videos#JohnnyWinter|Johnny Winter]] - Winter Ballade, [[https://en.wikipedia.org/wiki/Institut_national_de_l%27audiovisuel|ina.fr]] 1970, [[https://en.wikipedia.org/wiki/YouTube|YouTube]] Video
> feat. [[https://en.wikipedia.org/wiki/Tommy_Shannon|Tommy Shannon]] on bass and [[http://yeech.altervista.org/Band/winter_band_john_turner.html|Uncle John Turner]] on drums
> [[media type="youtube" key="8P0wdTKMDyo"]]

=References= 
<references />
=What links here?= 
[[include page="Winter" component="backlinks" limit="60"]]
**[[Engines|Up one Level]]**