Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Futility Cutoff futile?

Author: Antonio Dieguez

Date: 06:58:07 09/01/01

Go up one level in this thread


On September 01, 2001 at 06:27:12, Koundinya Veluri wrote:

>On August 31, 2001 at 12:02:54, Antonio Dieguez wrote:
>
>>
>>>Interesting point, I'll have to try this before going on about the differences I
>>>see between them. But I don't understand one thing. The first part:
>>>
>>>>(when depth =1 and blablabla...)
>>>>
>>>>int ev=evaluate(...);
>>>>
>>>>if (ev>=beta+window)
>>>>{ return beta; }
>>>
>>>is happening at depth == 1. But it looks like these:
>>>
>>>>for captures:
>>>>...
>>>>if (ev+expectedMaterialGain+window2<=current_alpha)
>>>>{ skip that capture }
>>>>...
>>>>
>>>>for other moves:
>>>>...
>>>>if (ev+MaximumExpectedPositionalGainWithThisMove<=current_alpha)
>>>>{ skip this move. }
>>>>...
>>>
>>>are also happening at depth == 1. After depth == 1, I do a quiescence search
>>>anyway so what would I be pruning out?
>>
>>The moves skiped.......
>>
>>Anyway, are you acord with me that you are doing extra work right?
>>you can get the same effect without an aditional call to quiesce.
>>forget my futility prunning for captures and non captures if that is confusing
>>you, do the way you wish or were doing before. The only additional thing that
>>your qsearch adds is the if eval()>=beta+window then return beta, nothing more.
>>
>>
>>bye bye bye.
>
>Thanks for clearing my doubt. Yes, I'm probably doing more work than I need to,
>but that's the case for the rest of my program as well :). Ignore the
>eval()>=beta+window part, and I still don't agree that the qsearch is doing the
>same pruning as your futility pruning for captures an non-captures. The idea is
>the same but the conditions for pruning are very different. I tried futility
>pruning before but it just didn't work in my program. I guess they just work
>differently in every program.
>
>Koundinya

You could give it another try :)

forgive me to insist replying :)


int ev=eval();

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

then see captures with the normal alphabeta window

then:
if (ev+window<alpha)
{ return alpha; }

then see noncaptures if you are still here.

-----------
the main diff. is not see captures aditionally with bigger window.
-----------

In your code:

suposse quiesce>=beta+window
then we are going to cut off usually quicker here in the code above because the
captures are seen with a smaller window.

or suposse quiesce<=alpha-window
this is similar as to ask if ev+window<alpha after captures, sometimes equal and
sometimes not...
I realize now it is NOT exactly the same..., so I were a bit wrong in this point
am sorry, but this ev+window<alpha is a little more what one would want to ask,
and prunes even more. With less nodes.


Ok, good bye now.



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.