rn5f107s2 / Molybdenum

Molybdenum is a chess engine written in C++.
GNU General Public License v3.0
7 stars 2 forks source link

Molybdenum

Molybdenum is a chess engine written in C++.

Usage

Molybdenum supports the UCI-Protocol, the easiest way to use Molybdenum is to use a UCI compliant GUI such as cutechess. However, if you wish you can use Molybdenum by directly communicating with it through the command line. Please note that incorrect inputs may lead to crashes or undefined behaviour, therefore it's not recommended to do communicate via the commandline without prior knowledge of the UCI Protocol, but some important commands to know are:

    Position fen [FEN]

to set the current position to a give fen and

    go movetime [time for this move]
    go depth [depth]
    go nodes [nodes]

or

    go infinite

to search a position with the respective limits. The output will be in the form of

    info depth [current depth] 
    currmove [the current move deemed the best] 
    score cp [the current evaluation in centipawns from the side to move perspective]
    nodes [the nodes searched]
    time [the time searched in milliseconds]
    nps [the nodes searched per second]
    pv [the line the engine deems to be the outcome with best play from both sides]

and after running out of the given search limit:

    bestmove [the move deemed to be the best one]

Something to note is that every move given as output will be in the form of

    [from square of the move][to square of the move]

Some additional commands that may be of use and are supported by Molybdenum but are not specified in the UCI Protocol are:

    bench

this performs a fixed depth searched on a few positions,

    d

this prints the current board state as well as a few additional informations and

    eval

this prints the current evaluation from the perspective of the side to move.

Evaluation

The currently used evaluation function is a Neural Network of the Architecture (768->32)x2->1 trained using exclusively own Selfplay Data. All nets were trained using the bullet Trainer, however due to the Board representation some features are flipped horizontally when training the nets, therefore when using on of those nets in another engine they probably need to be flipped again.

Credits

During my journey creating this there were a lot of people / ressources that helped me along the way, notably