83 lines
2.5 KiB
Bash
Executable File
83 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# Runs a fast-chess (https://github.com/Disservin/fastchess) tournament based
|
|
# on two branches of the chess_inator
|
|
# (https://github.com/dogeystamp/chess_inator) engine.
|
|
#
|
|
# Example usage:
|
|
#
|
|
# cd chess_tournaments
|
|
# fast-chess-branch.sh quiescence no-quiescence -openings file=8moves_v3.pgn format=pgn order=random -each tc=300+0.1 -rounds 12 -repeat -concurrency 8 -recover -sprt elo0=0 elo1=10 alpha=0.05 beta=0.05
|
|
#
|
|
# Do not use `main` as a branch, or any other branch already checked out in
|
|
# another directory. You need to be in a chess_inator Git repository to run
|
|
# this script. Ensure that the repository you're in is a throw-away worktree.
|
|
# Create one using
|
|
#
|
|
# git worktree add ../chess_tournaments
|
|
#
|
|
# inside the original chess_inator repo.
|
|
# Also, get an opening book from Stockfish's books:
|
|
#
|
|
# curl -O https://github.com/official-stockfish/books/raw/refs/heads/master/8moves_v3.pgn.zip
|
|
#
|
|
# The sprt mode is a statistical hypothesis testing mode that will tell you how
|
|
# probably the first branch is better than the second branch. The Elo ratings
|
|
# given are the "indifference zone" where the result is acceptable. To check
|
|
# that the engine hasn't had a regression, set them to [-10, 0]. To check for
|
|
# an improvement, use [0, 10]. Alpha and beta are probabilities for statistical
|
|
# errors. The tournament automatically ends when a statistically significant
|
|
# result is obtained.
|
|
#
|
|
# By default, a PGN file will be exported with the games played, and the
|
|
# fast-chess SPRT output will be appended. This comment may interfere with
|
|
# importing the PGN. But Lichess will ignore it, so it's probably fine.
|
|
|
|
set -e
|
|
|
|
BRANCH1="$1"
|
|
BRANCH2="$2"
|
|
|
|
# if this line fails it's because you don't have enough arguments
|
|
shift 2
|
|
|
|
COMM1=$(git rev-parse --short "$BRANCH1")
|
|
COMM2=$(git rev-parse --short "$BRANCH2")
|
|
|
|
mkdir -p games
|
|
|
|
PGN=games/"$BRANCH1"__"$BRANCH2".pgn
|
|
|
|
rm -f engine1 engine2
|
|
if [ -f "$PGN" ]; then
|
|
rm -i "$PGN"
|
|
fi
|
|
|
|
git switch "$BRANCH1"
|
|
cargo build --release
|
|
cp target/release/chess_inator engine1
|
|
|
|
git switch "$BRANCH2"
|
|
cargo build --release
|
|
cp target/release/chess_inator engine2
|
|
|
|
OUTPUT=$(mktemp)
|
|
|
|
fastchess \
|
|
-engine cmd=engine1 name="c_i $BRANCH1 ($COMM1)" \
|
|
-engine cmd=engine2 name="c_i $BRANCH2 ($COMM2)" \
|
|
-pgnout file="$PGN" \
|
|
timeleft=true \
|
|
$@ \
|
|
2>&1 | tee -a "$OUTPUT"
|
|
|
|
printf "\n{" >> "$PGN"
|
|
|
|
# match between ------- markers in fastchess output, strip newline and then output to PGN
|
|
awk '/-{50}/{f+=1; print; next} f%2' "$OUTPUT" \
|
|
| head -c -1 \
|
|
>> "$PGN"
|
|
|
|
printf "}" >> "$PGN"
|
|
|
|
rm "$OUTPUT"
|