a UCI chess and chess960 engine
active development on Polaris has ceased in favour of its NNUE successor Stormphrax
| Version | CCRL 40/15 | CCRL Blitz | CCRL 40/2 FRC | MCERL |
|---|---|---|---|---|
| 1.8.x | testing ongoing | 3048 | 2982 | - |
| 1.7.0 | 2927 | 2953 | 2839 | - |
| 1.6.x | 2806 | 2884 | 2745 | - |
| 1.5.0 | 2678 | 2749 | 2508 | 2713 |
| 1.4.x | 2639 | - | 2455 | - |
| 1.3.0 | 2450 | 2512 | N/A | - |
| 1.2.0 | ~2300 (very few games played) | 2330 | N/A | - |
- standard PVS with quiescence search and iterative deepening
- aspiration windows
- check extensions
- countermoves
- futility pruning
- history
- countermove history (1-ply continuation history)
- follow-up history (2-ply continuation history)
- capture history
- internal iterative reduction
- killers (1 per ply)
- late move reductions
- mate distance pruning
- nullmove pruning
- reverse futility pruning
- SEE move ordering and pruning
- Syzygy tablebase support
- Texel-tuned HCE (private tuner because that code hurts me to reread)
- tuner based on Andrew Grant's paper
- tuned on a combination of the Zurichess and lichess-big3-resolved datasets
- BMI2 attacks in the
bmi2build, otherwise fancy black magicpext/pdepfor rookspextfor bishops
- lazy SMP
- tune search constants
- contempt
- make it stronger uwu
| Name | Type | Default value | Valid values | Description |
|---|---|---|---|---|
| Hash | integer | 64 | [1, 131072] | Memory allocated to the transposition table (in MB). Rounded down internally to the next-lowest power of 2. |
| Clear Hash | button | N/A | N/A | Clears the transposition table. |
| Threads | integer | 1 | [1, 2048] | Number of threads used to search. |
| UCI_Chess960 | check | false |
false, true |
Whether Polaris plays Chess960 instead of standard chess. |
| Move Overhead | integer | 10 | [0, 50000] | Amount of time Polaris assumes to be lost to overhead when making a move (in ms). |
| SyzygyPath | string | <empty> | any path | Location of Syzygy tablebases to probe during search. |
| SyzygyProbeDepth | spin | 1 | [1, 255] | Minimum depth to probe Syzygy tablebases at. |
| SyzygyProbeLimit | spin | 7 | [0, 7] | Maximum number of pieces on the board to probe Syzygy tablebases with. |
bmi2: requires BMI2 and assumes fast pext and pdep (i.e. no Zen 1 and 2)
modern: requires BMI (blsi, blsr, tzcnt) - primarily useful for pre-Zen 3 AMD CPUs back to Piledriver
popcnt: just needs popcnt
compat: should run on anything back to an original Core 2
Alternatively, build the CMake target polaris-native for a binary tuned for your specific CPU (see below)
(note that this does not automatically disable pext and pdep for pre-Zen 3 AMD CPUs that implement them in microcode)
- If you have an AMD Zen 1 (Ryzen x 1xxx) or 2 (Ryzen x 2xxx) CPU, use the
modernbuild even though your CPU supports BMI2. These CPUs implement the BMI2 instructionspextandpdepin microcode, which makes them unusably slow for Polaris' purposes. - Builds other than
bmi2are untested and might crash on CPUs lacking newer instructions; I don't have older hardware to test them on.
The makefile is not intended for building by users. It exists purely for OpenBench compliance.
Requires CMake and a competent C++20 compiler (tested with Clang 15 and 16 on Windows, GCC 11 and Clang 15 and 16 on Linux, and Apple Clang 14 on macOS on Apple Silicon)
> cmake -DCMAKE_BUILD_TYPE=Release -S . -B build/
> cmake --build build/ --target polaris-<TARGET>(replace <TARGET> with your preferred target - native/bmi2/modern/popcnt/compat)
If you have a pre-Zen 3 AMD Ryzen CPU (see the notes in Builds above) and want to build the native target, use these commands instead (the second is unchanged):
> cmake -DCMAKE_BUILD_TYPE=Release -DPS_FAST_PEXT=OFF -S . -B build/
> cmake --build build/ --target polaris-nativeDisabling the CMake option PS_FAST_PEXT builds the non-BMI2 attack getters.
Polaris uses Fathom for tablebase probing, licensed under the MIT license.