Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: a question about redesigning my alphabeta

Author: Dan Honeycutt

Date: 20:28:56 03/13/04

Go up one level in this thread


On March 13, 2004 at 20:43:01, Uri Blass wrote:

>On March 13, 2004 at 20:29:34, Dan Honeycutt wrote:
>
>>On March 13, 2004 at 17:47:06, Uri Blass wrote:
>>
>>>On March 13, 2004 at 17:40:06, Russell Reagan wrote:
>>>
>>>>On March 13, 2004 at 17:32:49, Uri Blass wrote:
>>>>
>>>>>I think that you do not understand my idea
>>>>>
>>>>>I suggest to do exactly the same things in the same order but to check for
>>>>>repetition or hash cut off before calling search and not after calling search.
>>>>
>>>>Is this what you are wanting to do? Let's say the search normally looks like
>>>>this:
>>>>
>>>>int AlphaBeta(int depth, int alpha, int beta)
>>>>{
>>>>    if (depth == 0)
>>>>        return Evaluate();
>>>>
>>>>    TryRepetition();     // <--------
>>>>    TryHashTable();      // <--------
>>>>    TryNullMove();       // <--------
>>>>
>>>>    GenerateLegalMoves();
>>>>    while (MovesLeft()) {
>>>>        MakeNextMove();
>>>>        val = -AlphaBeta(depth - 1, -beta, -alpha);
>>>>        UnmakeMove();
>>>>        if (val >= beta)
>>>>            return beta;
>>>>        if (val > alpha)
>>>>            alpha = val;
>>>>    }
>>>>    return alpha;
>>>>}
>>>>
>>>>You are wanting to do this?
>>>>
>>>>int AlphaBeta(int depth, int alpha, int beta)
>>>>{
>>>>    if (depth == 0)
>>>>        return Evaluate();
>>>>
>>>>    GenerateLegalMoves();
>>>>    while (MovesLeft()) {
>>>>        MakeNextMove();
>>>>
>>>>        TryRepetition();     // <--------
>>>>        TryHashTable();      // <--------
>>>>        TryNullMove();       // <--------
>>>>
>>>>        val = -AlphaBeta(depth - 1, -beta, -alpha);
>>>>        UnmakeMove();
>>>>        if (val >= beta)
>>>>            return beta;
>>>>        if (val > alpha)
>>>>            alpha = val;
>>>>    }
>>>>    return alpha;
>>>>}
>>>>
>>>>Basically to avoid the extra function call?
>>>
>>>Yes
>>>Except that I thought to trynullmove in the beginning of the search.
>>>
>>>It may be better to try null move also not in the beginning of the search
>>>because it is possible that null move does not have search call and only call
>>>qsearch.
>>>
>>>Uri
>>
>>I don't think you want TryNullMove() where shown in the second example.  After
>>MakeNextMove() you have a new position which could be a repetition or be in the
>>hash table.  but TryNullMove() should come before GenerateLegalMoves().
>>
>>Dan H.
>
>I do not understand.
>The order is the same order in both examples.

In the first example TryNullMove() comes before GenerateLegalMoves().  In the
second example TryNullMove() comes after GenerateLegalMoves().

>The difference is that there are less calls to search in the second example.
>
>In both cases tryNullMove is done after
>makenextmove,tryRepetition and tryHash.
>
>Maybe I should not care about small speed optimization but I see no reason not
>to do the code faster if I can do it without doing it less easy to read.
>
>Uri

Nobody has to be able to read and follow the code but you.  Every bit of speed
helps.

Dan H.



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.