Hi Camerone,

your method is hardly new.

I don't think however anybody uses the very same algorithm as you propose, for the reason it does not seem to be able to recognize suicide (could you confirm this? I may be mistaken), which is mandatory for any implementation (either to remove suicide stones if suicide is allowed by the rules, or to recognize an invalid move if it is not). So a "surround capture" algorithm as you name it does half the job.

You wrote "suicide and superko were not implemented to give a clear picture of the capture test performance", but if you want to compare with any other implementation you'll have to compare with similar functionalities. BTW, does your implementation check for simple ko?

So my bet is that people that have bitboard algorithms do not use the very same as you, but rather use a similar algorithm that will be able to detect dead stones for both players at the same time, so that they recognize suicide moves, rather than an algorithm that only checks for captures.

Now regarding the "algorithm comparison", the shift from "there exists implementation of algorithm A and implementation of algorithm B, such that implementation A is faster than implementation B" to "algorithm A is faster than algorithm B" is always amazing.

For a given algorithm, depending on who did the implementation (programming skills, understanding of CPU architecture, data structure, time invested, ...) you can have a difference in execution speed that goes up to 2 or 3 times faster. This is why, as Erik pointed out, it would be interesting that you compare your implementation to Lukasz Lew's libego, which is believed (and probably is) to be the fastest open source implementation.

As far as I recall, 5 to 6 years ago, on a Q6600 I got ~40-42 kpps/GHz for 9x9 with libego. Which is 80-84 kpps at 2 Ghz. It is not unfair to assume that an i7 is a little bit more efficient for the same code. Let's say around 10% speedup (probably more) because of the processor at the same speed which would lead to 90-100 kpps at 2 GHz. Perhaps you could check and report the figures. If this is correct, the conclusion would be that UF is faster... BTW, there is no need to report an error estimation with 3 digits precision (table 1), when the error coming from selecting the reference implementation is far higher.

On the other hand, still 5 to 6 years ago, I was playing with the bitboard implementation idea, and I had writen some code that ran 1.7 faster than libego, that is around 130 kpps at 2 Ghz for 9x9 on a Q6600. The implementation I made would run exactly twice as fast on a processor with 256-bit registers (Q6600 had 128-bit registers), not taking into account the increased efficiency of the processor. So, maybe bitboard can be faster... at last.

Another lesson learned when I was playing with bitboards for Go is that the random move generation scheme is not obvious. Having a scheme that generates moves with uniform distribution is not that easy, and might dominate the overall execution speed. Some open source implementation I reviewed had some flaws regarding this point (including libego if I recall well, but I'm not sure, so don't take this for granted). Not sure this flaw is important for practical use anyway.

Best regards,

Antoine


From: Erik van der Werf<erikvanderw...@gmail.com>

This is not new; I've been using algorithms like this in my Go
programs for well over a decade. Anyone with some practical experience
in binary image processing should know basic operations for dilation,
erosion, growing objects under a mask, etc.
Hi Erik,

Thanks for the info. Were they algorithms like this or this actual algorithm? 
Do you have any links to literature or code I can follow up?

Thanks,
Cameron

_______________________________________________
Computer-go mailing list
Computer-go@dvandva.org
http://dvandva.org/cgi-bin/mailman/listinfo/computer-go


_______________________________________________
Computer-go mailing list
Computer-go@dvandva.org
http://dvandva.org/cgi-bin/mailman/listinfo/computer-go

Reply via email to