Releases: Sava2008/Ferrous
Ferrous v0.3.1
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
colorparameter to many places in order to reduce the amount of branches inmatchexpressions - 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
I am happy to announce Ferrous v0.3.0! It introduces a few new features:
- bitboards along with magic bitboards
- PieceMove struct was replaced with moves encoded in u16 integers
- pre-computed tables to avoid calculating predictable data on the fly
- proper move unmaking
- move tuning was added to increase the impact of alpha beta pruning
- improved evaluation
- raw fen-to-board and board-to-fen converters
- 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
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
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