[computer-go] Aya weaker bots not MC

2008-05-16 Thread Peter Christopher
AHA, that would explain it.  Yes, my reasoning was based on totally 
incorrectly assumptions about its guts then;)  Thanks for the correction.

Peter

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread Don Dailey



Michael Williams wrote:
I don't think Don was saying to use many calls to RDTSC to generate a 
single random number.

I think he meant do something like (FastBadRand() XOR RDTSC).
The first part has low quality low-order bits and the second part has 
low quality high-order bits.
That was my exact idea,  to xor or add RDTSC to the results.If that 
really is a slow operation then it basically kills the idea.   The cycle 
time should be published somewhere though.


- Don




Also, I can't imagine why executing a RDTSC would take 50 cycles.  But 
I couldn't find any docs on that aspect of the instruction.




steve uurtamo wrote:

the only thing to watch is that you'll likely need
30+ bits from these guys to seed a prng, and
getting those bits in any organized way is likely
going to happen on a regular schedule (i.e. if
you get them in a loop, you're likely going to
space them out in an organized way).

s.


On 5/15/08, Don Dailey <[EMAIL PROTECTED]> wrote:
For a long time I have pondered whether you could build a very high 
quality

random number generator that was extremely fast using the pentium RDTSC
instruction as a low order bit entropy source. The idea would be 
to use
an extremely fast (but low quality) pseudo random number generator,  
but
modify the output (or the internal state of the generator) with the 
time

stamp register at each call.

RDTSC reads the pentiums internal clock and is basically just a 64 bit
counter.However it increments very quickly and could be viewed 
as an
entropy source in the lowest bits as it would introduce at least a 
little

bit of non-determinism, and I think a little is all you would need to
transform a horrible generator into a good practical one for many
applications.   I  think the lowest 2 or 3 (or more)  bits would 
appear to
modern processors as almost unpredictable since there is so much 
going on

inside modern computers that are unpredictable.
I don't know if the call to RDTSC is fast or how it would affect the
parallelism of todays modern machines.   I'm not particularly 
interested in
non-deterministic generators as I sometimes depend on this for 
testing and

debugging,  but it's an idea I thought I would throw out there.
- Don





Don Dailey wrote:
If you are looking for a cheap fast and simple random number 
generator,  A
post by George Marsaglia, an expert/guru on random number generation 
has

several and a C implemention.
These are one line generators,  coded as macros.He also 
discusses the

period and quality of each of them. This is a gem of a post  on
sci.stat.math,sci.math  if you are interested in RNG:

  http://www.math.niu.edu/~rusin/known-math/99/RNG

- Don



Heikki Levanto wrote:


In addition, xor_shift is better than builtin rand() and faster and
much smaller than MT.

I don't know that much about random numbers, so excuse my 
ignorance. But

a

bit of googling got me to the Park - Miller Minimal Standard random

number

generator

http://www.firstpr.com.au/dsp/rand31/p1192-park.pdf
>From what I read, it should be quite sufficient for go programs. 
It is

dead simple and fast:

long int pmrand() {
   const long int a=16807;
   const long int m= ( 1 << 31 ) -1;
   pmrandseed = ( pmrandseed * a ) % m ;
   return pmrandseed;
} /* pmrand */


Should I worry about this not being good enough?
 - Heikki






___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread Don Dailey



Michael Williams wrote:
I don't think Don was saying to use many calls to RDTSC to generate a 
single random number.

I think he meant do something like (FastBadRand() XOR RDTSC).
The first part has low quality low-order bits and the second part has 
low quality high-order bits.


I also intended for RDTSC to change the state of the random number 
generator which would be extremely chaotic over time.   Some 
FastBadRand() generators use the last value returned as the state.


- Don



Also, I can't imagine why executing a RDTSC would take 50 cycles.  But 
I couldn't find any docs on that aspect of the instruction.




steve uurtamo wrote:

the only thing to watch is that you'll likely need
30+ bits from these guys to seed a prng, and
getting those bits in any organized way is likely
going to happen on a regular schedule (i.e. if
you get them in a loop, you're likely going to
space them out in an organized way).

s.


On 5/15/08, Don Dailey <[EMAIL PROTECTED]> wrote:
For a long time I have pondered whether you could build a very high 
quality

random number generator that was extremely fast using the pentium RDTSC
instruction as a low order bit entropy source. The idea would be 
to use
an extremely fast (but low quality) pseudo random number generator,  
but
modify the output (or the internal state of the generator) with the 
time

stamp register at each call.

RDTSC reads the pentiums internal clock and is basically just a 64 bit
counter.However it increments very quickly and could be viewed 
as an
entropy source in the lowest bits as it would introduce at least a 
little

bit of non-determinism, and I think a little is all you would need to
transform a horrible generator into a good practical one for many
applications.   I  think the lowest 2 or 3 (or more)  bits would 
appear to
modern processors as almost unpredictable since there is so much 
going on

inside modern computers that are unpredictable.
I don't know if the call to RDTSC is fast or how it would affect the
parallelism of todays modern machines.   I'm not particularly 
interested in
non-deterministic generators as I sometimes depend on this for 
testing and

debugging,  but it's an idea I thought I would throw out there.
- Don





Don Dailey wrote:
If you are looking for a cheap fast and simple random number 
generator,  A
post by George Marsaglia, an expert/guru on random number generation 
has

several and a C implemention.
These are one line generators,  coded as macros.He also 
discusses the

period and quality of each of them. This is a gem of a post  on
sci.stat.math,sci.math  if you are interested in RNG:

  http://www.math.niu.edu/~rusin/known-math/99/RNG

- Don



Heikki Levanto wrote:


In addition, xor_shift is better than builtin rand() and faster and
much smaller than MT.

I don't know that much about random numbers, so excuse my 
ignorance. But

a

bit of googling got me to the Park - Miller Minimal Standard random

number

generator

http://www.firstpr.com.au/dsp/rand31/p1192-park.pdf
>From what I read, it should be quite sufficient for go programs. 
It is

dead simple and fast:

long int pmrand() {
   const long int a=16807;
   const long int m= ( 1 << 31 ) -1;
   pmrandseed = ( pmrandseed * a ) % m ;
   return pmrandseed;
} /* pmrand */


Should I worry about this not being good enough?
 - Heikki






___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread terry mcintyre
Regarding the time used by RDTSC:

From
http://smallcode.weblogs.us/2007/12/07/performance-measurements-with-rdtsc/

Intel and Agner Fog recommend measuring the overhead
of RDTSC function and subtracting it from your result.
The overhead is relatively low (150-200 clock cycles)
and it occurs in all tested functions, so you can
neglect it when measuring long functions (e.g., 100
000 clock cycles).

NOTE: the page above recommends flushing the cache
before  calling RDTSC, when using it for timing
purposes. There is probably no need to do so when
grabbing LSBs.

I wonder, however, if the LSBs would be as random as
all that, when called frequently in
quasi-deterministic code which takes a predictable
number of cycles between invocations.



Terry McIntyre <[EMAIL PROTECTED]>

“Wherever is found what is called a paternal government, there is found state 
education. It has been discovered that the best way to insure implicit 
obedience is to commence tyranny in the nursery.”

Benjamin Disraeli, Speech in the House of Commons [June 15, 1874]


  
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread Don Dailey



terry mcintyre wrote:

Regarding the time used by RDTSC:

From
http://smallcode.weblogs.us/2007/12/07/performance-measurements-with-rdtsc/

Intel and Agner Fog recommend measuring the overhead
of RDTSC function and subtracting it from your result.
The overhead is relatively low (150-200 clock cycles)
and it occurs in all tested functions, so you can
neglect it when measuring long functions (e.g., 100
000 clock cycles).

NOTE: the page above recommends flushing the cache
before  calling RDTSC, when using it for timing
purposes. There is probably no need to do so when
grabbing LSBs.

I wonder, however, if the LSBs would be as random as
all that, when called frequently in
quasi-deterministic code which takes a predictable
number of cycles between invocations.
  
I'm not interested in using it here to measure performance, but as a 
possible way to have a very fast and very high quality random number 
function. But this won't happen if RDTSC isn't fast and it doesn't 
appear to be very fast.


I don't expect RDTSC to be very random either, I'm more interested in 
the chaos it presents to the random number system which is produced even 
with very little agitation added to the system. Even an occasional 1 bit 
change would cure many of the problems of some fast random number 
generators.


If you were to call this random number generator consecutively, many 
time in a tight loop, I suspect that you will get a LOT of variation in 
the number of cycles that have passed between calls, certainly enough to 
make it completely unpredictable in the long run. Like weather 
predictions you might predict the next day (or call) with some level of 
reasonable accuracy but not a specific day in the next month.


Every deterministic pseudo random number generator in existence always 
has some kind of structure. The main difference between what we consider 
good and bad ones is how well that structure is obfuscated or hidden 
from view. We try to be clever so that statistical tests cannot see the 
structure. One of primary methods to "hide" this structure is to make it 
so big (by long cycle lengths) that we can only see a tiny portion of 
it. For instance if every zillion'th bit alternated between 0 and 1, it 
would be hard to observe.


So if you can add a small amount of non-determinism you can probably 
"bust up" the hidden structure.


At any rate, it seems like it's not workable as a fast alternative to 
RNG. It might be combined with a slow very high quality generator to 
produce numbers that are somewhat closer to true random numbers.


- Don





Terry McIntyre <[EMAIL PROTECTED]>

“Wherever is found what is called a paternal government, there is found state 
education. It has been discovered that the best way to insure implicit 
obedience is to commence tyranny in the nursery.”

Benjamin Disraeli, Speech in the House of Commons [June 15, 1874]


  
___

computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

  

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread Zach Wegner
What you could do is XOR the RDTSC into the seed (or array or whatever
your RNG uses) at the beginning of each playout. That adds to the
chaos but doesn't slow it down much at all.
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread Don Dailey



Zach Wegner wrote:

What you could do is XOR the RDTSC into the seed (or array or whatever
your RNG uses) at the beginning of each playout. That adds to the
chaos but doesn't slow it down much at all.
  
I like your idea.   Yes, you could probably use a really fast simple RNG 
and do this. AnchorMan had a very trivial RNG and I noticed that if 
you played enough games, you start getting the same games over and 
over.   So I could only play a few hundreds before this started 
happening (for instance playing anchor vs anchor.) It seems like 
with 4 billion possible seeds that this would not happen (each games 
started with a seed based on the time()  call.)  But apparently 
something was going on that I didn't understand because there seemed to 
be only a few hundred games possible (at any fixed level.)  

I switched over to Mersenne Twister and this problem went away.  MT did 
not improve the playing quality in any way I could notice, so I don't  
believe MC in general requires a very good RNG. 

I once built a card playing program, and while developing a playing 
strategy I tested different versions against each other.  But then I 
tried as a sanity check, testing the same version against itself,  and I 
noticed a systematic bias,  one particular side was winning something 
like 53 or 54 percent of the games even though the conditions were 
unbiased.   I discovered the problem was with the RNG in the C library 
(this was a long time ago.)I solved the problem by changing the way 
I shuffled the cards.Originally I created a deck from scratch which 
always had the same ordering, then I would apply the standard 
Fischer-Yates shuffle. The fix was to reuse the deck from the last 
game and shuffle THAT deck.   Basically I grabbed up all the cards in 
the players hands and on the "table" and put them back in the deck just 
like us humans do when playing cards, then I would shuffle them.The 
effect was that I implicitly created a more sophisticated RNG with lots 
of state and more than likely a very long cycle time compared to the 
simple one I started with.


This could be done with your go program too.   If you have some sort of 
list of all the legal points at the beginning of the game that you work 
with and manipulate,   just leave it alone instead of reinitializing 
it.Or let the move sequences of the previous game impact the initial 
ordering or how the game is played.You would be getting a more 
sophisticated RNG for free.   Of course you have to save state between 
program invocations and that's probably too ugly.  


- Don




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

  

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread David Doshay

Hi,

As mentioned before, Monte Carlo simulations in physics was my thesis
topic, and there we need REALLY good PRNGs or we see the effect in
the results.

There is always a tradeoff between fast and good. If the newer Mersine
Twister algorithms (which are very good) is too slow and you want to
test an alternative, you can use the trick that is in Knuth that I  
used for
my thesis work. It is a 2 step generator that shuffles. You build an  
array
that holds a set of PRNGs straight from your crude but very fast  
generator
(I was partial to a list of 273), Your first PRNG call mod(arraysize)  
picks

the PRN you will use, and then the second refills that spot.

No promises that this is any faster, but for lattice simulations where
any correlations pop right out at you sort of like a herringbone  
pattern,

this shuffling worked great for me.

Personally, I think that much of the "really high quality" issues are  
not

that important for MC Go right now. I think that other things like not
having a reasonable distribution function (which UCT does a remarkable
job of smoothing over) completely overwhelm the effects of a poor PRNG.

Cheers,
David



On 16, May 2008, at 10:42 AM, Don Dailey wrote:




terry mcintyre wrote:

Regarding the time used by RDTSC:

From
http://smallcode.weblogs.us/2007/12/07/performance-measurements-with-rdtsc/

Intel and Agner Fog recommend measuring the overhead
of RDTSC function and subtracting it from your result.
The overhead is relatively low (150-200 clock cycles)
and it occurs in all tested functions, so you can
neglect it when measuring long functions (e.g., 100
000 clock cycles).

NOTE: the page above recommends flushing the cache
before  calling RDTSC, when using it for timing
purposes. There is probably no need to do so when
grabbing LSBs.

I wonder, however, if the LSBs would be as random as
all that, when called frequently in
quasi-deterministic code which takes a predictable
number of cycles between invocations.

I'm not interested in using it here to measure performance, but as a  
possible way to have a very fast and very high quality random number  
function. But this won't happen if RDTSC isn't fast and it doesn't  
appear to be very fast.


I don't expect RDTSC to be very random either, I'm more interested  
in the chaos it presents to the random number system which is  
produced even with very little agitation added to the system. Even  
an occasional 1 bit change would cure many of the problems of some  
fast random number generators.


If you were to call this random number generator consecutively, many  
time in a tight loop, I suspect that you will get a LOT of variation  
in the number of cycles that have passed between calls, certainly  
enough to make it completely unpredictable in the long run. Like  
weather predictions you might predict the next day (or call) with  
some level of reasonable accuracy but not a specific day in the next  
month.


Every deterministic pseudo random number generator in existence  
always has some kind of structure. The main difference between what  
we consider good and bad ones is how well that structure is  
obfuscated or hidden from view. We try to be clever so that  
statistical tests cannot see the structure. One of primary methods  
to "hide" this structure is to make it so big (by long cycle  
lengths) that we can only see a tiny portion of it. For instance if  
every zillion'th bit alternated between 0 and 1, it would be hard to  
observe.


So if you can add a small amount of non-determinism you can probably  
"bust up" the hidden structure.


At any rate, it seems like it's not workable as a fast alternative  
to RNG. It might be combined with a slow very high quality generator  
to produce numbers that are somewhat closer to true random numbers.


- Don





Terry McIntyre <[EMAIL PROTECTED]>

“Wherever is found what is called a paternal government, there is  
found state education. It has been discovered that the best way to  
insure implicit obedience is to commence tyranny in the nursery.”


Benjamin Disraeli, Speech in the House of Commons [June 15, 1874]


 ___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread Olivier Teytaud

Personally, I think that much of the "really high quality" issues are not
that important for MC Go right now. I think that other things like not
having a reasonable distribution function (which UCT does a remarkable
job of smoothing over) completely overwhelm the effects of a poor PRNG.


I agree with that.

By the way,
I have spent time on the use of improved forms of Monte-Carlo 
(quasi-random, stratification, ...) but I've never found an efficient 
trick.


OT
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread terry mcintyre
An interesting note from 
http://en.wikipedia.org/wiki/Knuth_shuffle which
appears to be pertinent to Don's remarks about a
limited number of games: 


Limited PRNG state space

An additional problem occurs when the Fisher-Yates
shuffle is used with a pseudorandom number generator:
as the sequence of numbers output by such a generator
is entirely determined by its internal state at the
start of a sequence, a shuffle driven by such a
generator cannot possibly produce more distinct
permutations than the generator has distinct possible
states. Even when the number of possible states
exceeds the number of permutations, the irregular
nature of the mapping from sequences of numbers to
permutations means that some permutations will occur
more often than others. Thus, to minimize bias, the
number of states of the PRNG should exceed the number
of permutations by at least several orders of
magnitude.

For example, the built-in pseudorandom number
generator provided by many programming languages
and/or libraries may often have only 32 bits of
internal state, which means it can only produce 232
different sequences of numbers. If such a generator is
used to shuffle a deck of 52 playing cards, it can
only ever produce a vanishingly small fraction of the
52! ≈ 2225.6 possible permutations. Thus, it's
impossible for a generator with less than 226 bits of
internal state to produce all the possible
permutations of a 52-card deck, and for a (reasonably)
unbiased shuffle, the generator must have at least
about 250 bits of state.

A further problem occurs when a simple linear
congruential PRNG is used with the
divide-and-take-remainder method of range reduction
described above. The problem here is that the
low-order bits of a linear congruential PRNG are less
random than the high-order ones: the low n bits of the
generator themselves have a period of at most 2n. When
the divisor is a power of two, taking the remainder
essentially means throwing away the high-order bits,
such that one ends up with a significantly less random
value.

Also, of course, no pseudorandom number generator can
produce more distinct sequences than there are
distinct seed values it may be initialized with. Thus,
it doesn't matter much if a generator has 1024 bits of
internal state if it is only ever initialized with a
32-bit seed.


The page also describes several other sources of bias
which may be pertinent to the development of MC
programs.


Terry McIntyre <[EMAIL PROTECTED]>

“Wherever is found what is called a paternal government, there is found state 
education. It has been discovered that the best way to insure implicit 
obedience is to commence tyranny in the nursery.”

Benjamin Disraeli, Speech in the House of Commons [June 15, 1874]


  
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread Don Dailey
That's very interesting and I believe it explains everything perfectly. 
If I understand this correctly, my 4 billion possible seeds (I used a 32 
bit seed) cannot produce 32 billion different games (against the same 
deterministic opponent.) In my implementation there were also issues 
with the lower ordered bits which of course are less random.


- Don



terry mcintyre wrote:
An interesting note from 
http://en.wikipedia.org/wiki/Knuth_shuffle which

appears to be pertinent to Don's remarks about a
limited number of games: 



Limited PRNG state space

An additional problem occurs when the Fisher-Yates
shuffle is used with a pseudorandom number generator:
as the sequence of numbers output by such a generator
is entirely determined by its internal state at the
start of a sequence, a shuffle driven by such a
generator cannot possibly produce more distinct
permutations than the generator has distinct possible
states. Even when the number of possible states
exceeds the number of permutations, the irregular
nature of the mapping from sequences of numbers to
permutations means that some permutations will occur
more often than others. Thus, to minimize bias, the
number of states of the PRNG should exceed the number
of permutations by at least several orders of
magnitude.

For example, the built-in pseudorandom number
generator provided by many programming languages
and/or libraries may often have only 32 bits of
internal state, which means it can only produce 232
different sequences of numbers. If such a generator is
used to shuffle a deck of 52 playing cards, it can
only ever produce a vanishingly small fraction of the
52! ≈ 2225.6 possible permutations. Thus, it's
impossible for a generator with less than 226 bits of
internal state to produce all the possible
permutations of a 52-card deck, and for a (reasonably)
unbiased shuffle, the generator must have at least
about 250 bits of state.

A further problem occurs when a simple linear
congruential PRNG is used with the
divide-and-take-remainder method of range reduction
described above. The problem here is that the
low-order bits of a linear congruential PRNG are less
random than the high-order ones: the low n bits of the
generator themselves have a period of at most 2n. When
the divisor is a power of two, taking the remainder
essentially means throwing away the high-order bits,
such that one ends up with a significantly less random
value.

Also, of course, no pseudorandom number generator can
produce more distinct sequences than there are
distinct seed values it may be initialized with. Thus,
it doesn't matter much if a generator has 1024 bits of
internal state if it is only ever initialized with a
32-bit seed.


The page also describes several other sources of bias
which may be pertinent to the development of MC
programs.


Terry McIntyre <[EMAIL PROTECTED]>

“Wherever is found what is called a paternal government, there is found state 
education. It has been discovered that the best way to insure implicit 
obedience is to commence tyranny in the nursery.”

Benjamin Disraeli, Speech in the House of Commons [June 15, 1874]


  
___

computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

  

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random

2008-05-16 Thread David Doshay
These shuffles are different than the one I used and attempted to  
describe.


Cheers,
David



On 16, May 2008, at 12:55 PM, terry mcintyre wrote:


An interesting note from
http://en.wikipedia.org/wiki/Knuth_shuffle which
appears to be pertinent to Don's remarks about a
limited number of games:


Limited PRNG state space


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Another beginner question: string management

2008-05-16 Thread Carter Cheng
I am having some difficulties deciding on a string management scheme which 
copes gracefully with merging groups. A first glance for me this seems like it 
is quite a slow operation akin to capture. The problem is how to have each 
stone vertex know which chain record to look up for information. I am curious 
how this is done in the current generation of MC bots.

Is the naive way the best i.e. going through each stone and updating the 
pointer to the record?

Regards,

Carter.


  
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Another beginner question: string management

2008-05-16 Thread Peter Drake

Carter:

It might help to look at the Orego code. In the doc directory,  
there's a file called Board-data-structures-explained.pdf.


Orego's current board-handling data structures are basically a Java  
"translation" of Lukasz Lew's Library of Effective Go Routines (EGO),  
although I've gone to somewhat greater length to explain them. If you  
find C++ easier to read than Java, by all means use Lew's code.


Orego is here (you'll have to download and unpack the latest .jar):

http://www.lclark.edu/~drake/Orego.html

Peter Drake
http://www.lclark.edu/~drake/



On May 16, 2008, at 4:29 PM, Carter Cheng wrote:

I am having some difficulties deciding on a string management  
scheme which copes gracefully with merging groups. A first glance  
for me this seems like it is quite a slow operation akin to  
capture. The problem is how to have each stone vertex know which  
chain record to look up for information. I am curious how this is  
done in the current generation of MC bots.


Is the naive way the best i.e. going through each stone and  
updating the pointer to the record?


Regards,

Carter.



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Re: [computer-go] Another beginner question: string management

2008-05-16 Thread Carter Cheng
Thanks for pointing to the existence of this document. It clarifies some things 
about a conventional light playout UCT design(It also answered a question about 
pseudo-liberties I guess they are equivalent to what I term |multi set 
liberty|). From the code I gather Orego (thus libEgo) does update all the 
pointers to the chain record.

There are still a few design tradeoffs I dont quite understand such as caching 
adjacent vertex properties in the vertex. How much and why does this result in 
a speedup?

Regards,

Carter.



--- On Fri, 5/16/08, Peter Drake <[EMAIL PROTECTED]> wrote:

> From: Peter Drake <[EMAIL PROTECTED]>
> Subject: Re: [computer-go] Another beginner question: string management
> To: "computer-go" 
> Date: Friday, May 16, 2008, 4:39 PM
> Carter:
> 
> It might help to look at the Orego code. In the doc
> directory,  
> there's a file called
> Board-data-structures-explained.pdf.
> 
> Orego's current board-handling data structures are
> basically a Java  
> "translation" of Lukasz Lew's Library of
> Effective Go Routines (EGO),  
> although I've gone to somewhat greater length to
> explain them. If you  
> find C++ easier to read than Java, by all means use
> Lew's code.
> 
> Orego is here (you'll have to download and unpack the
> latest .jar):
> 
> http://www.lclark.edu/~drake/Orego.html
> 
> Peter Drake
> http://www.lclark.edu/~drake/
> 
> 
> 
> On May 16, 2008, at 4:29 PM, Carter Cheng wrote:
> 
> > I am having some difficulties deciding on a string
> management  
> > scheme which copes gracefully with merging groups. A
> first glance  
> > for me this seems like it is quite a slow operation
> akin to  
> > capture. The problem is how to have each stone vertex
> know which  
> > chain record to look up for information. I am curious
> how this is  
> > done in the current generation of MC bots.
> >
> > Is the naive way the best i.e. going through each
> stone and  
> > updating the pointer to the record?
> >
> > Regards,
> >
> > Carter.
> >
> >
> >
> > ___
> > computer-go mailing list
> > computer-go@computer-go.org
> >
> http://www.computer-go.org/mailman/listinfo/computer-go/___
> computer-go mailing list
> computer-go@computer-go.org
> http://www.computer-go.org/mailman/listinfo/computer-go/


  
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] mogo-pr-4core on cgos 9x9

2008-05-16 Thread Hideki Kato
Dear CGOS watchers, :)

Mogo-pr-4core is the public release (not big float) version of MoGo 
and running on Intel Q9550, latest 45nm chip of Core2 micro 
architecture with larger L2 cache (2 x 6MB), at 3.4 GHz (8.5 
x 400MHz; overclocked from rated 2.83GHz) on ASUS 
P5K-VM motherboard.

Its performance is almost tie against mogo-big-4core but seems better 
to others.  Somewhat interesting.

-Hideki
--
[EMAIL PROTECTED] (Kato)
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/