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
bmi2
build, otherwise fancy black magicpext
/pdep
for rookspext
for 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
modern
build even though your CPU supports BMI2. These CPUs implement the BMI2 instructionspext
andpdep
in microcode, which makes them unusably slow for Polaris' purposes. - Builds other than
bmi2
are 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-native
Disabling the CMake option PS_FAST_PEXT
builds the non-BMI2 attack getters.
Polaris uses Fathom for tablebase probing, licensed under the MIT license.