Open acheeseye opened 6 years ago
A game file is only considered valid if it contains a complete game (i.e. the end of the game was reached) so yes, it is necessary to have an annotation for draws; 50
would be fine to use for that. Do we currently have anything in place that identifies whether conditions for a draw have been fulfilled? And under what conditions do we want to declare a draw?
Draw condition is declared by making the 100th move and this is counted inside main’s new state. I have implemented this and so far no issues! I will close this issue now.
I think we should reopen this. We can't make assumptions on how many moves a game will take. According to this,
"A Draw is declared when neither player can force a win."
It also mentions a 40-move draw rule, which appears to basically be the checkers version of the 50-move draw rule from chess. It would be better to determine a draw that way.
Well, the win and loss are made before 100 moves and still get recorded. If we were to try to decide if a player can force a win, we would have to do a depth-first search on all possible moves, which may end up being stuck in an infinite loop since we do not have loop detection (this would also make our training longer). We would also need to make sure that the networks aren't simply just moving pieces back and forth between the same place (due to limited ply), and thus allow a game to go infinitely long. I got the 100 moves from the 1999 Evolving Checkers paper provided by Genetti in google drive (page 5), but we can do 40 moves instead to cut down (probably not much) (or perhaps a lot, depending on the ply) on the training time, though we do have to consider if 40 moves is enough for the network to "exhaust" its knowledge.
Just to make sure it's clear: it's not 40 total moves, it's after 40 moves have been made with no piece getting jumped and no king being made.
Got it, I will see what I can do.
I have not yet tried this, but according to the code, a draw game will fail to replay due to the file parser not finding 100 or -100 at the end of file.
Perhaps draw games can be denoted by +50 and when the file parser sees this it will allow the replay to happen (though not sure if this has consequences with the code).