Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: cute position

Author: Tim Foden

Date: 08:20:19 08/15/03

Go up one level in this thread


On August 15, 2003 at 10:33:11, Uri Blass wrote:

>On August 15, 2003 at 10:19:25, Tim Foden wrote:
>
>>On August 15, 2003 at 10:13:05, Uri Blass wrote:
>>
>>>On August 15, 2003 at 10:03:06, Anthony Cozzie wrote:
>>>
>>>>On August 15, 2003 at 09:56:35, Uri Blass wrote:
>>>>
>>>>>On August 15, 2003 at 08:36:00, Anthony Cozzie wrote:
>>>>>
>>>>>>[D]r4r1k/1b3p1p/pq3N1p/n3p2N/Pp6/3Bn3/1PP1Q1PP/R4R1K w - - 0 26
>>>>>>
>>>>>>1. Rg1 Rfc8 2. Bxh7 Qd4 3. Rab1
>>>>>> = (-0.89)      Depth: 5/12     00:00:00.25     40kN
>>>>>>1. Rg1 Rfd8 2. Rae1 Bxg2 3. Rxg2 Nxg2 4. Qxg2 Qg1 5. Rxg1
>>>>>> = (-1.00)      Depth: 6/16     00:00:00.70     153kN
>>>>>>1. Rg1 Rfd8 2. Rae1 Bxg2 3. Rxg2 Nxg2 4. Qxg2 Qb7 5. Rxe5 Qxg2
>>>>>> + (-0.70)      Depth: 7/19     00:00:01.36     377kN
>>>>>>1. Rg1 e4 2. Bxe4 Bxe4 3. Nxe4 f5 4. Nef6 Rfd8
>>>>>> = (-0.09)      Depth: 7/19     00:00:02.15     685kN
>>>>>>1. Rg1 e4 2. Bxe4 Bxe4 3. Nxe4 f5 4. Qxe3 Qxe3
>>>>>> = (0.00)       Depth: 8/23     00:00:03.48     1192kN
>>>>>>1. Rf2 e4 2. Bxe4 Bxe4 3. Nxe4 f5 4. Nef6 Rfc8 5. Qd3 Rd8
>>>>>> = (-0.04)      Depth: 9/30     00:00:20.53     7692kN
>>>>>>1. Rf3 Bxf3 2. Qxf3 Qd4 3. Re1 Qh4 4. g3 Nxc2
>>>>>> = (0.25)       Depth: 10/33    00:00:42.98     16634kN
>>>>>>1. Rg1 Qd4 2. Rae1 Nec4 3. Bxc4 Nxc4 4. Rd1 Qc5 5. Nd7 Nb6 6. Nxf8 Rxf8
>>>>>> = (0.43)       Depth: 11/39    00:01:25.00     33717kN
>>>>>>1. Rf3 Bxf3 2. Qxf3 Qd4 3. Re1 Qh4 4. g3 Nac4 5. gxh4 Ng4 6. Bxc4 Nf2
>>>>>> + (0.73)       Depth: 12/48    00:05:37.18     133815kN
>>>>>>1. Rf3 Nxg2 2. Qxg2 Rg8 3. Qe2 Rg5 4. Be4 Rc8 5. h4 Rg6 6. Nd7 Qd4 7. Bxb7 Qxh4
>>>>>>8. Qh2 Qxh2 9. Kxh2
>>>>>> = (1.24)       Depth: 12/48    00:12:16.28     298098kN
>>>>>>
>>>>>>Very tough for Zappa.  5 minutes.  It changes its mind a lot here as well, which
>>>>>>never helps - Rg1, then Rf2, then Rf3, then Rg1, then Rf3 again.
>>>>>>
>>>>>>anthony
>>>>>
>>>>>I wonder how does zappa knows not to consider first Rg1 at depth 12.
>>>>>zappa has a score for Rg1 at depth 11 and the first output at depth 12 is a
>>>>>score for Rf3.
>>>>>
>>>>>Uri
>>>>
>>>>I'm not sure what is strange (other than the slow times): Zappa likes Rg1 at
>>>>depth 11, fails high on Rf3 at depth 12, and ends up with Rf3 as the best move
>>>>at depth 12.
>>>>
>>>>anthony
>>>
>>>The fact that I see no score for Rg1 at depth 12.
>>>Does zappa have a score for Rg1 at depth 12 before finding Rf3?
>>>
>>>If it has a score then I do not see it in the output and if it decides to search
>>>Rf3 before Rg1 at depth 12 then how does it know to do it.
>>>
>>>Uri
>>
>>The current GLC can also do this sometimes.  If the first move score is lower
>>than alpha, it is not reported, and search continues.  If a move is eventually
>>found that is greater than alpha, then it is reported.  Thus you can change PV
>>at a given depth without printing a PV for the previous best move.  It doesn't
>>happen often, but it happens.  Maybe this is what is happening with Zappa's
>>output here.
>
>I always investigates fails low first but maybe it is better if I do not do it.
>
>>
>>And in my development version I've changed it to fail low immediately if the
>>first move fails low.
>>
>>Cheers, Tim.
>
>Do you mean that in the output you write that it fails low
>like the following output
>1. Rg1 --
>1.Rf3 +0.14
>
>or 1.Rg1 <0.13
>1.Rf3 +0.14
>
>Do you go back to the first move in the same iteration in case that you find
>nothing better than alpha for the other moves.

Yes.  But this is done in Aspirate.

e.g. a simplified version...

int  Aspirate( depth )
{
    make alpha = last-search-value - 0.4;
    make beta  = last-search-value + 0.4;

    value = SearchRoot( depth, alpha, beta );
    if( value is fail low )
    {
        adjust alpha.
        value = SearchRoot( depth, alpha, beta );
    }
    else if( value is fail high )
    {
        adjust beta.
        value = SearchRoot( depth, alpha, beta );
    }

    etc....

    return value;
}

int SearchRoot( depth, alpha, beta )
{
    int best-value = -mate;

    for( each move in root-moves )
    {
        make move
        value = -Search(depth - 1, -beta, -alpha);
        undo move

        if( value > beta )
            return value;
        if( value > best-value )
            best-value = value;
    }

    return best-value;
}

But in my devel version, I now do

if( value < alpha )
    return value;

after the if( value > beta ) above.

Cheers, Tim.



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.