[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
computer-go: About Viking
On 8 Jan 01, at 9:59, Anders Kierulf wrote:
> Can you provide some information on your Viking program? The
web site in
> your signature doesn't appear to have been updated since 1997...
Yes, the homepage is completely uninteresting and will be for
some time. I am spending all my spare time now to beat gnugo on
NNGS... :-)
I have been interested in computer go for 10 years, but it is not
until recently I have made a program that is not utterly bad.
My approach first was to never use patterns for anything in my
program but 1 1/2 year ago I switched and made a fairly general
patternmatcher, which I now use for everything except tactics. I
guess the general approach is more or less similar to most
programs. There are no neural nets or something exotic in it just
algorithms and pattern knowledge for go.
The version playing on NNGS now does not know very much about
eyes and nakade. I am now rewriting the representation of groups
such that such pattern knowledge can be used.
The main idea is to have a very good an accurate evaluation
function, and make at least one whole board evaluation for each
possible move on the board. It does about 0.5 to 6 wholeboard
evaluations per second. (If it ran on a slower computer than 500
Mhz it would be painfully slow). The tactical reader can do about
5000 nodes a second.
-- Now my few cents on computer languages
I am programming in object pascal with Delphi 5 Standard.
Originally the code was written in C, then ported to C++ and then
finally to Pascal.
Delphi is as efficient as C++, not as complex but complex enough
to take advantage of object oriented programming - and it is very
easy to write user interface code with it. I make a visual inspection
window for every datastructure I use which make it much easier to
debug the code. Most of the cases the code is more or less
correct before it is used to play games. (Then I have to redesign he
code because ideas was bad... but thats another story)
-- On the discussion of raw representation of the board:
It is very complex (I think it is similar to what Manyfaces uses -
that was my impression when I read Fotlands paper on it), and is
designed to sacrifice memory for speed as it was originally written
for an 1Mhz Amiga.
Making and unmaking moves is completely irrelevant for the
performance of my program.
The fundamental bottleneck is the patternmatching, with only
patternmatching used it takes a few seconds to play a move.
With tactics on it needs up to 40 seconds to play well in messy
middlegame situations. The increase in strength from adding
tactics is about 4 stones.
I am now also writing a tactics-reader that should be able to handle
any kind of fighting much better. But this will be slow. I would be
very happy if it can make even 500 nodes/second. Perhaps I will
use that in some kind of emergency mode and not in the normal
whole board evaluation. The philosophy is that if it is very accurate
it can be as slow (node per second) as a dan-player. That is
dreaming of course. But thats my philosophy right now. Some
years ago it was write to spend 10000 of nodes on local tactical
search, but then I realised that this was perhaps very important for
10 to 20 moves in a game. But for the rest something different was
needed.
I almost forgot my main principle:
There should be no compromises in how the program represents
things. Either a chain of stones is connected or it is not, and
the program should now exactly why.
And there is no joseki-library. The idea is that the program should
be prepared for any move you play against it. A joseki-library is the
last thing I will implement in my program - that is: never since there
will never be a last thing to do....
I hope the blurb above is informative enough for your curious minds!
best wishes
Magnus