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.