Re: [computer-go] Former Deep Blue Research working on Go

2007-10-11 Thread Unknown
On Thu, 2007-10-11 at 18:37 -0400, Chris Fant wrote:
> Someone already did:  Stone eater.
> 
> On 10/11/07, terry mcintyre <[EMAIL PROTECTED]> wrote:
> >
> > Erik,
> >
> > It would be great to see Steenvreter on the 9x9 cgos server. BTW, can you
> > translate "Steenvreter" for us English speakers? Thanks!

"Eater" is a bit too weak, IMHO.
"Stone gobbler" or "stone muncher" seems more appropriate.

HTH,
AvK

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


Re: [computer-go] SGF parsing

2007-07-09 Thread Unknown
On Mon, 2007-07-09 at 12:46 -0400, Joshua Shriver wrote:
> Ok found some KGS games, and they make a lot more sense. With the
> specification I can see what all of the OT, AP, TM, FF, etc commads
> are. However I don't understand the way it sets the location, so far
> nothing I've seen describes it.
> 
> ;B[kr]  for example.
> I thought Go boards used A..x 1..y notation. Perhaps I'm wrong.


SGF uses a different coordinate system (making it easier to make
mistakes ...) It is all in the Fine Manual:
http://www.red-bean.com/sgf/go.html#properties
Read it.

SGF is surprisingly easy to parse; the only "special" tokens the parser
needs to recognize are ()[]; ( \n and newline escaping add some
complexity, but can _initially_ be ignored.) 

> -Josh
> 
> On 7/9/07, Joshua Shriver <[EMAIL PROTECTED]> wrote:
> > Do you have a good example of a regular Go game in sgf?
> > A lot of the examples I found on the SGF spec site seem confusing, and
> > not sure if they're even for Go or backgammon, etc.

Ignore everything except for GM[1] (= go), and the generic part.

For simple sgf, (without variations or game collections) you can create
a parser in a few hours. This will probably include reading the manual
and understanding the format, too.

HTH,
AvK

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


Re: [computer-go] transition to the new CGOS

2007-04-04 Thread Unknown
On Wed, 2007-04-04 at 15:25 +0200, Unknown wrote:

> either, would have preferred periods or semicolons.)
Oops. I meant colons, of course.

AvK

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


Re: [computer-go] transition to the new CGOS

2007-04-04 Thread Unknown
On Tue, 2007-04-03 at 23:10 -0400, Don Dailey wrote:
> On Tue, 2007-04-03 at 23:01 -0400, Don Dailey wrote:
> >  
> >   cgos_player color name 
> > example:  cgos_player white Lazarus
> > 
> >   cgos_elo  color elo_rating
> > example:  cgos_elo white 1739?
> > 
> > and since cgos does use kyu/dan, I don't want to specify
> > a command at this time, but if I do it would likely be:
> > 
> >cgos_rank  color rank 

> Also, I forgot that I want to be able to specify the cgos
> game number,  so I would also add this command:
> 
> cgos_gameid  some_integer
> 
> 

Instead of polluting the namespace with a lot of domain-specific
set/get commands, you could wrap them all into one 'umbrella' command,
eg 'info'

cgos-info opponent_name Aunt Maud
cgos-info opponent_rank 10k
cgos-info game_date 20070304132355
cgos-info game_name [EMAIL PROTECTED]
cgos-info pressure 1013hPa

This naming for games is similar to what SMTP does with email,
and will allow you to run multiple instances of the server.

> It is likely there will be more than 1 instance of the
> CGOS server (perhaps 1 for different board sizes) but I
> hesitate to try to distiguish between them with more GTP
> commands.   So I would leave it up to the program authors
> to keep track of which server a game Id belongs to.
> 
> It's of course possible to send this all in one uber 
> command:
> 
>   cgos_game_info gameID white_name white_elo black_name black_elo
> 
> but it does not seem to be in the spirit of GTP.   
> 


According to the GTP-draft, you are supposed to use hyphens, not
underscores to prefix your private extensions. (I don't like them
either, would have preferred periods or semicolons.)


HTH,
AvK

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


Re: [computer-go] documentation for the IGS protocol ?

2007-02-22 Thread Unknown
On Thu, 2007-02-22 at 17:50 +, Stuart A. Yeates wrote:
> Does anyone know of a document outlining the IGS protocol?
> 
> There are a number of programs and servers which support the IGS
> protocol, including the IGS server. I am trying write a tool to
> interact with these servers and would prefer not to have to reverse
> engineer the protocol from the programs, especially since most
> implement only a very small handful of commands.

This one looks reasonable complete and original (though a bit verbose):


http://www.koders.com/noncode/fid2C78D24147B76E1CF1196C20428DC7BC62715F38.aspx

Enjoy ;-)

AvK

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


Re: [computer-go] documentation for the IGS protocol ?

2007-02-22 Thread Unknown
On Thu, 2007-02-22 at 17:50 +, Stuart A. Yeates wrote:
> Does anyone know of a document outlining the IGS protocol?
> 
> There are a number of programs and servers which support the IGS
> protocol, including the IGS server. I am trying write a tool to

I'm (still) working on one, too. (Basically for NNGS, but should work on
IGS, too)
I have been googling for "protocol.txt", but it seems to have vanished.
(that's what the "server wars" were all about) I'll see if I can dig it
up somewhere. In the mean time: reversed engineering is certainly the
way to go ...

Check:
http://computer-go.org/pipermail/computer-go/2006-July/005662.html


NB Yesterday, I released NNGS-1.1.21.
( http://sourceforge.net/projects/nngs/ )
Might come in handy for testing purposes.
Dave Dyer had a NNGS clone installed at boardspace.net, too, some 1-2
years ago. 
I have one running on my home machine at nngs.ziar.net 9696
Recently, a russian guy set up mastergo.ru 9696
, but he probably does not like too much automated play (without
notice).

Linkspam:
I have a copy of the archives of this mailing list
(from 1992 or so) set up at:

http://nngs.ziar.net/cgml/

HTH,
AvK

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


Re: Fwd: [computer-go] Zobrist hashing with easy transformation comparison

2007-02-14 Thread Unknown
On Wed, 2007-02-14 at 10:45 +0100, Erik van der Werf wrote:

> > From: Nic Schraudolph <[EMAIL PROTECTED]>
> > Date: 12 February 2007 10:45:50 GMT+11:00
> > To: computer-go 
> > Subject: Re: [computer-go] Zobrist hashing with easy transformation
> > comparison
> >
> >> did you read Anti Huima's paper? The idea looks similar, but
> >> unfortunately it does not work. I provided a proof of the defect
> >> on this list (end of 2002 if I remember well). It's not that easy
> >> to get a working scheme. In fact there is only one combination
> >> with 8 chunks of data. In 2002 I exchanged a lot of email with
> >> Nici Schraudolph, and we found the right scheme. We wanted to
> >> write a paper, but we did not (it takes time, and I had not that
> >> much time - mathematic and computer go is just a hobby for me).
> >
> > The bad news: a colleague here has proven that no standard
> > segmented Zobrist hash can work in less than 8 chunks - and that's
> > without color symmetry. That makes 16 chunks with color, not very
> > attractive!
> >
> > The good news: I've developed a defect-free scheme including color
> > symmetry that works in only 6 chunks, and has a very efficient way
> > to compute a canonical hash (that is: without having to compute all
> > 8/16 candidates). No contradiction to the above proof as it's not a
> > standard Zobrist hash. This is provably the minimal scheme.
> >
> > Do sit on me - I really need to finish writing this up! In the
> > meantime, as long as you don't need color, the 8-chunk scheme Erik
> > posted works fine. Nick's (if I understood it correctly - I took
> > r_x, r_y, r_xy to mean reflection about vertical, horizontal, and
> > diagonal axis, respectively) has a problem though: for all
> > positions p, r_x(r_xy(r_x(r_xy(p == p. Huima's scheme can't
> > work because it's really a 4-chunk scheme doubled up for color
> > symmetry.

Me too:

#define T_X(h) \
( (((h) & 0x) >>1 ) \
| (((h) & 0x) <<1 ) \
)
/* { 2,3,0,1,6,7,4,3} */
#define T_Y(h) \
( ( ((h) & 0x) >>2 ) \
| ( ((h) & 0x) <<2 ) \
)
/* { 3,1,2,0,7,5,6,4} */
#define T_P(h) \
( ( ((h) & 0x) ) \
| ( ((h) & 0x) <<3 ) \
| ( ((h) & 0x) >>3 ) \
)
/* { 0,2,1,3,4,6,5,7} */
#define T_Q(h) \
( ( ((h) & 0x) ) \
| ( ((h) & 0x) <<1 ) \
| ( ((h) & 0x) >>1 ) \
)

#include 
#include 


int main()
{
unsigned long val0, val1, val2, val3;
unsigned aa,bb,cc;
unsigned at,bt;
char * legend[4] = { "(X)" ,"(Y)" ,"(P)" , "(Q)" };

val0 = 0x12345678;

at = bt = 4;
for (aa=0; aa <4; aa++ ) {
switch(aa) {
case 0:val1 = T_X(val0); break;
case 1:val1 = T_Y(val0); break;
case 2:val1 = T_P(val0); break;
case 3:val1 = T_Q(val0); break;
}
for (bb=0; bb <4; bb++ ) {
if (bb==aa) continue;
if (bb < bt) at =4;
switch(bb) {
case 0:val2 = T_X(val1); break;
case 1:val2 = T_Y(val1); break;
case 2:val2 = T_P(val1); break;
case 3:val2 = T_Q(val1); break;
}
for (cc=0; cc <4; cc++ ) {
if (cc==bb) continue;
switch(cc) {
case 0:val3 = T_X(val2); break;
case 1:val3 = T_Y(val2); break;
case 2:val3 = T_P(val2); break;
case 3:val3 = T_Q(val2); break;
}
if (aa!=at) fprintf(stdout,"%8lx -%s-> %8lx"
,val0,legend[aa],val1);
else fprintf(stdout," -%s-> "
,legend[aa], val1);

if (bb!=bt) fprintf(stdout," -%s-> %8lx"
, legend[bb],val2);
else fprintf(stdout," -%s-> "
, legend[bb]);
fprintf(stdout," -%s-> %8lx\n",legend[cc],val3);
at = aa; bt = bb; ;
}
}
}

exit(0);
}

/**
Legend: T_X() and T_Y() transform the hash value, when flipping the X
and Y coordinates; T_P() and T_Q()
flipping over the diagonals. The rest is trivial.

HTH,
AvK


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


Re: [computer-go] MC Go Effectiveness

2007-02-08 Thread Unknown
On Thu, 2007-02-08 at 15:58 -0800, steve uurtamo wrote:
> > > > tranforms as the "cannonical" key.   In most cases 8 positions will
> > > 
> > > IIRC, choosing the smallest may cause some unwanted effects. Not sure...
> >
> > It's not quite as good as using 64 bits free and clear because there is
> > compression towards the lower bits.
> 
> i must be missing something here -- the whole point of canonicalization is
> that you want to be able to recognize a 'book line' when it appears, even if
> you have to rotate and/or reflect your board in order to match the book line,
> right?  you save 8x the space by only stashing one copy of the book line,
> and by using some canonical version of the hash key and doing 8 transforms
> on every board position when the game move is less than the longest known
> line length, or somesuch.

Yes. But Don's confusion was independent of the canonicalization, though
it was probably caused by it.

> 
> if you're only storing a few hundred lines, or a few thousand, why not store
> all 8 copies?  then it's just a lookup with no extra transforms.
> 

Sure. It is just an engineering decision: do you want to waste the
RAM-space, or only the CPU-time. For a few hundred records, optimising
for space is probably not worth the effort. For a larger fuseki /
joseki /pattern book, it probably is. CPU is cheaper than RAM, and a
cache miss is worth tens of instructions. It depends. (though "travel
light" is always a good adagium, see David Fotlands hilarious
compression of a joseki library into 12 bits/move, IIRC ;-)

BTW: once you choose the /8 gain by implementing canonicalization,
you'll probably want to implement /2 color-swaps, too. (but this will
only be profitable for libraries, not for 'history' such as in Don's
case.)

HTH,
AvK

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


Re: [computer-go] MC Go Effectiveness

2007-02-08 Thread Unknown
On Thu, 2007-02-08 at 15:55 -0500, Don Dailey wrote:

> The children of one parent almost certainly will have different 64 bit 
> keys than the children of the other parent.  

Not if the parents collide.
(apart from symmetry/canonical considerations):
if H(A)==H(B),
then after applying move 'm'

-->> H(A) ^ some_constant == H(B) ^ some_constant

So if you use Zobrist[move] as a some_constant value
(which I understand you do),
then if both parent moves A,B have a successor move (coordinate+color)
in common,
the resulting hashes for the successors will also collide.

> I don't see how you can conclude that I'm not getting much extra 
> safety.
> 
> By the way, I use zobrist hashing with XOR to generate these keys and 
> do all the rotations - choosing the smallest key of the 8 possible 
> tranforms as the "cannonical" key.   In most cases 8 positions will

IIRC, choosing the smallest may cause some unwanted effects. Not sure...

> hash to this same key but the positions are symetrically equivalent.

You mean: _after the canonisation_ they hash to the same key.


> 
> You could of course look at it backwards,  what are the odds that
> 2 child keys will match?  If you can find 2 that do match,  what are

For two children of the same parent, this is (given an adequate Zobrist
table) impossible. After canonisation, this is unclear (but can be
guaranteed by careful construction of the Zobrist tables).


> the odds that their parents will also have a matching key?   I 
> think this is very unlikely.

I think this is just as likely as the other way around,
since the ^ is its own inverse function.

HTH,
AvK


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


Re: [computer-go] MC Go Effectiveness

2007-02-07 Thread Unknown
On Wed, 2007-02-07 at 16:28 -0500, Don Dailey wrote:
> On Wed, 2007-02-07 at 16:17 -0500, Don Dailey wrote:
> > I have a hash funciton that creates a 64 bit "cannonical" hash of
> > the position.   The same hash is produced after a rotation for

Most people do incremental hashing, which is cheaper even if 8(16)
symmetric copies are to be maintained. YMMV.
 
> > example.   A book entry is a record with 3 fields,  a priority
> > value (how many times the deep search selected this position), 
> > the cannonical hash of the parent position and the cannonical
> > hash of the posiiton AFTER the move is played.This makes
> > collision very unlikely.The cannonical hash takes into
> > consideration simple ko,  so if a ko is possible it will hash
> > differently than the same position where the ko is illegal. 
> 
> Here is some more detail to make this clearer:
> 

Since you seem to be replying to yourself, I'll add some comments.

> typedef struct

typedef is useless here, IMO.
(but this is a matter of style, I agree)

> {
>   intcount;   // number of times this position/response seen
> (priority)

Warning: alignment will cause this struct to be 3* sizeof(U64), wastong
32 bits.
Warning2: if the count is never negative, "unsigned" would be more
appropiate.

>   u64key; // cannonical position key
>   u64resp;// resulting cannonical position

Warning: you are wasting (64- ~9) bits here, since the response stems
from a set of 361+1 choices, maximal.
(this would be different if you intend to search backwards in the
tree/dag, with 'resp' as search key)


> } book_entry;

That could reduce your struct to:

struct booklet {
u64 key;
u32 count;
u16 move;
/* you *could* store the de-canonilisation-info here: */
u16 spare;
};

, which will take only 2*64 bits.


> 
> These book_entry records are stored in a file and I keep them 
> sorted.   So the procedure to see if there is a book move is
Sorted on key? (Keep them sorted == resort periodically)
In that case, some kind of hashing would seem more appropiate, IMHO

> to binary search the file on the parent position key,  
> collect all of these records together (making sure there is a
> legal move which leads to the cannonical response key) and then

You are not clear here.
Is there only a one-move-step between key and resp ?
Why not store the move in the first place ? (instead of the resulting
hash)

> choose one of the available moves in proportion to the 
> priority values (the count field.)


HTH,
AvK

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


Re: [computer-go] Can Go be solved???... PLEASE help!

2007-01-13 Thread Unknown
On Fri, 2007-01-12 at 15:51 +, Mehdi Ahmadi wrote:
> Hello & thank in advance for any interests/ responses.
> 
> I'm unfortunately (or not) doing a dissertation as part of my final year
> project (undergraduate) on the game of Go. The exact title is: "Can the game
> of go be solved? Analysis of computational methodologies for go." And I have
> included my overall objectives below. 
> 
> I have many works from different people on different aspects of Computer Go
> which would make for great inclusion at different parts - but overall I am
> still gravely struggling. In reviewing some of these my greatest difficulty
> is in understanding exactly how say Monte-Carlo-UCT or even Alpha-Beta
> testing (pruning, etc) occur so as to be able to give a simplified depiction
> (illustrated or otherwise) of the process. Can this be done without having
> to go through the source code of say something like GNU Go?
> 
> Also another difficulty I've had is in trying to get further information on
> the commonly referred top ranking packages, Handtalk, Go++, Many Faces of
> Go, etc due to their commercial nature? (the only thing I've been able to
> find which is a bit outdated:
> http://www.inventivity.com/OpenGo/Papers/EditedGoPapers.html).


If they still exist online, most of these papers are suggested reading,
IMHO

WRT classic methods (alpha-beta, evaluation, Zobrist hashing, etc) a lot
of material can be found in computer-chess publications.

Another source of links can be found at Markus Enzenberger's online
bibliography:

http://www.cs.ualberta.ca/~emarkus/compgo_biblio/


Most of the computer go authors have posted on this mailing list, and
discussed their views and methods, and the design of their programs.

The archive of this mailinglist can be found at:

http://computer-go.org/pipermail/computer-go/



This archive starts at approx 2003. I have an archive of older stuff
(1993-) from this mailinglist stored on my personal website:

http://nngs.ziar.net/cgml/


HTH,
AvK


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


Re: [computer-go] Making Java much faster

2006-11-30 Thread Unknown
On Thu, 2006-11-30 at 14:44 -0800, David Doshay wrote:

> This is not my experience at all.
> 
> SlugGo was first written by a graduate student with data structures  
> that made sense to them, but not to me. I rewrote it to use  
> completely different data structures but with exactly the same  
> algorithm. It took less than half the time to run, and play was at  
> exactly the same level because it was move for move identical. Data  
> structures can have tremendous effect upon speed.
> 
> Also, my data shows that if I doubled the time allowed for playing,  
> thus "using" the time gained from faster execution for doing deeper  
> lookahead, the results did not improve, but actually got worse.
> 

To me, this just seems like horizon-effect in disguise.
Once you exhaust your ability to evaluate, you cannot see through the
fog. The horizon is dictated by the inability to evaluate correctly.
(try fuzzing up the evaluation results by 0.01-1 stone just by adding
some noise, to get my point. You will see the horizon come closer)

Using multiple instances of gnugo to do the evaluation for you, still
sticks you to the (#1) minimax+evaluation model, even if you apply the
slave-gnugo processes only for "local" problems (not mentioning
interactions, or how to identify subproblems)

Having slave processes to do your tsumego- or MC-evaluations for you,
still keeps you dependent on their evaluation noise. Adding CPU's wont
help to beat the noise, IMHO. It just pushes your horizon upto the point
where the fog hits you.

This is the point where I would like to introduce a paradigm shift.
But I cannot invent one, presently.

HTH,
AvK

(#1) by "minimax", I mean minimax-variants, including alpha-beta. They
are all the same.


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