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

Re: computer-go: Languages for programming go are?



I don't think there  can be a good benchmark   of pure speed.  No  two
programs do the same  thing.  But when I  read your description  I was
surprised at how  similar your data  structure  seemed to be to  mine.
But maybe it's not that similar, you do more things  that I do.  But I
think seeing  your  numbers  was  useful  to  me anyway,  because   it
motivated me to  think  about what was  going  on.

Don



   From: "Phil" <PhilippGarcia@xxxxxxxxxxxxxxxxx>

   Thanks Don & Anders!

   After reviewing my random game test algorithm, I must state that is
   shouldn't be used as a benchmark (my mistake). It's main purpose was to find
   bugs. It works by generating completely random moves and attempting to play
   them. An illegal move is turned into pass (12% of all moves). This,
   unfortunately, inflates the performance figures. So that we can compare
   apples to apples, can anyone propose a benchmark algorithm?

   Phil

   ----- Original Message -----
   From: "Don Dailey" <drd@xxxxxxxxxxxxxxxxx>
   To: <computer-go@xxxxxxxxxxxxxxxxx>
   Sent: Tuesday, January 02, 2001 9:37 AM
   Subject: Re: computer-go: Languages for programming go are?


   >
   >    From: "Anders Kierulf" <anders@xxxxxxxxxxxxxxxxx>
   >
   >    > Anyway, I'm curious about what other knowledge is incrementally
   updated
   >    > by my fellow Go programmers, and how, if you don't mind.
   >
   >    SmartGo currently keeps the following information up-to-date:
   >    - Number of black and white stones on the board.
   >    - Zobrist hash code (64 bits).
   >    - Number of empty neighbors for each point.
   >    - The stones in each block (in a circular linked list).
   >    - The anchor (smallest stone in a block) of each stone.
   >    - The liberties and liberty count of each block (in an array).
   >    - (Optional) Bitboards for all black, white, and empty points.
   >
   >    > Just for some sporty fun, my Go program on PIII-500 can execute about
   >    > one million random moves in under 5 seconds:
   >    >
   >    > Board::TimingTests()
   >    > ---> Playing Random Game
   >    > ***> 1000000 Turns
   >    > ***> 4.625 seconds.
   >    > ***> 216216 turns per second.
   >
   >    Can you elaborate on what you mean by playing random games? To make it
   a
   >    more realistic test, it should probably include taking back the moves
   >    played, and also check some random liberty counts and iterate through
   >    liberties between moves.
   >
   >    Anders Kierulf
   >    www.smartgo.com
   >
   >
   > Are these numbers based on taking back moves or just making them?
   >
   > I would like to emphasize that my test  does both.  Even though taking
   > back moves is free for me,  I presumably pay for this  up front with a
   > slower move maker.   (Actually, is my move  maker really slower?   I'm
   > not convinced of   this  because every   program  has to  provide   an
   > equivalent mechanism  and extra logic for taking  back moves.)
   >
   > I get 300,000 nodes per second, on a pentium II  laptop running at 400
   > MGH which includes evaluation,  which is  fast  and simple, but  by no
   > means free.
   >
   > Phil's program  is  doing some  work mine does  not do,  because he is
   > keeping some  bit boards  updated too.   So it's  hard to construct an
   > apples to apples test unless he can  turn that stuff  off.  I have yet
   > to see a good   reason to turn   my program into  a hackery  of global
   > variables that are updated  in place, but I would  do this if it meant
   > extra speed.  I don't know of a fair way to test this without actually
   > going through this excercise, but I  need a lot of motivation, because
   > I think my program is at least pretty fast, if nothing else.
   >
   >
   > Don
   >