Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: NULL MOVE

Author: Don Dailey

Date: 22:02:34 02/25/99

Go up one level in this thread


On February 25, 1999 at 21:23:30, Will Singleton wrote:

>
>On February 25, 1999 at 19:45:50, John Stanback wrote:
>
>>On February 24, 1999 at 19:16:27, Bruce Moreland wrote:
>>
>>>
>>>On February 24, 1999 at 15:37:58, Don Dailey wrote:
>>>
>>>>My program is a mixture of static rules and null move.  I do null
>>>>move when I have significant depth remaining, but when I am near
>>>>end nodes I do a simple static attack analysis.  This has proven
>>>>to be a significant improvement to my chess program.  It is faster
>>>>than null move and slightly riskier, but the net affect is
>>>>a stronger chess program (for me.)   Even though it's probably
>>>>riskier, it does pick up things null move will miss although the
>>>>converse is also true.
>>>
>>>Can you describe this or give examples please?  I know that some people do this
>>>but I haven't the vaguest idea how it works.
>>>
>>>bruce
>>
>>In Zarkov, I also use a combination of null move search and static
>>evaluation to selectively prune the tree.  At depths 4 and higher I
>>use standard null-move search with R=2.  Like Don, at depths 1-3 if
>>the static eval is greater than beta+margin then I use static
>>threat detection (and sometimes depth reduced searches) to try to
>>prune the tree.  On some problems this works better than null-move and
>>sometimes worse.  Overall I've gotten a little better results.
>>Some of the threat detection stuff is a little "ugly", but whatever
>>works...  :)
>>
>>I first discovered the simple heuristic approach to selective search
>>in 1988 and like Don I couldn't believe that I had worked on my program
>>for years without thinking of this.  It's that mythalogical one line
>>change that gives a huge increase in strength that every chess
>>programmer dreams of -- except that it doesn't actually give a huge
>>increase in strength (at least not without adding the threat detection
>>stuff).  Anyway, when I first tried adding this line to the search
>>routine (at all depths) I was elated:
>>
>>if (static_eval > beta) return(beta);
>>
>>Even on my old 8 Mhz 286 Zarkov now cruised through the iterations,
>>giving some pretty nice looking PV's.  WOW!  Let's try some problems.
>>OOPS, it can't solve anything.  Well, so maybe the static eval isn't
>>quite good enough, the next step is to add some threat detection stuff
>>to try to fix the problem :).  This selectivity is actually the same
>>idea as null-move, except much riskier and trickier to implement.
>>Anyway, it's great fun to add the line above and see how fast the
>>search goes.
>>
>>What do most null-movers do at depth=1?
>>
>>
>>John
>
>
>I don't use null move at depths 1, so I'm looking forward to trying this "static
>selectivity tester", as Don put it.
>
>Will

A very simple thing you can do, and it will make your program stronger
is to use a big margin on the last ply only:

   if (static_core >= beta+margin) return(beta)

Try a margin around 1/2 pawn.   What will happen is that your program
will be faster, lose a single ply on many tactics but be somewhat
stronger.   This is kludge solution but will improve your program until
you get around to doing the right thing.  We were surprised that this
tests pretty well.  Half pawn doesn't cover a lot of tactics but
evidently enough to make a lot of difference.  This is far from
optimal and I don't recommend it for a finely tuned program but
it is a "one line change" that adds a few rating points if you
are doing nothing else but full width here.

But there is no reason why you cannot go all the way into quies
with null move.  You don't have to give up the last ply.  It's
just that at some point you are only doing a quies search after
a null move.  You will still see a speedup if you do null+quies
when you are entering your last ply of the main search.  This
is probably better than my 1/2 pawn margin which is just a
curiosity.   However I am convinced the right thing to do on
at least the last 2 ply is good solid "static threat detection"
as John calls it (a better phrase than the one I used.)

- Don










This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.