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

Re: computer-go: FPGA



   From: Mike Gherrity <gherrity@xxxxxxxxxxxxxxxxx>
   Date: Wed, 30 Aug 2000 15:56:10 -0700 (PDT)
   CC: Mike Gherrity <gherrity@xxxxxxxxxxxxxxxxx>
   X-Mailer: ELM [version 2.4ME+ PL68 (25)]
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Sender: owner-computer-go@xxxxxxxxxxxxxxxxx
   Precedence: bulk
   Reply-To: computer-go@xxxxxxxxxxxxxxxxx
   Content-Type: text/plain; charset=US-ASCII
   Content-Length: 731

   Hi Don,

   > Dave, I  am interested in why a  computer would get consistantly worse
   > results   with more computing  power  and   why  you believe it's  not
   > possible to fix.

   Dana Nau at U. Maryland showed there were games with this property.  The
   deeper you search, the worse you play.  He called such games "pathological."

   It was also shown that scheduling can have such un-intuitive behavior.  Adding
   another cpu can actually increase the time it takes to finish a job.

   Although history has shown that more computing power improves play in many
   parlor games, including checkers and chess, it is not clear when this
   assumption may fail.  Perhaps Go has many pathological positions.  Has MFG
   encountered such positions?


	   mike


Yes, I am  familiar with the  pathological searches and have  heard of
this results.  My understanding was  that theoretical trees have  this
property, where you assign completely random  scores to end nodes in a
made up  graph of constant width.  I   don't remember what theoretical
evaluation function was used to compute scores at intermediate nodes.

I   don't  think this   result applies   in   practice  to  chess, go,
tic-tac-toe or any  typical 2 player game we  are used to playing.  Do
you remember  what   the  assumption was  concerning   the  evaluation
function used in these theoretical games?  I seem to remember that the
evaluation attempted to be corelated to a win probability based on the
number  of children that were game  theorectic wins, or something like
this but I don't remember the details.


I did  write a go program that  improves (based on self-play at least)
significantly   with  depth.  It's  not  a   good basis  for  a strong
tournament program, but it did seem to indicate that  it's not hard to
write  a program that has the  properties  that its strength is highly
corelated to depth of search.

Here is how the program worked:

I did  a board influence type of  analysis at the root  node to get an
initial  move  ordering only  but the  rest of  the  search was simply
iterative deepening  full width search.   The evaluation  function was
stone count only.  I used many tricks (mostly  based on liberty counts
of strings) to prune the tree, but always in a way that guaranteed the
same results  as  a  full  width search,  so  I   don't consider  this
selective in any way.

I played thousands of games on all different sizes  of boards.  On the
small boards I could  really search deeply.  I  never failed to get  a
significantly greater  win percentage  by  doing 1  extra search  ply.
This is exactly the same results you would get in chess.

I believed I succeeded in writing a scalable go  program and it wasn't
difficult to do.  However   I don't pretend that  this  was a GOOD  go
program or that  it  would even  be good  on  a computer running  100X
faster.  I don't  think it's the right way  to design a go program but
all  I wanted to learn is  if it was  possible to  write a scalable go
program and I am strongly inclined to believe that it is.

Also, I cannot  prove that the  program would play  better at depths I
was unable  to reach due  to time  considerations, but it  seemed very
likely that it would keep improving until it looked deep enough to see
the end  of  all game   variations.   Of course  this  would take  the
lifetime of many universes to properly test!  However it's easy to see
that given  enough  time, it  would in principle   play perfect go and
would be  infallible.  It doesn't  seem likely  to me  that there is a
level somewhere between this and what I tested where it would suddenly
play worse for a while.

So to me, the only question is can I write a practical program that is
competive  with modern   programs  and yet  also  has  this very  nice
scalable property?


Don