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

Re: computer-go: Re: Nullmove



I think everyone is missing the point  of null move selectivity.  I am
familiar  with the technique of analyzing  individual groups of stones
with  2  searches, one  from  whites point  of  view  and another from
blacks.  This is a powerful technique to  quickly determine if a group
is in critical danger for instance.  But this is not really "null move
pruning", which is something  different.  Null move pruning  is simply
another kind  of simple bounds  test and in  this context shouldn't be
viewed as anything  magic.  The  power of it  in chess  is that it  is
cheap (because of a reduction factor), it  is trivial to implement and
on top of this it is quite accurate as a bounds test.  It is in no way
the same as just doing two searches from the same position to the same
depth (or until some kind of termination.)  In my chess program I have
substituted "cheap  null move  bounds   testing" with other kinds   of
bounds testing with  good results, I view them  as a being pretty much
the  same  things,  only  implemented   differently.  All   good chess
programs use some kind of bounds testing but not necessarily NULL MOVE
PRUNING.  Rebel is an example of this.

But after  considering the nature  of  GO (to the   extent that my own
limited understand can take me)  I may be inclined  to agree with what
Dave is saying.   "Ignore this  threat at your  peril"  is exactly the
point, and since  I  believe GO to  be  closer to chess  endgames than
middlegames  with (relatively) few direct   threats and many long term
threats  looming (or "threats of  threats") the required reduced depth
search to make the test cheap may not do the job.

However, I really would like to hear some reports from people who have
actually tried  it.  I'm not sure the  nature of many GO programs lend
themselves very well to null  move pruning.  Probably you should start
with a basic full width search capable of doing at least 3 ply or more
and I'm not sure many programs are written this way, my own isn't.

Presumably,  a program  like this  would have a  good enough evaluator
that had some  abilities to  make  positional judgements  and  measure
degree's of threats.   If this is the  case, then an evaluator that is
reasonably  good might  work  well with  NULL MOVE  SELECTIVITY and is
worth a shot.  Really, the  point is that it's  fine to talk about it,
but I  am  not too eager  to  draw  a conclusion  in  either direction
without having a lot of experience with it.  Is there someone here who
does?

Most people think of null  move  selectivity as a tactical  technique,
but this  notion is in error  too.  Humans tend  to think  in terms of
tactics when thinking about algorithms like this, but NULL MOVE has no
problem discriminating between a tactical threat and a tiny positional
threat.  It   measures  threats of  ANY  magnitude.  It  is  better at
measuring  direct threats than  long  term threats, it doesn't  matter
what the magnitude of the threat is.

Based on Daves inuitions I am inclined to believe that it may not work
very well for GO.  Still, it should be explored, or has it already?

I  want to  avoid the trap  that I  think  happened in computer chess.
Common wisdom  dictated  a lot of  false  steps in computer  chess.  A
typical example is  that most people  thought a lot  about the problem
and decided  that computer chess  would require an extremely selective
highly intelligent deep searcher.  Those people  might still be right,
and yet sudden progress was made when people started relying on highly
optimized full width searching,  because they didn't initially realize
that  it  was  more important  to  be accurate  than  deep.  Once they
learned this  lesson they figured out  how to do  conservative pruning
later.  In a nutshell,  I think we should all  be skeptical of our own
intuitions, not to  ignore them but to take  them with a grain of salt
and let them gently guide us.  


- Don




> I agree with Dave:
> 
> At 02:01 PM 11/18/99 -0800, you wrote:
> >
> >
> >I think nullmove, while valid, is not all that useful for Go.  
> >The problem is that nullmove is useful only if it can give
> >a strong signal "ignore this threat at your peril".  This works
> >well for chess, where the refutation for most stupid moves is that
> >a piece gets captured.
> >
> >In Go, there is no strong signal in almost all cases, so nullmove
> >is not going to produce much useful information.
> >
> >In my problem solver, the standard way to run a problem is to run
> >it twice, once with "black moves first" and then with "white moves 
> >first".   Running black-first, then feeding the result of
> >that search into the white-first search, is roughly equivalent to nullmove.
> >
> >The upshot is that searching black-moves-frist first takes just as 
> >long as searching white-moves-first, and even when run to completion,
> >doesn't usually change the effort required to run the white search.
> >
> >There certainly is a space where nullmove-type tricks are useful, but
> >it's not a dramatic improvement.  The real problem is weak evaluators.