Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: late move reductions

Author: Robert Hyatt

Date: 12:51:29 03/01/06

Go up one level in this thread


On March 01, 2006 at 15:42:18, Alessandro Scotti wrote:

>Yes I increment "count" every time a move is searched, and "fail_high" for moves
>that failed high.
>I actually did the implementation very quickly in order to participate to CCC
>(here's a quick report assuming you want to practice a little Italian before
>Turin! ;-) http://www.ascotti.org/programming/chess/ccc2005.htm) and with Heinz
>we could see it gave maybe 15-20 elo (at fast time controls). That version had
>validMoves >= 3 and depth >= 3 also. Later I changed both values to 4 and got
>another 15-20 elo. After that I decided to start working on another engine so I
>didn't experiment anymore with these settings.

OK.  I really worded my post badly.  Here is what I wanted to say:

I increment the fail high count by 100 each time a move fails high.  I also
increment the tried count by 1 at the same time.  Any time another move fails
high, and this move was tried but did not, its tried count gets incremented,
which lowers the "failed high percentage" significantly...

sort of:

if failed_high(x)
   x.count++
   x.fh+=100

if failed_high (y) (later)
   y.count++
   y.fh+=100
   if (tried(x)) x.count++

Hope that makes what I am doing clearer, whether it is good or bad is not
certain yet...



>
>On March 01, 2006 at 15:31:22, Robert Hyatt wrote:
>
>>On March 01, 2006 at 15:26:46, Alessandro Scotti wrote:
>>
>>>Hi Bob,
>>>well this is almost exactly what I'm doing in Kiwi, which is actually a
>>>straightforward implementation of an idea I got from Uri here on the CCC. The
>>>only difference I see is I don't have the "another move failed high" bit, I just
>>>count fail highs.
>>
>>Then here is a key question:
>>
>>If you only count fail highs, how do you know whether this move fails high here
>>and there, or everywhere?
>>
>>That's why I decided to count fail highs, along with failed lows when another
>>move failed high, so I could tell the difference...
>>
>>Or are you incrementing the counter _every_ time the move is searched???  It
>>seems that the two counter approach provides more information, particularly in
>>"small cases" where you have one fail high and 1 fail low.  Now you know that
>>this is a 50% fail high move rather than just knowing it failed high once.  One
>>of two probably is enough to say "don't reduce" as compared to a move that did
>>fail high 40 times, but it was tried 5000 times...
>>
>>Or, maybe I misunderstood what your code says...
>>
>>
>>
>>
>>>
>>>        int hindex = hpiece * 64 + curr.getTo();
>>>
>>>        if( haveHistoryPruning &&
>>>            depthExtension == 0 &&
>>>            validMoves >= 4 &&
>>>            ! curr.isCaptureOrPromotion() &&
>>>            ! givesCheck &&
>>>            depth >= (4*FullPlyDepth) &&
>>>            true )
>>>        {
>>>            int n = histTable[ hindex ].count;
>>>            int f = histTable[ hindex ].fail_high;
>>>
>>>            if( f < (n / 8) ) {
>>>                depthExtension = -FullPlyDepth;
>>>            }
>>>        }



This page took 0.02 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.