lucasart / c-chess-cli

Command Line Interface for UCI Chess engines written in C
GNU General Public License v3.0
71 stars 9 forks source link

Tournament Functionality #15

Closed kyleaforrester closed 3 years ago

kyleaforrester commented 3 years ago

Is c-chess-cli only used for 1v1 engine matches? It seems that a tournament format is not supported. I couldn't find any tournament documentation and my following attempt only played the first 2 engines against each other:

c-chess-cli \ -games 2 -concurrency 4 -openings 4movesnoob.epd -repeat -tc 2+0.05 \ -draw 8,10 -pgnout $(date +%d%h%Y%H%M%S).pgn \ -cmd Ethereal:stockfish_7:stockfish_8:stockfish_9:stockfish_10:stockfish_11:stockfish_classical:stockfish_12:stockfish:stockfish:stockfish:stockfish:stockfish:stockfish:stockfish \ -options :::::::::EvalFile=nn-97f742aaefcd.nnue:EvalFile=nn-cad20e613db1.nnue:EvalFile=nn-25f202fd6eaa.nnue:EvalFile=toga3-0.4.bin:EvalFile=frosty-0.2.bin:EvalFile=ninu-0.2.bin

Is there any planned support for running an engine tournament?

lucasart commented 3 years ago

indeed, there is no support for tournament. this tool is mainly intended for engine developpers, and as one of them, I am not convinced about the need for such features. if you really need to run tournaments, it's easy to do so with an external script (eg. bash, perl, python, ruby; whatever works for you).

It's doable, but introduces some parsing problems. I would have to add a separate command option telling the program how many engines to expect, and that command would have to come first. and there's the problem of SPRT...

lucasart commented 3 years ago
rchastain commented 3 years ago

@lucasart

I did agree with what you said in your first answer (about the need of a tournament feature). But since you decided to make it, congratulations. :)

What is the syntax to select the tournament type? It seems that the -tournament type syntax is not accepted.

I tried this (without specifying anything):

./c-chess-cli \
-log \
-each tc=4 option.Threads=1 \
-engine cmd=../sapeli/sapeli_170 \
-engine cmd=../octochess/octochess \
-engine cmd=../galjoen/0401/bin/galjoen_linux \
-games 2 -concurrency 1 -openings test/chess960.epd -random -repeat \
-pgnout out.pgn

Here is what I get:

[roland@localhost c-chess-cli (master)]$ sh test.sh
[1] Started game 1 of 4 (Sapeli 1.70 vs Octochess)
[1] Finished game 1 (Sapeli 1.70 vs Octochess): checkmate
Score of Sapeli 1.70 vs Octochess: 0 - 1 - 0  [0.000] 1
[1] Started game 2 of 4 (Sapeli 1.70 vs Octochess)
[1] Finished game 2 (Sapeli 1.70 vs Octochess): checkmate
Score of Sapeli 1.70 vs Octochess: 0 - 2 - 0  [0.000] 2
[1] Started game 3 of 4 (Sapeli 1.70 vs Galjoen 0.40.1)
[1] Finished game 3 (Sapeli 1.70 vs Galjoen 0.40.1): checkmate
Score of Sapeli 1.70 vs Galjoen 0.40.1: 0 - 3 - 0  [0.000] 3
[1] Started game 4 of 4 (Sapeli 1.70 vs Galjoen 0.40.1)
[1] Finished game 4 (Sapeli 1.70 vs Galjoen 0.40.1): checkmate
Score of Sapeli 1.70 vs Galjoen 0.40.1: 1 - 3 - 0  [0.250] 4

Two observations. 1° Why does Sapeli always play white? 2° When a game is finished, it is not clear which engine checkmated the other.

Regards.

Roland

lucasart commented 3 years ago

What is the syntax to select the tournament type? It seems that the -tournament type syntax is not accepted.

There is no syntax, because there is no feature to select the tournament type. Only gauntlet. For example, if you do 2 rounds of 4 games with (e1, e2, e3), you get:

Round 1:

Round 2:

Demonstration with the test/engine (which you can compile with ./make.py -p test):

$ ./c-chess-cli -each cmd=./test/engine depth=1 -engine name=e1 -engine name=e2 -engine name=e3 -rounds 2 -games 4
[1] Started game 1 of 16 (e1 vs e2)
[1] Finished game 1 (e1 vs e2): 1/2-1/2 {3-fold repetition}
Score of e1 vs e2: 0 - 0 - 1  [0.500] 1
[1] Started game 2 of 16 (e1 vs e2)
[1] Finished game 2 (e1 vs e2): 1/2-1/2 {insufficient material}
Score of e1 vs e2: 0 - 0 - 2  [0.500] 2
[1] Started game 3 of 16 (e1 vs e2)
[1] Finished game 3 (e1 vs e2): 1-0 {checkmate}
Score of e1 vs e2: 1 - 0 - 2  [0.667] 3
[1] Started game 4 of 16 (e1 vs e2)
[1] Finished game 4 (e1 vs e2): 1/2-1/2 {stalemate}
Score of e1 vs e2: 1 - 0 - 3  [0.625] 4
[1] Started game 5 of 16 (e1 vs e3)
[1] Finished game 5 (e1 vs e3): 1/2-1/2 {50 moves rule}
Score of e1 vs e3: 1 - 0 - 4  [0.600] 5
[1] Started game 6 of 16 (e1 vs e3)
[1] Finished game 6 (e1 vs e3): 1/2-1/2 {insufficient material}
Score of e1 vs e3: 1 - 0 - 5  [0.583] 6
[1] Started game 7 of 16 (e1 vs e3)
[1] Finished game 7 (e1 vs e3): 1/2-1/2 {insufficient material}
Score of e1 vs e3: 1 - 0 - 6  [0.571] 7
[1] Started game 8 of 16 (e1 vs e3)
[1] Finished game 8 (e1 vs e3): 1/2-1/2 {insufficient material}
Score of e1 vs e3: 1 - 0 - 7  [0.562] 8
[1] Started game 9 of 16 (e1 vs e2)
[1] Finished game 9 (e1 vs e2): 1/2-1/2 {50 moves rule}
Score of e1 vs e2: 1 - 0 - 8  [0.556] 9
[1] Started game 10 of 16 (e1 vs e2)
[1] Finished game 10 (e1 vs e2): 1/2-1/2 {insufficient material}
Score of e1 vs e2: 1 - 0 - 9  [0.550] 10
[1] Started game 11 of 16 (e1 vs e2)
[1] Finished game 11 (e1 vs e2): 1/2-1/2 {50 moves rule}
Score of e1 vs e2: 1 - 0 - 10  [0.545] 11
[1] Started game 12 of 16 (e1 vs e2)
[1] Finished game 12 (e1 vs e2): 1/2-1/2 {insufficient material}
Score of e1 vs e2: 1 - 0 - 11  [0.542] 12
[1] Started game 13 of 16 (e1 vs e3)
[1] Finished game 13 (e1 vs e3): 1/2-1/2 {insufficient material}
Score of e1 vs e3: 1 - 0 - 12  [0.538] 13
[1] Started game 14 of 16 (e1 vs e3)
[1] Finished game 14 (e1 vs e3): 1/2-1/2 {50 moves rule}
Score of e1 vs e3: 1 - 0 - 13  [0.536] 14
[1] Started game 15 of 16 (e1 vs e3)
[1] Finished game 15 (e1 vs e3): 1/2-1/2 {stalemate}
Score of e1 vs e3: 1 - 0 - 14  [0.533] 15
[1] Started game 16 of 16 (e1 vs e3)
[1] Finished game 16 (e1 vs e3): 1/2-1/2 {insufficient material}
Score of e1 vs e3: 1 - 0 - 15  [0.531] 16

Two observations. 1° Why does Sapeli always play white?

it's just a display issue. the colors are correctly alternated, as you can see in the PGN. will fix that.

2° When a game is finished, it is not clear which engine checkmated the other.

fixed

rchastain commented 3 years ago

Informative answer. Thank you. I will test the new version.

lucasart commented 3 years ago

Two observations. 1° Why does Sapeli always play white?

it's just a display issue. the colors are correctly alternated, as you can see in the PGN. will fix that.

fixed

lucasart commented 3 years ago

Done. Round-robin was the last item here.