zxul767 / pawn

A chess engine and machine learning testbed
4 stars 2 forks source link
chess chess-engine machine-learning

Pawn

status

A chess engine and machine learning experimentation testbed.

Originally written as a project to investigate AI techniques, pawn is now at a decent strength to beat average players. It has been tested against some popular enginess (such as GnuChess) as part of its training to evolve with some satisfactory results.

I will be adding details about its architecture and the research behind it later on.

Quick Start

make && bin/pawn
Screen Shot 2022-03-09 at 15 01 28

If you'd rather use a GUI, you can run:

make && xboard -fcp bin/pawn

but you'll need to have xboard pre-installed as pawn doesn't have a GUI of its own.

Screen Shot 2022-03-09 at 15 04 31

If you find issues running any of the above, check the following sections for installation details.

Dependencies

Build Tools

In Debian-based distributions, you should be able to install both by running sudo apt install build-essential in a terminal. See this post for detailed instructions.

If you're using Mac OS X, both tools should be available in your terminal if you've installed XCode; otherwise, you can follow the instructions in this post to install them.

Graphical Interface (Optional)

To install it in Linux or other Debian-based distributions, run the following command in your terminal:

sudo apt install xboard

To install it in Mac OS X:

brew install xboard

Notice that only a very small subset of functionality available from the GUI has been implemented in the engine.

Console Mode

If you don't want to use the GUI, you can still play using the console by running:

bin/pawn

In this case, you can make moves by typing the initial and final square of any piece on the board. For example, you can type e2e4 to move the king pawn two squares forward, or g1f3 to develop the king knight instead. Castling is done simply by typing the movement of the king (e.g., e1g1 for the white king.)

Unit Testing

Unit testing is very much absent at this point, but the infrastructure to add tests is in place.

make unit_test