Technical Specifications

Includes

  • UCI Protocol (see UCI Feature Support)
  • Magic Bitboards
  • Alpha / Beta Negamax Search Algorithm
  • Principal Variation Search (PVS)
  • MultiPV (single, non-PVS search)
  • Hash / Transposition Table
  • Futility Pruning
  • Null Move Pruning
  • Late Move Pruning (LMP)
  • Late Move Reductions (LMR)
  • Quiet Search (quiescence search resolves all checks and captures)
  • Staged Move Generation
  • Move Prioritization
    • Best Move (from hash table)
    • Captures by most valuable victim, least valuable attacker (MVV / LVA)
    • Pawn Promotion
    • Killer Moves
    • History Heuristic
  • Static Evaluation
    • Tapered (interpolated) between middlegame and endgame values
    • Score scaled down for difficult to win endgames and as game approaches draw by 50 moves (100 ply) without a capture or pawn move
    • Recognizes mate, stalemate, draw by repetition, and draw by insufficient material
    • Separate scoring for pawnless, drawish endgames
    • Separate scoring for simple endgames (K vrs KP, K vrs KBN, K vrs KQ or KR)
    • Material Value
    • Piece Location (good and bad squares)
    • Pawns
      • Passed
      • Passed and escorted by king
      • Passed and free
      • Passed and unstoppable
    • Piece Mobility
      • For each individual knight, bishop, rook, and queen (encouraging development of all pieces)
      • Non-Linearly Scaled
    • King Safety
      • Near a semi-open file
      • Near squares attacked by opponent’s pieces
      • Non-Linearly Scaled
    • Bishop Pair
  • Tapered Strength Calibration (interpolated between 200 ELO intervals)
    • Positional Knowledge (static evaluation parameters listed above)
    • Nodes Per Second (search speed)
    • Move Error (randomly select best or sub-optimal move from MultiPV search)
    • Blunder Error (same as above but more serious error)
    • Blunder Percent (chance per move of blundering)
  • C# Programming Language
  • Compiled as a self-contained application using .NET 5
  • Windows Binary Executables (see Downloads page)
  • Clean Code

    • Procedural Code
    • Extensively Commented
    • Complies with JetBrains ReSharper rules
    • Hosted by GitHub

Does Not Include

  • Object Oriented Design (uses classes but no interfaces, derived types, or polymorphism)
  • Aspiration Windows (Why Not?)
  • Multi Threading (other than a dedicated thread that reads standard input stream)
  • Any heap memory allocations during search
  • Any floating point math during search (integer math only, prefer division by power of 2 so compiler transforms to bit shift)
  • Any list access during search (arrays are faster)
  • Any foreach loops (foreach allocates an enumerator)
  • Any lambda methods (lambdas allocate a delegate)
  • Linux or Mac Binary Executables (because code is built on .NET 5, you may compile for these platforms if you wish)

Comments are closed.