Chess-Ant 紹介

Chess problemsをMCTS SolverとGenetic Programmingで解くシミュレーター

chess_ant.pydeap/examples/gp/ant.py のコードを改変しています。

準備

Ubuntuで:

sudo -H -s
apt install python3-pip
pip3 install -r requirements.txt
exit

或いは:

pip3 install chess
pip3 install deap
pip3 install mcts
pip3 install mcts-solver

或いは:

pip3 install chess-ant

使用法

サンプルのchess problemsは pgn/ にあります。 Jerry はForsyth-Edwards Notation (FEN)を貼り付けるのに便利です。

cd chess-ant/chess-ant/
git checkout -b test-run
python3 chess_ant.py --help
python3 chess_ant.py --auto --fen "7k/1Q6/8/8/5N2/1B6/8/3K4 w - - 0 1"
python3 chess_ant.py -a -c -p "my-pgn" -l1 -n100 -g10 -f "7k/1Q6/8/8/5N2/1B6/8/3K4 w - - 0 1"

chess-ant をPyPIからインストールした場合:

chess-ant --help
chess-ant -a -n100 -g5 -f "7r/8/8/8/7k/2q5/6P1/6NK b - - 0 1"

このコマンドは誤答を出力するでしょう。時間はかかりますが、以下のコマンドは正しく出力するでしょう。

chess-ant -a -n1000 -g5 -f "7r/8/8/8/7k/2q5/6P1/6NK b - - 0 1"

Chess-Classification

Version 0.0.1の genPgn.py はウォルラス演算子を含むので、Python>=3.8でしか動作しません。Simple Transformersをインストールする前にPytorchをインストールして下さい。

sudo -H -s
pip3 install pandas
pip3 install simpletransformers
apt install stockfish
pip3 install chess-classification
exit
genPgn --help
genPgn -l 10 -t 1 -p "train-pgn" -f "3qkbnr/8/8/8/8/8/PPPPPPPP/RNBQKBNR w - - 0 1"
cat train-pgn/train-*.pgn >> train-pgn/1.pgn
rm train-pgn/train-*.pgn
genPgn -l 10 -t 1 -p "train-pgn" -f "rnbqkbnr/pppppppp/8/8/8/8/8/3QKBNR w - - 0 1"
cat train-pgn/train-*.pgn >> train-pgn/2.pgn
rm train-pgn/train-*.pgn
genPgn -l 10 -t 1 -p "train-pgn" -f "4k3/pppppppp/8/8/8/8/PPPPPPPP/4K3 w - - 0 1"
cat train-pgn/train-*.pgn >> train-pgn/3.pgn
rm train-pgn/train-*.pgn
importPgn -p "train-pgn"
genPgn -l 10 -t 1 -p "eval-pgn" -f "3qkbnr/8/8/8/8/8/PPPPPPPP/RNBQKBNR w - - 0 1"
cat eval-pgn/train-*.pgn >> eval-pgn/1.pgn
rm eval-pgn/train-*.pgn
genPgn -l 10 -t 1 -p "eval-pgn" -f "rnbqkbnr/pppppppp/8/8/8/8/8/3QKBNR w - - 0 1"
cat eval-pgn/train-*.pgn >> eval-pgn/2.pgn
rm eval-pgn/train-*.pgn
genPgn -l 10 -t 1 -p "eval-pgn" -f "4k3/pppppppp/8/8/8/8/PPPPPPPP/4K3 w - - 0 1"
cat eval-pgn/train-*.pgn >> eval-pgn/3.pgn
rm eval-pgn/train-*.pgn
importPgn -p "eval-pgn"
from chess_classification.chess_classification import ChessClassification
classification = ChessClassification()

保存したモデルの読み込み:

classification = ChessClassification("local-path/your-outputs")

学習か再学習:

classification.train_and_eval("train-pgn/fen.json", "eval-pgn/fen.json")

動作確認:

my_fen = "7r/8/8/8/7k/2q5/6P1/6NK b - - 0 1"
classification.predict_fen(my_fen)

予測

ラベル

1-0

2

0-1

1

1/2-1/2

0

chess_ant.py との併用:

chess-ant -d -n100 -g5 -f "6rk/4pppp/8/8/3Q4/8/RB2PPPP/R6K w - - 0 1"

保存したモデルの読み込み:

chess-ant -d -n100 -g5 -f "6rk/4pppp/8/8/3Q4/8/RB2PPPP/R6K w - - 0 1" --model-outputs "local-path/your-outputs"

課題

  • 遅い。

  • 低い正答率。

  • 並列化。

  • 将棋のような他のボードゲームへの対応。

  • Universal Chess Interface (UCI)への対応。

  • Docstring.

  • スパゲティ・コードを茹でる。