Chess-Ant 紹介¶
Chess problemsをMCTS SolverとGenetic Programmingで解くシミュレーター
chess_ant.py
は deap/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.
スパゲティ・コードを茹でる。