Giter Site home page Giter Site logo

mkeshita / chess-data Goto Github PK

View Code? Open in Web Editor NEW

This project forked from chesslablab/chess-data

0.0 0.0 0.0 188.24 MB

A chess database, data science and machine learning with Rubix ML.

License: GNU General Public License v3.0

Shell 10.76% PHP 88.47% Dockerfile 0.77%

chess-data's Introduction

Chess Data

Build Status

A chess database, data science and machine learning with Rubix ML.

Setup

Clone the chesslablab/chess-data repo into your projects folder as it is described in the following example:

$ git clone [email protected]:chesslablab/chess-data.git

Then cd the chess-data directory and install the Composer dependencies:

$ composer install

Create an .env file:

$ cp .env.example .env

If necessary, update the environment variables in your .env file:

DB_DRIVER=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=chess
DB_USERNAME=root
DB_PASSWORD=

Command Line Interface (CLI)

Create the Chess Database

$ php cli/db-create.php -h
USAGE:
   db-create.php <OPTIONS>

   Creates the chess database.                                                                                                                                                                  


OPTIONS:
   --heuristics                                             Add heuristics to the games table for further data visualization.                                                                   

   -h, --help                                               Display this help screen and exit immediately.                                                                                      

   --no-colors                                              Do not use any colors in output. Useful when piping output to other tools or files.                                                 

   --loglevel <level>                                       Minimum level of messages to display. Default is info. Valid levels are: debug, info, notice, success, warning, error, critical,    
                                                            alert, emergency.                                                                                                                   
Example:

Creates the chess database:

$ php cli/db-create.php

The games table will look as described next:

mysql> use chess;
Database changed
mysql> describe games;
+----------+--------------------+------+-----+---------+----------------+
| Field    | Type               | Null | Key | Default | Extra          |
+----------+--------------------+------+-----+---------+----------------+
| id       | mediumint unsigned | NO   | PRI | NULL    | auto_increment |
| Event    | char(64)           | YES  |     | NULL    |                |
| Site     | char(64)           | YES  |     | NULL    |                |
| Date     | char(16)           | YES  |     | NULL    |                |
| White    | char(32)           | YES  |     | NULL    |                |
| Black    | char(32)           | YES  |     | NULL    |                |
| Result   | char(8)            | YES  |     | NULL    |                |
| WhiteElo | char(8)            | YES  |     | NULL    |                |
| BlackElo | char(8)            | YES  |     | NULL    |                |
| ECO      | char(8)            | YES  |     | NULL    |                |
| FEN      | char(8)            | YES  |     | NULL    |                |
| movetext | varchar(3072)      | YES  |     | NULL    |                |
+----------+--------------------+------+-----+---------+----------------+
12 rows in set (0,00 sec)

mysql>
Example:

Alternatively, optional heuristics information can be added too for further data visualization with Heuristics Quest:

$ php cli/db-create.php --heuristics

In which case the games table will look as it is described next:

mysql> describe games;
+----------------------+--------------------+------+-----+---------+----------------+
| Field                | Type               | Null | Key | Default | Extra          |
+----------------------+--------------------+------+-----+---------+----------------+
| id                   | mediumint unsigned | NO   | PRI | NULL    | auto_increment |
| Event                | char(64)           | YES  |     | NULL    |                |
| Site                 | char(64)           | YES  |     | NULL    |                |
| Date                 | char(16)           | YES  |     | NULL    |                |
| White                | char(32)           | YES  |     | NULL    |                |
| Black                | char(32)           | YES  |     | NULL    |                |
| Result               | char(8)            | YES  |     | NULL    |                |
| WhiteElo             | char(8)            | YES  |     | NULL    |                |
| BlackElo             | char(8)            | YES  |     | NULL    |                |
| ECO                  | char(8)            | YES  |     | NULL    |                |
| FEN                  | char(8)            | YES  |     | NULL    |                |
| movetext             | varchar(3072)      | YES  |     | NULL    |                |
| heuristic_picture    | json               | YES  |     | NULL    |                |
| heuristic_evaluation | json               | YES  |     | NULL    |                |
+----------------------+--------------------+------+-----+---------+----------------+
14 rows in set (0,00 sec)

mysql>

A so-called heuristic picture consists of a group of heuristic snapshots such as attack, center or material, among others. It is intended to capture the current state of a chess game at any given time, and can be plotted on a chart for further visual study.

Seed the games Table

$ php cli/seed/games.php -h
USAGE:
   games.php <OPTIONS> <filepath>

   Seeds the games table with the specified PGN games.                                                                                                                                          


OPTIONS:
   --heuristics                                             Add heuristics for further data visualization.                                                                                      

   -h, --help                                               Display this help screen and exit immediately.                                                                                      

   --no-colors                                              Do not use any colors in output. Useful when piping output to other tools or files.                                                 

   --loglevel <level>                                       Minimum level of messages to display. Default is info. Valid levels are: debug, info, notice, success, warning, error, critical,    
                                                            alert, emergency.                                                                                                                   


ARGUMENTS:
   <filepath>                                               PGN file, or folder containing the PGN files.
Examples:

Seed the games table with the PGN games (STR tag pairs and movetexts) found in data/players/Carlsen.pgn:

$ php cli/seed/games.php data/players/Carlsen.pgn

With the PGN games (STR tag pairs, movetexts and heuristic pictures too for further data visualization) found in data/players/Carlsen.pgn:

$ php cli/seed/games.php --heuristics data/players/Carlsen.pgn

With all PGN files (STR tag pairs and movetexts) found in the given folder:

$ php cli/seed/games.php data/players

With all PGN files (STR tag pairs, movetexts and heuristic pictures too for further data visualization) found in the given folder:

$ php cli/seed/games.php --heuristics data/players

Seed the openings Table

$ php cli/seed/openings.php -h
USAGE:
   openings.php <OPTIONS>

   Seeds the openings table.                                                                                                                                                                    


OPTIONS:
   -h, --help                                               Display this help screen and exit immediately.                                                                                      

   --no-colors                                              Do not use any colors in output. Useful when piping output to other tools or files.                                                 

   --loglevel <level>                                       Minimum level of messages to display. Default is info. Valid levels are: debug, info, notice, success, warning, error, critical,    
                                                            alert, emergency.
Example:

Seed the openings table with the data found in data/openings:

$ php cli/seed/openings.php

PGN Syntax Checker

$ php cli/pgn-validate.php -h
USAGE:
   pgn-validate.php <OPTIONS> <filepath>

   PGN syntax validator.                                                                                                                                                                        


OPTIONS:
   -h, --help                                               Display this help screen and exit immediately.                                                                                      

   --no-colors                                              Do not use any colors in output. Useful when piping output to other tools or files.                                                 

   --loglevel <level>                                       Minimum level of messages to display. Default is info. Valid levels are: debug, info, notice, success, warning, error, critical,    
                                                            alert, emergency.                                                                                                                   


ARGUMENTS:
   <filepath>                                               PGN file to be validated.
Example:

Check the PGN syntax in the data/players/Carlsen.pgn file:

$ php cli/pgn-validate.php data/players/Carlsen.pgn
Event: 5th YM
Site: Lausanne SUI
Date: 2004.09.20
Round: 3.4
White: Lahno,Kateri
Black: Carlsen,M
Result: 1/2-1/2
WhiteElo: 2472
BlackElo: 2567

Event: 5th YM
Site: Lausanne SUI
Date: 2004.09.20
Round: 3.6
White: Lahno,Kateri
Black: Carlsen,M
Result: 0-1
WhiteElo: 2472
BlackElo: 2567

Event: 5th YM
Site: Lausanne SUI
Date: 2004.09.20
Round: 3.5
White: Carlsen,M
Black: Lahno,Kateri
Result: 1-0
WhiteElo: 2567
BlackElo: 2472

Event: 5th YM
Site: Lausanne SUI
Date: 2004.09.20
Round: 3.3
White: Carlsen,M
Black: Lahno,Kateri
Result: 1/2-1/2
WhiteElo: 2567
BlackElo: 2472

✗ 4 games did not pass the validation.
✓ 3426 games out of a total of 3430 are OK.

Data Preparation for Further Visualization

$ php cli/prepare/visualization/player.php -h
USAGE:
   player.php <OPTIONS> <n> <player>

   Creates a prepared JSON dataset of heuristics in the dataset/visualization folder.                                                                                                           


OPTIONS:
   --win                                                    The player wins.                                                                                                                    

   --lose                                                   The player loses.                                                                                                                   

   --draw                                                   Draw.                                                                                                                               

   -h, --help                                               Display this help screen and exit immediately.                                                                                      

   --no-colors                                              Do not use any colors in output. Useful when piping output to other tools or files.                                                 

   --loglevel <level>                                       Minimum level of messages to display. Default is info. Valid levels are: debug, info, notice, success, warning, error, critical,    
                                                            alert, emergency.                                                                                                                   


ARGUMENTS:
   <n>                                                      A random number of games to be queried.                                                                                             
   <player>                                                 The chess player's full name.
Example:

Creates the dataset/visualization/capablanca_jose_raul_win.json file:

$ php cli/prepare/visualization/player.php --win 25 "Capablanca Jose Raul"

For further information on how to visually study the supervised data please visit Heuristics Quest.

Data Preparation for Further AI Training

Classification

Prepares data by playing and studying games played from the start position rather than from a FEN position.

$ php cli/prepare/training/classification/start.php -h
USAGE:
   start.php <OPTIONS> <n>

   Creates a prepared CSV dataset in the dataset/training/classification folder.                                                                                         


OPTIONS:
   -h, --help                                               Display this help screen and exit immediately.                                                                                      

   --no-colors                                              Do not use any colors in output. Useful when piping output to other tools or files.                                                 

   --loglevel <level>                                       Minimum level of messages to display. Default is info. Valid levels are: debug, info, notice, success, warning, error, critical,    
                                                            alert, emergency.                                                                                                                   


ARGUMENTS:
   <n>                                                      A random number of games to be queried.

Example:

Creates the dataset/training/classification/start_100_1635947115.csv file:

$ php cli/prepare/training/classification/start.php 100

MLP Training

Classification
$ php cli/model/train-classification.php -h
USAGE:
   train-classification.php <OPTIONS> <name> <dataset>

   Trains an AI model.                                                                                                                                                                          


OPTIONS:
   -h, --help                                               Display this help screen and exit immediately.                                                                                      

   --no-colors                                              Do not use any colors in output. Useful when piping output to other tools or files.                                                 

   --loglevel <level>                                       Minimum level of messages to display. Default is info. Valid levels are: debug, info, notice, success, warning, error, critical,    
                                                            alert, emergency.                                                                                                                   


ARGUMENTS:
   <name>                                                   The AI model name.                                                                                                                  
   <dataset>                                                A prepared dataset in CSV format.

Example:

Train the a1.model with the start_100_1635947115.csv dataset previously created:

$ php cli/model/train-classification.php a1 start_100_1635947115.csv
[2021-11-03 14:54:45] /home/standard/projects/chess-data/cli/model/../../model/a1.model.INFO: Multilayer Perceptron (hidden layers: [0: Dense (neurons: 200, alpha: 0, bias: true, weight initializer: He, bias initializer: Constant (value: 0)), 1: Activation (activation fn: Leaky ReLU (leakage: 0.1)), 2: Dropout (ratio: 0.3), 3: Dense (neurons: 100, alpha: 0, bias: true, weight initializer: He, bias initializer: Constant (value: 0)), 4: Activation (activation fn: Leaky ReLU (leakage: 0.1)), 5: Dropout (ratio: 0.3), 6: Dense (neurons: 50, alpha: 0, bias: true, weight initializer: He, bias initializer: Constant (value: 0)), 7: PReLU (alpha initializer: Constant (value: 0.25))], batch size: 128, optimizer: Adam (rate: 0.001, momentum decay: 0.1, norm decay: 0.001), alpha: 0.0001, epochs: 1000, min change: 0.001, window: 3, hold out: 0.1, cost fn: Cross Entropy, metric: MCC) initialized
[2021-11-03 14:55:10] /home/standard/projects/chess-data/cli/model/../../model/a1.model.INFO: Epoch 1 - MCC: 0.021316814851544, Cross Entropy: 0.011637643059115
[2021-11-03 14:55:35] /home/standard/projects/chess-data/cli/model/../../model/a1.model.INFO: Epoch 2 - MCC: 0.1441569667138, Cross Entropy: 0.0090628767718673
[2021-11-03 14:56:00] /home/standard/projects/chess-data/cli/model/../../model/a1.model.INFO: Epoch 3 - MCC: 0.18620599479873, Cross Entropy: 0.0071159420224029
[2021-11-03 14:56:25] /home/standard/projects/chess-data/cli/model/../../model/a1.model.INFO: Epoch 4 - MCC: 0.24875347460879, Cross Entropy: 0.0060323621254431
[2021-11-03 14:56:52] /home/standard/projects/chess-data/cli/model/../../model/a1.model.INFO: Epoch 5 - MCC: 0.2939912191158, Cross Entropy: 0.0053859162470983
[2021-11-03 14:56:52] /home/standard/projects/chess-data/cli/model/../../model/a1.model.INFO: Training complete

This will create the model/a1.model file, which can be trained in batches again with more prepared data.

Play with the AI

Play with the AI.

$ php cli/model-play.php a1.model
chess > d4
chess > 1.d4 d5
chess > Nc3
chess > 1.d4 d5 2.Nc3 Nc6
chess > Nxd5
chess > 1.d4 d5 2.Nc3 Nc6 3.Nxd5 Qd5
chess > quit

License

The GNU General Public License.

Contributions

See the contributing guidelines.

Happy learning and coding! Thank you, and keep it up.

chess-data's People

Contributors

programarivm avatar skuhnow avatar peter279k avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.