Releases: Orbital-Web/Raphael
v1.7 SEE move ordering and pruning
Changelog
- Added time and nps to info
- Added uci hash size options
v1.7
- Changed MVV/LVA to use index of attacker instead of value
- Implemented good capture bonus for above neutral SEE score
- Implemented SEE pruning in quiescence search for below neutral SEE
- Added one reply extension
Performance
v1.7
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜ v1.0
[374 / 20 / 6]
v1.7
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜⬜⬜⬜🟥🟥🟥🟥🟥 v1.6
[190 / 108 / 102]
ELO increase: 68
v1.6 Tons of bug releases
I was originally planning to implement SEE in v1.6 but I will postpone that to v1.7 considering how many bugs I found and how much has changed.
Changelog
- Fixed MAJOR tt indexing bug (it was essentially only using 2 slots...) <- Major Headache cause here
- Added draw detection before tt indexing to prevent 3FR draws in negamax
bestmove
is initialized to the first move (usually hash move) to prevent empty moves in ttitermove
is set tobestmove
at root ply to prevent returning no moves due to some wacky interactions with pondering at low time- Added red overlay (underlay?) when the king is in check
- Added time increment option
v1.6
- Now counts number of nodes visited
- UCI prints PV and moves until mate
- Implemented mate depth pruning
- Pondering uses PV to predict opponent's move instead of wasting time recalculating it. This also increases the accuracy of the opponent's move guess as the PV generally has results from a higher depth.
- It now checks for timeover every 2048 nodes instead of creating a new thread for time keeping (performance increase too?)
- It now spends more time thinking overall and uses the most time in the early-middle games
- Increased passed pawn bonus, especially when it's closer to promotion
- Move ordering with tt move (as opposed to using
itermove
)
Performance
v1.6
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜🟥 v1.0
[355 / 27 / 18]
v1.6
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜⬜⬜🟥🟥🟥🟥 v1.5
[251 / 77 / 72]
v1.5: Late move reductions, history pruning, and mobility
Changelog
- Added uci support (finally). Do note that it hasn't been tested extensively enough.
- Time is now handled as an int (ms), rather than a float
v1.5
- Implemented late move reductions
- Implemented history pruning
- Implemented mobility evaluation
- Now counts number of nodes visited
Performance
v1.5
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜🟥🟥 v1.0
[344 / 23 / 43]
v1.5
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜⬜🟥🟥🟥🟥🟥🟥 v1.4
[211 / 62 / 127]
v1.4 Check Extensions
Changelog
- Added code for extracting win/draw/losses as well as the reasons from the pgn file
v1.4
- Fixed killer heuristic bug storing on captures and promotions instead of the opposite
- Removed clearing of killer heuristics after every iterative deepening
- Switched to fail-hard search for consistency with online resources
- Implemented check and passed pawn (2nd or 7th rank) extension
Performance
v1.4
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜🟥🟥 v1.0
[333 / 25 / 42]
v1.4
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜🟥🟥🟥🟥🟥🟥 v1.3
[244 / 40 / 116]
v1.3 Better Pawn Structures, Killers, and Aspiration Window
Changelog
- Added supports for drawing arrows with the rmb
- Updated the
HumanPlayer
to allow drag and drop for move selection - Deleted
chess-library
and added it as a submodules instead
v1.3
- Implemented passed pawn detection and added evaluation based on the distance of the passed pawn to the promotion rank
- Implemented isolated pawn detection. A penalty is applied if there are no pawns in adjacent files within a 5 rank region (2 up/down)
- Implemented Killer heuristics for better move ordering using beta-cutoffs
- Implemented Aspiration Windows for more aggressive pruning
The pawn evaluation and killer heuristics led to a large increase in ELO (about 80 compared to v1.2
), while the aspiration window led to an addition 20 or so ELOs.
Performance
v1.3
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜🟥🟥🟥🟥 v1.0
[301 / 23 / 76]
v1.3
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜🟥🟥🟥🟥🟥🟥🟥 v1.2
[224 / 38 / 138]
v1.2: Pondering implementation
Changelog
- Version number no longer contains patch numbers (e.g.,
v1.0.0
->v1.0
) GameEngine
now callsponder()
of the other player- Updated
main.cpp
for more intuitive command-line arguments - Previous releases are no longer compatible for these reasons...
Note: In future releases, only 3 versions will be included: v1.0
, the newest version, and its previous version (to run 2 comparisons).
To use previous versions, please refer to previous releases (there may be backwards-compatibility issues)
v1.2
- Implemented pondering, where the engine will predict the opponent's best move at a depth of 4 and use the remaining time to compute its best response. If the move played is the predicted move, it will continue searching with at higher depths with the best response. Otherwise it will search normally.
Performance
v1.2
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜🟥🟥🟥🟥🟥🟥🟥🟥 v1.1
[214 / 30 / 166]
v1.2
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜🟥🟥🟥🟥🟥🟥 v1.0
[253 / 34 / 113]
Version 1.1.0 Released: Transposition and Iterative Deepening Fix
Changelog
v1.1.0
- No longer discards iterative deepening results like what Sebastian Lague did
- Fixed transposition checkmate evaluation (as explained in this video)
v1.0.0
- Updated code to reflect changes to the transposition table
This means that v1.0.0
from the previous release is no longer compatible with v1.1.0
of this release, nor v1.0.0
of this release. These sorts of backward-compatibility issues should no longer happen in future releases of the same major version number.
Performance
v1.1.0
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜🟥🟥🟥🟥🟥🟥 v1.0.0
[245 / 39 / 116]
Version 1 Release!
Version 1 now contains the actual chess engine, equipped with the basic algorithms and optimizations to make the engine reasonably competent. It can now be used by setting the player type to Raphaelv1.0.0
in the command line.
It's features are:
General Optimizations
- Alpha-beta pruning
- Move ordering
- Transposition table
- Iterative deepening
- Quiescence with captures
Evaluation
- Material cost
- Piece-square tables
- Endgame King proximity
Move Ordering
- Captures
- Promotions
More improvements would be added soon (though v1.0.0
will stay, so their performances can be compared)
Bug Fixes
Changelog
- Fixed bug where move selection would not work when
p1_is_white
was set to false. - Fixed bug where timer would not update when running multiple matches consecutively.
- Fixed bug where move selection would work for the wrong side with various
p1_is_white
andstart_fen
combinations.
C++ Chess Player
A Chess Game Engine (not AI) with an extendable player class to modify the move selection.
Newer versions will use this to implement a Chess Engine Player.
Current features are 3 classes: cge::GameEngine
and cge::GamePlayer
, and cge::HumanPlayer
.
cge::GameEngine
can be initialized with 2 cge::GamePlayer
instances. Calling run_match()
with the appropriate arguments will start a match between these two players. In the future, there will also be a compare_players()
method that will run several games with a set starting position to evaluate which player is stronger.
cge::GamePlayer
is a pure virtual class which has the abstract method get_move()
which will run asynchronously to return a move.
cge::HumanPlayer
extends the cge::GamePlayer
class and overrides the get_move()
method to return a move once the player clicks on the window and selects a move (similar to playing chess on Lichess).
It uses SFML for the graphics and audio, and Disservin/chess-library to control the game logic.