After more than 3 years of silence, through the pandemic where I've worked almost nothing to the engine, I'm happy to announce a new release of AdaChess, stable and ready for testing before the "official" release. The engine is very stable but contains a couple of minor bugs that do not affect the program in a major way.
The engine (source code and windows executable) can be downloaded from here: https://www.adachess.com/download
The estimated rank is 2200-2400 Elo - I hope so, after so much work!
Note: if you experience some problem with the executable you have to compile the engine yourself, via the gnat compiler, with the release flag (contact me, in this case). This may happes due to my laptop architecture. Please inform me if this happes, thansk!
Please report me any kind of bug or strange behavior, so I can fix them
PS: good luck and enjoy!
Features implemented
This release contains many important news listed below.
- The overall source code has been completely refactored and the file system updated to a more engineering version.
- A new I/O routines substitute the old and simple one providing many useful internal features
- The communication protocol has been rewritten to provide base for a future support for the UCI protocol (that is planned in the next release)
The old multi-dimensional array of moves has been replaced to a more efficient single dimensional array, a move stack (like probably every other engine has) - Support the following notation: Winboard (e2e4, g7g8q, e1g1, ..), algebraic (Nf4, Bcxf5+, O-O, ..), long algebraic (Nf1-g3, Qe1xe7+, ...) and the ICCF (see: https://en.wikipedia.org/wiki/ICCF_numeric_notation). Specify the notation at startup via command line
- Fixed a bug with notation on moves that gives double-check (was a single "+", now is "++")
- A simple easter-egg has been added - find it by yourself!
- Statistical data has been added to the Divide command (see below)
- Both perft and divide can output with any of the supported notation
- The opening book code has been rewritten: the engine support the simple opening book format and can use any PGN as opening book. It can load multiple opening book. The current release comes with a pgn example, the games of Alechine. Note that the PGN parser is very slow, be carefoul in running AdaChess with huge PGN.
- The evaluation function has been completely rewritten to be more efficient (it is still a work in progress, though). It implements a more advanced pawn structure evaluation and improved mobility, fixed king-safety and some small further improvement. It does not detect anymore draw by insufficient material (will be restored soon)
- The time control, to control the chess clock, has been completely rewritten to support any rule of chess. It contains a minor bug that will be fixed for the next release
- SEE: The static exchange evaluation has been rewritten. AdaChess implements now a more intelligent algorithm based on attacks/defends map
- Null move observation improved, adding information for mate threath
- Fixed the futility pruning
- Added razoring and reverse futility pruning
- Move generator for quiescence rewritten taking advantage of the engine smar move generator. The quiescence generates not only captures, but every move of tactical importance
- Added the aspiration window algorithm to the "Think" functionality
- Fix the ponder engine (still have some issue, nothing serious)
- A simple, very simple, multi-pv algorithm has been introduced. Specify the amount the pv via command line
- Algorithm to mirror position implemented
- Many other small improvement and optimizations...
Example of command line instructions:
To start the engine with a specific opening book just run with (as example)
Code: Select all
adachess.exe --opening-book Alechine.pgn --opening-book book.pgn
To start the engine with a desired notation run (as example)
Code: Select all
adachess.exe --notation san
To start the engine with a certain Mb for the hash table (for example)
Code: Select all
adachess.exe --hash 32
To run the engine with multiple pv-search (for example)
Code: Select all
adachess.exe --multi-pv 2
Example of Divide command with algebraic notation from a generic position:
Code: Select all
AdaChess v.3.9.0-dev => divide 4
Move Nodes Captures En-Passant Castles Promotions Checks Discovery C. Double C. Checkmates
Kh1 54982 4074 0 0 0 575 0 0 73
Kf1 52277 3976 0 0 0 2176 0 0 0
f3 51510 3989 0 0 0 1843 0 0 41
f4 51627 4040 0 0 0 1812 0 0 29
g3 52443 3967 0 0 0 897 0 0 0
g4 54830 4239 0 0 0 1049 1 0 0
Rd8 46059 5303 0 0 0 830 0 0 59
...