Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Check Extesion (somewhat long)

Author: Scott Gasch

Date: 22:20:45 01/02/03

Go up one level in this thread


On January 03, 2003 at 00:28:46, Martin Bauer wrote:

>Hi all,
>
>on Mr. Schröder's Page (thanks for the great page!) i read the an extension in
>REBEL is made, when the King moves _out of check_. In my own Engine I extend
>when the King is _in check_.
>
>Are there any known differences between these ideas, or are they equal?
>What are other engines doing?
>
>Without trying it, I would say that extending when King is _in check_ has the
>advantage, that you dont enter into the quiescence search with king being in
>check.
>
>Any experiences?
>
>Martin

I tried them both and for me extending the checking move is better than
extending the check evasion.  This is because I also extend on one reply to
check, mate threat from nullmove, singular (one good) reply to check, etc.

This can lead to long lings where one side checks (extended), and the reply is
forced (extended again).  That's both a blessing and a curse -- the engine has
seen some long forced lines with relatively low depth search but if you are not
careful these lines where both the check and the evasion are extended can blow
up your tree and hurt your branching factor.  Especially when one side can run
the other king around the board with checks but not make any real headway.  I
have a formula I use to decide when it's ok not to extend a checking move that
tries to address this problem.

The reason I tried the other way (extending the check evasion rather than the
check) was because I was struggling with the problem above (long lines when both
check and evasion get extended leading to bad branching factor) and thought this
would be a good way to limit it.  However on tactical test suites the change
performed poorly.  I think you could make it work, though, if you are willing to
fiddle with it for a while.

In the past I used to do something "clever" to try to control the check/evasion
both extended problem.  It involved taking away the extension in the previous
ply when I realized in the current ply that the checking move was lame.  So my
search might go:

A. depth left = 6 ply        (move is a check, extend)
B. depth left = 6 ply        (move proves the check was dumb, reduce)
C. depth left = 4 ply        ...

So basically you are extending from A->B so depth stays the same.  Then reducing
at B. so when you go to C. you have depth - 1 + Extension where Extension is
negative.

Vincent pointed out to me that this type of thing could not be good for he hash
table because the information stored for the tree under the lame check is all
reduced by one ply.  If you realized the check was lame when it was played you
could just choose not to extend and you are left with:

a. depth left = 6         (move is a check, but a dumb one)
b. depth left = 5         (move proves the check was dumb)
c. depth left = 4         ...

Same resulting tree size and more useful information in the hash table, perhaps.
 Anyway I have since stopped doing this "check anti-extension".

Check extension is by far the most often firing extension around -- I think that
a way to identify which checking moves are not really worth extending is a
powerful thing.  It's a hard problem though -- simple ideas like "not worth
extending if the checking piece falls immediately" cause the computer to put off
seeing disaster by check-hanging a few pieces... just enough to push the trouble
over the horizen.  Likewise this simplistic rule causes the engine to see smart
sacrifices one ply later.

There's a solution here, I think, but it's based on things like the current
alpha..beta window and the expected score after the check.  If you are
absolutely sure the checking move will fail high it might not be worth
extending.  The thought being that it is a rare thing for a move to look
significantly crushing and then end up not being so good after all when you look
a little deeper.  So by extending the crushing check you are burning more
time/nodes seeing exactly how great this move is when your opponent is not going
to let it happen anyway.

The converse might not be wise, though.  If it looks certain that the check will
fail low by extending the move you may see that it ends up being better than you
thought -- e.g. it's a sound sacrifice but you have to look at it deeper to see
why.  In general I think by looking deeper at a checking move it's more likely
to look better than worse than you first thought.

If you expect the check to be anywhere near the PV it's probably worth
extending.  Especially if alpha is way low... maybe indicating that a checking
move might be used as a stalling tactic.

Scott



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.