Ciekce / Stormphrax

UCI chess engine, with NNUE trained from zero knowledge
GNU General Public License v3.0
51 stars 11 forks source link
# Stormphrax [![License][license-badge]][license-link] [![GitHub release (latest by date)][release-badge]][release-link] [![Commits since latest release][commits-badge]][commits-link] ![LGBTQ+ friendly][lgbtqp-badge] ![trans rights][trans-rights-badge]

a work-in-progress UCI chess and chess960 engine, with NNUE evaluation trained from zero knowledge starting with random weights

this project is a continuation of my HCE engine Polaris

Strength

Version CCRL 40/15 CCRL Blitz CCRL 40/2 FRC CEGT 40/4 MCERL
5.0.0 - - - - -
4.1.0 3484 - 3802 - -
4.0.0 3476 3566 3775 3440 3542
3.0.0 3408 3491 3691 - 3495
2.0.0 3399 3481 3671 3339 3482
1.0.0 3318 3374 3540 3235 3346

Features

To-do

UCI options

Name Type Default value Valid values Description
Hash integer 64 [1, 131072] Memory allocated to the transposition table (in MB).
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 Stormphrax plays Chess960 instead of standard chess.
UCI_ShowWDL check true false, true Whether Stormphrax displays predicted win/draw/loss probabilities in UCI output.
ShowCurrMove check false false, true Whether Stormphrax starts printing the move currently being searched after a short delay.
Move Overhead integer 10 [0, 50000] Amount of time Stormphrax assumes to be lost to overhead when making a move (in ms).
EnableWeirdTCs check false false, true Whether unusual time controls (movestogo != 0, or increment = 0) are enabled. Enabling this option means you recognise that Stormphrax is neither designed for nor tested with these TCs, and is likely to perform worse than under X+Y.
SyzygyPath string <empty> any path, or <empty> 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.
EvalFile string <internal> any path, or <internal> NNUE file to use for evaluation.

Builds

vnni512: requires BMI2, AVX-512 and VNNI (Zen 4/Cascade Lake-SP/Rocket Lake and up)
avx512: requires BMI2 and AVX-512 (Skylake-X, Cannon Lake)
avx2-bmi2: requires BMI2 and AVX2 and assumes fast pext and pdep (i.e. no Bulldozer, Piledriver, Steamroller, Excavator, Zen 1, Zen+ or Zen 2)
avx2: requires BMI and AVX2 - primarily useful for pre-Zen 3 AMD CPUs back to Excavator
sse41-popcnt: needs SSE 4.1 and popcnt - for older x64 CPUs

If in doubt, compare the avx2-bmi2 and avx2 binaries and pick the one that's faster. BMI2 will always be faster on Intel CPUs.

Alternatively, build the makefile target native for a binary tuned for your specific CPU (see below)

Note:

Building

Requires Make and a competent C++20 compiler that supports LTO. GCC is not currently supported, so the usual compiler is Clang. MSVC explicitly does not work.

> make <BUILD> CXX=<COMPILER>

By default, the makefile builds binaries with profile-guided optimisation (PGO). To disable this, pass PGO=off. When using Clang with PGO enabled, llvm-profdata must be in your PATH.

Credit

Stormphrax uses Fathom for tablebase probing, licensed under the MIT license, and a slightly modified version of incbin for embedding neural network files, under the Unlicense.

Stormphrax is tested on this OpenBench instance - thanks to all the people there, SP would be much weaker without your support :3

In no particular order, these engines have been notable sources of ideas or inspiration:

Stormphrax's current networks are trained with bullet. Previous networks were trained with Marlinflow.

The name "Stormphrax" is a reference to the excellent Edge Chronicles :)