Skip to content

WillChing01/Pingu

Repository files navigation

Pingu

License Release Commits

Pingu is a chess engine which communicates via UCI protocol.

Usage

Pingu is a command-line program - in order to interact with other engines or people it is recommended to use a suitable GUI e.g. cutechess.

When running Pingu in the command line, type 'help' for a list of available commands.

Pingu accepts many of the usual UCI commands (go/stop/position etc.) and it has some additional custom commands.

Rating

Version CCRL Blitz CCRL 40/15
5.0.0 - 3186
4.0.0 2997 3019
3.0.0 - 2820
2.0.0 2527 2614
1.0.0 2158 -

More information on CCRL.

Features

Move generation

  • Staged move generation
  • Bitboard representation
  • Plain magic bitboards

Move ordering

  • Root search
    1. PV move
    2. Others ordered by descending subtree size
  • Main search
    1. Hash move
    2. Good captures + promotions
    3. Killers
    4. Bad captures
    5. Quiet moves
  • Quiescence search
    1. Good captures + promotions
    2. Check evasions
  • Winning captures ordered by MVV/LVA
  • Losing captures ordered by static exchange evaluation
  • Quiet moves ordered by history, counter moves history and piece square tables

Search

  • Root search
    • Iterative deepening
    • Aspiration windows
    • Principal variation search
  • Main search
    • Fail-soft alpha-beta
    • Principal variation search
    • Reverse futility pruning
    • Null move pruning
    • Internal iterative reduction
    • Late move reductions
    • Futility pruning
    • Late move pruning
    • Repetition detection
    • Transposition tables
      1. Always replace
      2. Depth-preferred
  • Quiescence search
    • Fail-soft alpha-beta
    • Stand-pat
    • Forward prune SEE < 0
  • Basic time management
  • Parallel search with Lazy SMP algorithm

Evaluation

NNUE with HalfKA feature set and subnetworks indexed by piece count.

Architecture: 2 x (45056 -> 32) -> 1

Trained with PyTorch and a custom dataloader written in C++ (source code in /nnue).

Final model uses quantized weights and AVX2 intrinsics for optimal performance.

All NNUE versions of Pingu were trained with the engine's own self-play data. The process is described in nnue.md, and more recently in nnue_2.md and nnue_3.md.

Early HCE versions of Pingu were Texel-tuned using self-play data from Ethereal, obtained from this forum post. The process is described in evaluation_tuning.md.

Thanks

Chess Programming Wiki for its useful resources.

CCRL for testing Pingu.

About

UCI Chess Engine

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors