[computer-go] Tactics statistics part 2
Mark Boon
tesujisoftware at gmail.com
Mon Sep 25 12:39:09 PDT 2006
I got a few more numbers in. The results surprised me, so this was a
useful excercise.
As I wrote in a previous post I found that on average there are on
average 2.3 one-liberty chains on the board at any give point in the
game, and 7.7 two-liberty chains. The tactical module spends on
average 4.5 move reading these, so that means 45 tactical moves per
position. That would limit the maximum number of positions I could
'evaluate' to a little over 30K pos. per sec. And that only involves
tactics, so this way it's never going to be close to 10K pos. per
sec. for full evaluation.
Previously I used a bit of a heuristic approach to determining which
ladders needed to be read again after each move. This cut down the
amount of tactical search considerably, but I don't remember exactly
by how much. It had the drawback that it didn't detect ladder-
breakers a little further away. I didn't mind as 'lookahead' is
usually local in nature anyway, so I did't care much if a ladder on
the other side of the board gets broken. After each real move I
simply re-read all tactical problems once to catch ladders broken
remotely.
Since I have decided to try to stay away from heuristics as much as
possible, I implemented a simple method of marking the area of a
ladder while its reading. I think others have done something
simliarly with bitmaps. And then try to compare it with reading all
tactical problems after each move without trying to be clever. I also
verify that in both cases I get the same results.
I used a collection of 38K games with exactly 8 million moves in it.
(I had to clean out some junk from the original 40K games). Running
this with the first straightforward version that reads all ladders I
get the following numbers:
8 million positions
362 million tactical moves
375 seconds eval time (hmmm... just under 1 million moves/sec. or
half the speed I'm used to)
Next I tested the version that keeps a map of affected area with each
tactical situation. For each position it only reads those tactical
situations that it thinks need to be updated.
8 million positions
63.5 million tactical moves
98 seconds eval time.
So the number of tactical moves it reads per second drops by a third.
This is due to the overhead created by tracking the dirty maps and
the checking process. But the number of tactical moves required per
position dropped from 45 to 8. I still have to see if I can find out
why the number of moves/sec. dropped so much in the first example
compared to the number I'm used to seeing in smaller test-sets.
So what I thought previously, that it would be (almost) just as fast
to re-read all ladders in every position turned out to be false. This
is contrary to a result I remember getting many years ago, but I must
admit that this time I paid a bit closer attention to making it
efficient.
I think this is useful information. I may store in in my project-
pages somewhere.
Mark Boon
More information about the computer-go
mailing list