Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: futility and lazy eval

Author: Gerd Isenberg

Date: 11:49:40 04/29/04

Go up one level in this thread


On April 29, 2004 at 04:56:30, Daniel Shawul wrote:

>Hello
>
>My question is about normal futility at depth==1 and lazy evaluation.
>What i do is as follows
>
>      search()
>{
>        for each move {
>           MAKEMOVE()
>           if( depth == 1 &&
>               move is not checking &&
>               score + 300 < alpha
>                      prune;
>            ..
>            recurse to next ply
>        }
>}
>        quiescent()
>{
>        if(lazy score + margin < alpha ||
>           lazy score - margin > beta)
>                 score = lazy score modified by margin
>        else
>             score = eval()
>
>        if(score > beta) // should be >=
>            return beta;
>
>}
>
>         i am thinking the futility is redundant if the second case for lazy
>eval is present [lazy score - margin > beta]. What does the futility save me?
>i already made the move so only a call to quiescent is left which will
>immediately return??

Hi Daniel,

yes, seems there is some redundancy within your implementation.

What about to prune before making the move, and/or to throw lazy eval out?
Of course you need to know some properties of the move before pruning it,
no capture, no check, discoverd own attacking sliders, moving en prise pieces, a
kind of move score based on attacks, history heuristics or even piece square
tables, etc.

Have you used counter here and there, to get an idea how often you prune or do
lazy eval returns?

Cheers,
Gerd




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.