[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [computer-go] Computer Go hardware



I don't have any secrets, unless it's my approach, and a lot of highly tuned
move generation C code that no one else could read :)

My approach favors tactics over territory evaluation.  My territory
evaluator
is primitive.  I have good search engines for string tactics and life/death
tactics.
The first uses alpha-beta, highly pruned.  The life/death search is best
first.
The tactical search sorts moves based on the number of safe liberties of the
string,
(compared to number of safe liberties of neighboring strings).  It knows
almost nothing
about eyes, but it knows how to count shared liberties.

My other secret is to tune tactics using life and death problems, and tune
full board
strategy using games against people.  I do almost no tuning against other go
programs.
My regression testing is almost all life and death problems.  I do no self
play or play
against older versions.

My approach is to build a module using heuristics that gives reasonable
accuracy, and only
improve it when needed.  I've seen many go programmers get stuck on making
some module
perfect, and never finish a whole program.

My approach is very modular. I classify, then evaluate. For example I can
change the code for 
evaluating knight move connections independent of any other connections.
It's a separate
module.  I don't like approaches that for example lump all connectivity into
a single number
based on some distance metric, since tuning it for one kind of connection
will break others.

I almost never tune parameters.  I tune by adding special cases to
heuristics to make them more
accurate.  For example, my code for evaluating completely surrounded big
eyes looks at
about 5 features (size, perimeter, number of pointy ends, ...), and has a
simple formula to
give the number eyes based just on the perimeter, followed by about 30
exceptions.  I never
sat down and tried to plan all possible eye shapes.  I started with just the
perimeter, and
added exceptions as they came up in games of life and death problems.

There are some low level secrets I can pass on from other programs, but I
don't use them
myself.

Many programs use single dimension arrays with 20 elements per row, to make
it easy to test
edge conditions.  Single dimension arrays are faster.  I use single
dimension arrays with 361
elements, although it is somewhat slower.

Many programs (including mine) have a array which holds the string number of
the stone 
at each point.  Some programs use the least significant bit of the string
number to indicate
the color of the string.  This is faster and smaller than using a separate
array.

Does this count as a "secret sharing"?

David

> -----Original Message-----
> From: computer-go-bounces@xxxxxxxxxxxxxxxxx 
> [mailto:computer-go-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of 
> Frank de Groot
> Sent: Wednesday, October 20, 2004 2:31 AM
> To: computer-go
> Subject: Re: [computer-go] Computer Go hardware
> 
> 
> SYNERGY BY COOPERATION BETWEEN COMPETITORS
> 
> I know that the most successful Go programmers do not share 
> their best ideas too often. And they keep certain key parts secret.
> 
> Still I think that the "disadvantage" of sharing one key 
> idea/principle/component probably outweighs the fact that you 
> may get in return several other "secrets".
> 
> So I thought of sharing something that all Go programmers 
> would benefit of (it's about Zobrist hashing, how to make it 
> much better and I know that just about nobody knows this 
> "secret", some of the best Go programmers people I spoke with 
> had never heard of the technique).
> 
> So if we all agree to share the "secret" we would otherwise 
> not share, we might all be elevated a bit higher. Say we hear 
> 20 ideas, 7 of them new to us and 2 applicable to our own 
> program. Would perhaps still outweight the sharing of the own 
> idea 2::1?
> 
> _______________________________________________
> computer-go mailing list
> computer-go@xxxxxxxxxxxxxxxxx 
> http://www.computer-go.org/mailman/listinfo/computer-go/
> 

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