Skip to content

Releases: Sava2008/Ferrous

Ferrous v0.3.1

12 Mar 14:06

Choose a tag to compare

v0.3.1 Update Description

This update was dedicated to eliminate as many performance bottlenecks as possible. Here are the transitions:

  • switched from Vectors to size-fixed arrays for move generation and scoring
  • switched from legal to pseudo-legal moves, which means that now moves are validated during the search rather than generation
  • removed CheckInfo and PinInfo structs due to shifted paradigm of move generation, but adding them back for validating the player's moves is still being considered
  • abolished array lookups everywhere where it was unnecessary and simple bitboard comparison was trivial
  • added color parameter to many places in order to reduce the amount of branches in match expressions
  • switched the engine from depth 7-8 to 8-9
  • added incremental evaluation
  • reduced the amount of operations in move make-unmake methods

Comparison to Ferrous v0.3.0

benchmark Ferrous v0.3.0 Ferrous v0.3.1
nodes/sec 800k-1.2m 2.5m-3.5m
BF 9.9-10.6 8.7-9.9
depth 7-8 (fixed) 8-9 (fixed)

Overall speedup ~7.2x

Ferrous v0.3.0

28 Feb 18:13

Choose a tag to compare

I am happy to announce Ferrous v0.3.0! It introduces a few new features:

  1. bitboards along with magic bitboards
  2. PieceMove struct was replaced with moves encoded in u16 integers
  3. pre-computed tables to avoid calculating predictable data on the fly
  4. proper move unmaking
  5. move tuning was added to increase the impact of alpha beta pruning
  6. improved evaluation
  7. raw fen-to-board and board-to-fen converters
  8. killer moves

outcomes

currently the performance is estimated to be around 900k-1m nodes/sec, but Ferrous searches widely, not deeply due to bad move tuning. estimated elo approx. 1600-1650 on lichess.org

v0.2.0-alpha

07 Nov 18:33

Choose a tag to compare

v0.2.0-alpha Pre-release
Pre-release

0.2.0-alpha

The 0.2.0-alpha is the release which provides massive optimization. The naive cloning of the entire board struct was substituted with make-unmake methodology. It restores the necessary fields of the Board struct on the previous move by:

  • undoing the physical move of a piece
  • regenerating the captured piece (if present)
  • undoing castling, promotion and en passant (if something of these was performed)
  • restoring the pieces locations on both sides
    I don't recommend you update though, because it's full of bugs, and inconsistencies, which lead to performance overhead. the next version will be 0.3.0, which will include bitboards, as debugging hashsets, hashmaps, arrays and vectors is too much of work

How the changes affect performance

The amount of operations didn't decrease much. I removed unnecessary vision recalculation, optimizing which is the next step in speed boost for Ferrous. Still, the time required for the engine to decide on a move decreased by 2-3 times on my machine.

v0.1.0

27 Oct 07:59
08eaa37

Choose a tag to compare

The very first release of Ferrous

what was added:

  • fully functional chess
  • engine that plays chess, and uses a alpha beta pruning algorithm to search for the best move
  • fen converter

what is planned in the next versions

  • fen to board converter
  • switching colors, so a user can play black as well
  • make-unmake logic, so that the board isn't to be cloned for each move
  • bitboards
  • threading
  • opening book
  • sounds
  • other bugfixes