I develop and play with Winter exclusively on Linux. If you are on Linux you can clone the git repo and call "make" or "make no_bmi" in order to build the engine. Keep in mind that the program expects to find the params and search_params directories containing the evaluation and search parameters respectively.
If you are on Windows or OSX I assume compilation shouldn't be too hard as the source does not rely on any libraries aside from STL which is used extensively (including std::thread in order to poll for input), however you may need to do a bit more work to get things running and I really am not an expert.
General Features
- Rating Guesstimate: 2500 CCRL (a bit less wouldn't surprise me)
- Exclusively relies on STL
- Nice print command =)
- Perft command
- UCI protocol
- Single threaded search, so it is quite stable
- Alpha Beta search with PVS
- Fail hard framework... Not completely strict about it.
- Move ordering is based on the linear part of a Logistic Regression classifier
- The classifier is trained via temporal difference learning to predict whether a move will return beta
- Classifier considers TT moves, killers, move types, move source and destinations, capture targets, SEE for interesting moves, square of the last move piece, checks and changes between forcing and unforcing moves (a capture is more likely after another capture)
- Null Move Reductions
- Static Null Move Pruning
- Quiescence Search
- Static Exchange Evaluation
- Late Move Reductions
- Futility Pruning
- Non standard approach
- Relies on a mixture model
- Assumes positions encountered in search come from some set of k Gaussians
- Mixture model is trained via EM algorithm either on 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.
- Parameter weights are trained via a mixture of reinforcement (temporal difference) learning and supervised learning
- Pure supervised learning leads to a significantly weaker engine (around 50 elo iirc... been a while since I last tested this)
- Pure temporal difference learning wouldn't work how I have it implemented at the moment, but I imagine should be beneficial
- We are minimizing the cross entropy loss of a Logistic Regression model for each of the k Gaussians. I also tried an Ordered Logit Model with equivalent strength.
- Training converges very fast as we have a linear model at the heart
- Parameters focus more on piece play and activity and not so much on the endgame and pawn structures. This leads to Winter loving very active play and speculative material sacrifices being extremely common.
- Modular code structure makes it very easy to add new parameters
