Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Gerbil implementation request to Bruce Moreland

Author: Andrew Williams

Date: 09:44:40 08/09/01

Go up one level in this thread


On August 09, 2001 at 11:17:56, Dieter Buerssner wrote:

>On August 09, 2001 at 11:02:38, Andrew Williams wrote:
>
>>On August 09, 2001 at 10:48:18, Dieter Buerssner wrote:
>>
>>>On August 09, 2001 at 10:05:42, Andrew Williams wrote:
>>>
>>>>Here's my implementation of this in PostModernist:
>>>>
>>>>if(ply < (DEPTH-3)) {
>>>>    int m;
>>>>
>>>>    for(m=plystart[ply]; m < plystart[ply+1]; m++) {
>>>>        make_move(tree[m].mv);
>>>>        if(in_check(OTHERSIDE(whoseTurn))) {
>>>>            unmake_move();
>>>>            continue;
>>>>        }
>>>>        // Probe the TT. If found, react appropriately!
>>>>        ttr = tt_probe();
>>>>        if(ttr != NULL) {
>>>>            if(beta <= -ttr->beta && ttr->betaDraft >= (draft-1)) {
>>>>                unmake_move();
>>>>                return -ttr->beta;
>>>>            }
>>>>        }
>>>>        unmake_move();
>>>>    }
>>>>}
>>>
>>>Perhaps, I don't understand this correctly. Don't you ignore all possible search
>>>extensions, that might be triggered by the move here.
>>>
>>>Or is the "if(in_check(OTHERSIDE(whoseTurn)))" taking care of the check
>>>extension. (I am not totally sure, whose turn it is ...) It could also mean,
>>>that this is just the legality check. Or do you generate only legal moves?
>
>>I'm not completely sure I understand what you're asking.
>>The if(in_check(OTHERSIDE(whoseTurn))) test is checking
>>for an illegal position (ie if the move leaves the side
>>moving in check).
>
>Actually, this is how I understood it first, but then I got unsure ...
>
>I assume you extend checking moves normally in search. So what can happen?
>Assume you have depth 5. Now you try all the legal moves. You check the hash for
>a cutoff (draft 4 is enough). But what if one move is a checking move? In a
>normal search, you will probably extend one ply, and then search again for the
>other side with depth 5 again. So, in the "normal" search, you also need draft 5
>or better for a cutoff from the hash.
>
>So, it looks to me, that all search extensions are ignored by this approach.
>Especially, I would think, that very often the ETC is successful in typical game
>situations where the normal search wouldn't be. Earlier you quite likely will
>have searched the same line in the above example with depth 4. And stored it
>with draft 4 in the HT. You made the checking move. And searched again with
>depth 4, and stored with depth 4. No, the next time you visit the position, the
>first HT probe will fail to yield a cutoff (5 needed, 4 available), in the probe
>code above, you will have enough draft (4 is enough).  But I think, this works
>against the idea of search extension. This is also the reason, why I did not
>experiment with ETC yet. To take search extensions into account will almost
>yield in a full fledged search loop.
>
>I must admit, that I had some problems to express myself clearly here :-(
>If it is still too confusing, please complain, and I will try again.
>
>Regards,
>Dieter

Actually, after I pressed Submit, I understood what you were asking :-)

When I enter a node, I do this (ignoring some stuff that's not relevant):

1. Calculate draft, which is (depth-ply).

2. Probe the hash table, looking for the current position. If I find
   it with appropriate scores and drafts etc, I return. Note that I'm
   checking *before* applying extensions for this node.

3. Work out what extensions are required at this position (eg check, recapture
   etc).

4. Check to see if (given the extensions applied) I should enter qsearch.

5. Try a null move.

6. Try the hash move, if one was found in step 2.

7. Generate the moves

8. Do the ETTC loop shown above.

9. Enter the main loop. Here, I make moves, then recursively
   call alphabeta() with ply+1 and (depth+extensionsAtCurrentPly).


I think I do have an error, as you say. What I should be doing is
incorporating the extension for the current node in the test for
"sufficient draft" in my ETTC loop. I have a feeling that other
people do the extensions in a different place (after each make_move
in the main loop?) and for them this would look different again.

Thanks a lot for spotting this, Dieter.

My apologies for the rambling nature of this message; as much as
anything, I'm "thinking aloud" to help myself understand what I
am doing wrong.


Andrew



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.