Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Futility Cutoff futile?

Author: Antonio Dieguez

Date: 15:47:22 08/30/01

Go up one level in this thread


On August 30, 2001 at 10:30:53, Koundinya Veluri wrote:

>This code comes before any moves have been searched at the last ply, but after
>the null move is done.
>
>IF depth == 1 && not extended for check && not extended for mate threat && not a
>forced position (according to hash table) && not following pv THEN
>    window = ???;
>    qscore = Quiesce(alpha - window, beta + window);
>    if(qscore <= alpha - window)
>        return alpha;
>    if(qscore >= beta + window)
>        return beta;
>END IF

Hi.

What I see here: Searching captures twice and even searching them with a bigger
window...

I know what you are doing but I recommend you write that this way:

(when depth =1 and blablabla...)

int ev=evaluate(...);

if (ev>=beta+window)
{ return beta; }

later then use futility prunning the usual way with a evaluation, using the ev,
for example:

for captures:
...
if (ev+expectedMaterialGain+window2<=current_alpha)
{ skip that capture }
...

for other moves:
...
if (ev+MaximumExpectedPositionalGainWithThisMove<=current_alpha)
{ skip this move. }
...

it is practically the same without any extra work!

The maximumexpectedblablabla I have it around 0.72, but I will try soon with
eval deltas depending of the move, fun work.

bye bye.

>
>Seems to be safe and improves speed on tactics a lot, when the correct window is
>chosen. Although it may look like a waste doing qsearch for every position at
>depth == 1, this does a lot more pruning than it does add to the tree. I tried
>the other futility pruning mentioned in the original post, but it didn't work as
>well for me.
>
>Koundinya




This page took 0.01 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.