Skip to content
Choose a tag to compare

This is release 0.6.0, rated about 90 Elo in self play over the previous version 0.5.0.

Changes from the previous version:

  • Compilation with more recent GHC / Stack (GHC 8.8.4 / stack LTS-16.20)
  • New eval terms: weak pawns, optimized
  • Eval parameters & weights structures generated with Template Haskell
  • Fixed extended futility pruning up to depth 6
  • Simplification of time management and helper threads
  • Better inlining and strictness in code
  • Search depth 1 normally (no full window)
  • SelfPlay: add new parameter for nodes budget
  • Search time reduction for first move
  • Use only one CPU for all threads (search + helper)
  • Two abort times, unlimited extensions
  • Killer list with 3 killers
  • Better history scale when maximum reached
  • Higher value for king safety
  • Better speed, especially in QS

Binaries are provided for Windows 10 (SSE4.2 and SSSE3) and Linux (SSE4.2), all 64 bit (edited on May 2nd, further Windows binary).

Choose a tag to compare

This is release 0.5.0, which has again many improvements in eval & search, as well as some technical optimizations. In self play it's about 140 elo points better than version 0.4.0.

I created binaries for Win7 (32 bit, 64 bit and 64 bit+SSE4.2), Win10 (32 bit, 64 bit and 64 bit+SSE4.2) and Linux (64 bit and 64 bit+SSE4.2).

Functional changes:

In eval:

  • Optimize eval weights
  • Mobility calculation change (Stockfish style)
  • Eval new terms:
    -- weak pawns attacks
    -- bishop pawns
    -- king on pawn(s) - inspired from Stockfish
    -- rook on 7th line (when opponent king on 8th)
  • Simplify king safety, king placement change, king safety sharper formula
  • Bishop value, SEE piece value changes

In search:

  • No null move search when STM has no piece
  • Null move only for depth >= 2 (idea from Sven Schule)
  • LMR even for extended moves
  • LMR also in PV node
  • Correct LMR amplitude: distance to last capture
  • Don't prune nor LMR passed pawn moves
  • Search extensions when capturing last queen/rook
  • When pruning, we want to have at least 1 legal move,
  • QS: search quiet checking moves - only on frontier and with SEE >= 0
  • QS: no limit for check escapes, but delta pruning applies
  • QS: Delta pruning refactoring for speed

Other changes & corrections:

  • Time management based on logistic regression + corrections & adjustments
  • Correct return from time abort: do not change tables
  • Mate score correction
  • Correct draft statistics
  • TT update: final only after position search
  • TT update: best so far exact score as lower limit
  • Random initialised history (small numbers)
Choose a tag to compare

This version contains many improvements in search, a few in eval, and technical optimizations and is about 175 ELO better than the previous released version 0.3.0 in self play.

The binaries are for Win32, Win64 with/without SSE4.2, and Linux 64 with/without SSE4.2.

Changes since version 0.3.0 (in reverse order):,, Barbarossa-NB.tex added
Cabal file new formatted
TT in QS: read-only
Simplify search code:

  • Fen collection controlled by a flag
  • Delete the indent functionality
  • Delete unnecessary GHC extensions
  • Delete unnecessary comments

Correct eval of en prise
QS delta: simplified + constant margin
QS delta cut level: best piece of the opponent
Search: leaner node state
Purify some functions used in search
Position is part of node state
Eval: space nonlinear
Add space evaluation inspired by Stockfish
History: smaller cache footprint with Word32
Array of Structure for slider move generation
Passed pawn distance to kings: advance square, non-linear
Changes in search statistics
Search: no pv continuation in node state
Simplify search: a/b just integers (not paths)
Small optimisations: doMove, mvBit, uBit
Redefine center for eval, small parameter changes
Eval: king openness modified
Modified variable futility scheme
Eval: some pawn related params adjusted
History sort: max 128 moves, smaller history index
History: use unboxed vectors to sort moves
History sort: direct sort for depth 1
Eval: king/passed proximity tuned
Eval: pawn proxy different from king placement
Eval: King placement rescaled & more aggresive
Dynamic history sort: later lookup => later scores
TT score/move: history for beta cut
Small correction in search: timeout abort
Futility reduction: 4 for zero window
Eval: higher king bonus for promo squares
White space & comments, viztree functionality is deleted
Variation in futility pruning margins
Null move only in cut nodes, node type change in re-search
QS: check escapes reduced
Faster pos update, no eval in QS when check
Lazy bitboards of position separated
Eval change: mobility knight & bishop (tuned)
Correct TT store when failed low in zero window search
Switch build tools to GHC 7.10.2 & stack

Choose a tag to compare

This version contains many improvements in search and eval (see below) and is about 200 ELO better than the previous released version 0.2.0 (in self play).

The binaries are for Win32, Win64 with/without SSE4.2, and Linux 64 with/without SSE4.2.

Changes from version 0.2.0 in reverse order:
- Piece values & advanced pawns inspired by a HGM comment
- King safety shift (more weight)
- Variable LMR, more aggressive, LMR table: smoother with doubles
- King safety only when attacking queen present, small speedup
- Square attacks in opponent half get bonus; tuned
- Less time for beginning plys
- Correct castles: only squares passed by the king can't be in check
- Correct promotion captures: were generated twice
- Correct 32 bin overflow in passed pawn evaluation
- Small king safety change, few compile warnings
- Eval rewrite for faster calculation
- State monad changes: state is strict
- Eval tuned by self play
- Smaller time factor
- Variable null move reduction
- Material values "inspired" by a comment of Larry Kaufman
- Simplify futility pruned moves
- Futility pruning with variable margin
- Futility prunning also in the alpha-beta part (last 2 plys)
- Correct killer move when null move threat
- Moves sort all time
- Loosing captures last
- Correct node types
- Bad captures at the end
- Backward pawns implemented & tuned
- No pre-sorting of the capture fields in MVVLVA
- Correct capture sorting (MVVLVA)
- Technical optimisation of SEE + some cleanup
- Further compiler warnings

Choose a tag to compare

Many improvements in evaluation and search.
This version is about 250 ELO better than previous released version 0.1.0.

The precompiled binaries are 64 bit with popcount (SSE4.2) for Windows and Linux, and 32 bit for Windows.

Choose a tag to compare

Barbarossa 0.1.0 release:

  • corrected en-passant capture generation
  • corrected play in some simple finals (could not give mate when in advantage)
  • small speed improvements

I attached a windows 32 binary and 2 linux versions (compiled on ubuntu): one generic and one for cpus with popcount.