Skip to content

Releases: Orbital-Web/Raphael

v1.7 SEE move ordering and pruning

27 Aug 03:34
Compare
Choose a tag to compare

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

21 Aug 00:45
Compare
Choose a tag to compare

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 tt
  • itermove is set to bestmove 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

16 Aug 06:56
Compare
Choose a tag to compare

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

10 Aug 01:12
Compare
Choose a tag to compare

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

05 Aug 02:10
Compare
Choose a tag to compare

Changelog

  • Added supports for drawing arrows with the rmb
  • Updated the HumanPlayer to allow drag and drop for move selection
  • Deletedchess-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

24 Jul 05:28
Compare
Choose a tag to compare

Changelog

  • Version number no longer contains patch numbers (e.g., v1.0.0 -> v1.0)
  • GameEngine now calls ponder() 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

23 Jul 12:18
Compare
Choose a tag to compare

Changelog

v1.1.0

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!

19 Jul 16:47
Compare
Choose a tag to compare

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

17 Jul 07:56
674b617
Compare
Choose a tag to compare

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 and start_fen combinations.

C++ Chess Player

07 Jul 13:55
Compare
Choose a tag to compare

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.