Starzix - C++ chess engine
Elo
CCRL Blitz: 3626 (#24/753)
CCRL Rapid: 3521 (#27/597)
Ipman Bullet: 3423 (#38/51)
Stefan Pohl SPCC: 3544 (#71/88)
How to compile
Have clang++ installed and run make
UCI (Universal Chess Interface)
Options
-
Hash (int, default 32, 1 to 65536) - transposition table size in MB
-
Threads (int, default 1, 1 to 256) - search threads
Extra commands
-
display
-
eval
-
perft \<depth>
-
perftsplit \<depth>
-
bench \<depth>
-
makemove \<move>
-
undomove
Features
Board
- Bitboards
- Zobrist hashing
- Pseudolegal move gen (magic bitboards and lookup tables)
- Copymake make/undo move
NNUE evaluation
- (768x2x5 -> 1024)x2 -> 1
- Inputs mirrored along vertical axis based on king square
- 5 enemy queen input buckets
- Lc0 data
- Trained with my trainer
Search
- Staged move gen
- Fail-soft Negamax
- Principal variation search
- Iterative deepening
- Quiescence search
- Aspiration windows
- Transposition table
- Alpha-beta pruning
- Reverse futility pruning
- Razoring
- Null move pruning
- Probcut
- Late move pruning
- Futility pruning
- SEE pruning
- Internal iterative reduction
- Late move reductions
- Singular extensions
- Correction histories
- Cuckoo (detect upcoming repetition)
- Time management (hard limit, soft limit, nodes TM)
- Multithreading / Lazy SMP
Move ordering
- TT move
- Good noisy moves by SEE + MVVLVA
- Killer move
- Quiet moves by history
- Bad noisy moves (underpromotions last)
Moves history
- Main history
- Continuation histories (1 ply, 2 ply, 4 ply)
- Noisy history
- History malus and gravity