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

Re: computer-go: A problem with understanding lookahead



Your first sentence is not true, unless  your definition of "credibly"
is  extremely  forgiving.  Even  though most  programs  do   not do  a
significant  amount  of  tactical  analysis  as  part  of  the  STATIC
evaluation, it can and has been done.  Of course this gives you a much
slower evaluation, not the simple fast one  you envision.  

By the  way, it takes  a 2 ply search  WITH captures to see  a trivial
fork.  It takes 3 ply  to see that your opponent  can fork you if  you
don't respond  right now.  If you write  an  evaluation good enough to
know this, you  have  probably written  a  very slow evalautor.   Most
programmers  don't bother, because it is   more productive to design a
fast  evaluator and  let the program    do the extra searching.   Some
programs do more  of this than others,  it's individualistic.  I don't
know of many that try to find forks without a search.  (I think Zarkov
does however.)

I don't see much point in going on too much  more.  I think you have a
misconception  about how good Chess  evaluators are  and this is given
away by  your  statement  that you can  tell  who  is winning a  large
percentage of  the  time.  The  way it  works is that  you are usually
right  a large percentage of  the  time if  you crushing your opponent
(even then your evaluation may be wrong.)  If it's close, all bets are
off.

It's this way in Go too, if  you are already  dominating the board and
the  issue   is a few   dead   stones here and  there,  probably  your
evaluation at least knows you have an advantage.

In  Chess you can  be a queen up  which you would define as completely
wining, and yet be dead lost.    A simple unseen tactical shot makes
the evaluation complete and utter nonsense.  I can construct positions
all day long (with absolutely no difficulty) that will defeat any
evaluator you can write.   

In fact, I can write a program to generate these at  will.  I could do
a search from almost ANY position and find them scattered all over the
tree, I don't need to do anything fancy.    From the opening position:
  
   1. d4  e5?   material evaluation = 0.   
  
   refutation dxe5!   woops, the evaluation must have been wrong,
                      I've already lost the game.

----------------------------------------------------------------------




   From: Dave Dyer <ddyer@xxxxxxxxxxxxxxxxx>

   I still disagree strongly.

   I can write a chess evaluator that will take milliseconds to evaluate
   a position, and will play well enough to play credibly against human novices
   without any additional search.  Roughly, I'll count material, number of threat
   inputs to each space, threat outputs from each piece, and immediate king
   safety. This will be good enough to favor capturing material, detect threats, 
   avoid overloading pieces, and discover simple forks and uncovered attacks. 

   I'm pretty sure than any expert in the field would agree that these
   are the fundamentals, and then go on to name more aesoteric concepts
   to be added.   Just the simple fact that I can name these off the top
   of my head, and readily see how to implement them, should demonstrate
   that the framework is well understood.

   The easily computed quantities that a Go evaluator can use (liberties, 
   group size, geographical influence) are laughably bad as evaluators; 
   and moving beyond these obvious elements is uncharted territory. The
   best Go programs have made some progress, especially using patterns,
   but the progress has been painfully slow; and based on ad-hoc algorithms
   rather than a sound theoretical framework.

   The fundamental difference is that in chess, if you use simple concepts 
   such as I outlined, you can understand a position and tell who is winning
   a large percentage of the time.  In Go, you undersand NOTHING until you 
   have decided which stones are dead, and that is a fundamentally hard
   problem.