-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix scoring #292
Fix scoring #292
Conversation
That's not how other engines do it. They let you have an analyze command like |
I came up with that solution for the case where the bot is winning a game which means it's doing very few playouts for the last move. My assumption is that this is the reason for the bad scoring. But all this is only based on a feeling. I'm currently running 50 games on 13x13 for both the master branch and this one. Then we will know the following:
|
I ran a few games on 13x13 with both master and this branch. For master it looks like this:
For this branch it's quite a bit better:
It's of course not perfect but I think the improvement is big enough that it makes sense to merge this. |
But I like to set my own time limits for search, how do I get the previous functionality back? Also, are the games where there are score disagreements played to the end, or resigned by Iomrascalai? |
I unfortunately can't check as I'm on holiday without a computer. But can't you also use |
Oh, and these numbers are for games that weren't resigned. |
I'm using the executable, right now I just do a search for x seconds first (by changing the timer) and then ask for a score. |
I see. We could introduce a custom GTP command that allows you to set the number of seconds it should search for |
I've seen a command like |
The issue with that is that not enough playouts are done when the win rate goes above 80%. So we end up with almost no data at the end of the game. That's why I introduced this code to do some "extra" playouts to get a better prediction of which stoned are dead. |
So just run the |
Let's discuss this once I'm back from my holiday. I think we just have totally different use cases. |
Alright, so I'm back from holiday. My current use case is as follows: If Iomrascálaí is winning a game it stops the search early during the last moves so it doesn't run many playouts. If we then use these few playouts for scoring after the game is over we get the score wrong quite a lot as dead stones aren't marked as dead. That's why I do this somewhat hackish thing of removing the "end of game marker" and run the search for 10-30 seconds. Then What exactly is your use case? To me it seems to be similar to the |
Yes, I do the exact same thing. My solution is to first run My ideal solution is to implement |
OK, does BTW, I'm not against implementing |
it doesn't, but if someone wants to use it makes no sense to merge this and then undo it after |
I see. For me the main reason of existence for |
So would it be enough to separately implement |
If |
Alright, I'm convinced. I've added the I'll have to see if 10,000 is enough or if I have to increase the number of course. |
So, it all seems to work as expected. If you run |
Some of the tests run on all cores. So don't run the test runner in parallel as well.
A bug in the board/GTP setup that builds an empty tree and no search is happening and therefore a pass is generated as the first move.
If we do it the other way round we always pass as the tree appears to contain no children.
Yeah, this is what I had in mind. We can tweak the implementations later if we need to adjust how it works. |
Cool. And thanks for the discussion! I think we ended up with a better solution. 👍 |
Run the playouts for 10-30s for use in
final_score
andfinal_status_list
. It's still WIP as some tests don't pass yet and I also don't quite know if this is better as before. I'll have to run the 13x13 benchmark onmaster
and this branch to see if this branch is better at predicting the score (i.e. closer to GnuGo).Fixes #280, #291