Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: quiesce node explosion

Author: José Carlos

Date: 09:00:27 01/26/04

Go up one level in this thread


On January 26, 2004 at 11:10:55, Tord Romstad wrote:

>On January 26, 2004 at 02:53:37, José Carlos wrote:
>
>>On January 24, 2004 at 17:12:45, Tord Romstad wrote:
>>
>>>On January 24, 2004 at 15:57:50, Mike Siler wrote:
>>>
>>>>In an average middlegame position, around 80-85% of the nodes my program
>>>>searches are quiesce nodes. I have a static exchange evaluator and I only search
>>>>captures with SEE value > 0. It seems like other engines are always under 25%
>>>>qnodes. What else should I be doing to reduce these numbers?
>>>
>>>Use the SEE more aggressively.  When the static eval is below beta, but
>>>static_eval+(value of capturing biggest hanging enemy piece) > beta+margin,
>>>return beta.  This is too risky unless your SEE is very sophisticated.
>>
>>  This doesn't make sense unless you do a real qsearch in your SEE, which is
>>ridiculous of course.
>
>Yes.  That is why I don't do this at all nodes, but only when the evaluation
>function reports that the current position is "sufficiently close to
>quiescent" that it is safe to rely on the relatively simple SEE.
>
>Consider the simplest possible example:
>
>Assume that the side to move has no hanging, pinned or overloaded pieces,
>and that the opponent has an undefended hanging piece.  If the static
>eval plus the value of the hanging piece is considerably bigger than
>beta, it is reasonably safe to return beta.  This works even with
>a very simple SEE.
>
>>Otherwise, you simply assume the opponent doesn't have a
>>capture anywhere else on the board that can bring his score above alpha
>>again. I do not understand why you assume that.
>
>You are right, the presence of hanging pieces for the side to move elsewhere
>on the board is one of the conditions you should look out for when deciding
>whether you should search the captures or just return the SEE value of the
>biggest capture.
>
>Tord

  Thanks for the explanation. I was confused.
  I do something similar in Anubis, but instead of adding complexity to SEE, I
check it at the top of qsearch. If material is way below alpha and the opponent
can't make a capture that makes it near alpha, then I fail low. I can detect
attacks with a simple bitboard lookup so that's pretty cheap anyway. I guess
your gain comes from not needing to make() the move, but it wouldn't work for me
anyway because I won't know about attacks until I make the move and update my
bitmaps.

  José C.



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.