this is a hobby project made by two passionate about informatic.
currently, the engine includes:
-
Evaluation:
- nnue
- (60144+768x4hm -> 384-pw)x2 -> (16 -> 32 -> 1)x8
- 13 iterations from random net
- trained on self-gen data using bullet (if you want the data used to train it, you can directly ask one of us)
- correction history :
- pawn
- previous move
- continuation move
- minor+king pieces
- material scaling
- nnue
-
Search:
- iterative Deepening
- quiescence search
- aspiration window
- enhanced forward pruning
- Reduction:
- late move reduction :
- log base
- history
- tactical moves
- late move reduction :
- pruning:
- null move pruning
- reverse futility pruning (improving and not improving)
- razoring at depth 1
- late move pruning
- history pruning
- capture history pruning
- futility pruning
- SEE pruning in QS
- transposition table
- buckets of 3 entries
- move ordering:
- killer move
- PV move
- SEE
- MVV-LVA
- history heuristic
- capthist
- singular extension :
- singular
- double
- negative
- cutnode negext
- IIR
-
most of the search parameters has been tuned over 2k iterations of 16 40+0.4 games
-
movegen
- use bitboards
- fully legal movegen
-
UCI protocol:
- fancy commands:
- version (give the commit's hash when it was compiled)
- arch (give the arch used to compile)
- bench (test of 48 positions, which give the node count/depth sum to compare search, also give average nps)
- runQ (run quiescnce search on the given position)
- print (print the current position [after the moves])
- position kiwipete (set kiwipete's position)
- fancy commands:
-
option :
- SyzygyPath: path to Syzygy tablebase files
- SyzygyProbeDepth: minimum search depth to probe tablebases
- SyzygyProbeLimit: maximum piece count to probe (0–7)
- TB scoring: WIN = 20000 - ply, LOSS = -20000 + ply, DRAW = 0; ply adjustment prefers faster wins and slower losses; cursed win/blessed loss are treated as draws since the 50-move rule makes them unachievable in practice
- the other ones should be known, refer to the stockfish readme
-
syzygy probing is done thanks to a copy of Fathom from : https://github.com/jdart1/Fathom
-
support multithreading (lazy smp)
-
don't support yet frc, planed for v4
to compile, just run
make prunein the core/ directory, and you will have the executable prune, which contains the engine (so it is moveable)
for the version naming, we currently use the following :
- 3rd digit is only for bug fix versions
- 2nd digit is for elo improvement (for now, we target a +190 elo per release)
- 1st digit is for new features (as smp for v3, or planed frc for v4)
- stockfish discord :
- TM improvement (took some constant from heimdall for init)
- corrhist help (took some constant from sirius for update)
- speedup of the nnue (lizard updates)
- chessprogramming wiki
- warn for new dev, can be outdated, so don't forget to sprt every changes
- especially to :
- swedishchef (the dev from pawnocchio and vine) for helping me debugging the viriformat writer, and giving me some search ideas
- Ciekce, who helped me a lot making working the threat net (by giving me his bullet config, and helping me debugging it)
- Yoshie, who helped me to know some speedup techniques for the ti, directly or by his code
