Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Delta Pruning

Author: Stuart Cracraft

Date: 07:13:29 08/11/04

Go up one level in this thread


On August 11, 2004 at 04:29:35, Tord Romstad wrote:

>On August 10, 2004 at 23:41:46, Stuart Cracraft wrote:
>
>>This repy from Bob Hyatt to Alessandro 5 years ago
>>seems the best explanation so far. Anything to add
>>anyone? Implementation gotchas?
>>
>>Mine is (roughly) and untested until the ovenright run:
>>
>>  quiesce
>>  :
>>  baseval = eval();
>>  :
>>  while next capture move available
>>    if (value_of_captured_piece + (2*maxpositionalscoresofar) + baseval
>>           < alpha)
>>       continue;
>>    else
>>       makemove
>>       see or mvv/pva, etc.
>>       decide whether to search further
>>       unmakemove
>>    fi
>>  endloop
>>  :
>>  :
>
>"Delta pruning" was a new name to me.  The above looks exactly like what
>is usually called futility pruning.  The pseudo code above looks OK, but
>there is one simple improvement:  In addition to the value of the
>captured piece, you also add the change in piece square table score.
>
>Tord

What I semi-finalized on was this
quiesce
 :
 baseval = eval();
 while another captured move available
    delta=MAX(alpha-fifthofapawn-baseval,0);
    seeok=see(bd,tosquare);
    if (seeok < delta) continue;    // cutoff/delta skip/futility prune
    if (seeok >= 0)
      makemove
      :
      normal search
      :
      unmakemove
     fi
 endloop

The two uses of see in this constitute the delta cutoff / futility prune
(the first seeok use) and the cutoff of anything that is a negative exchange
(the second seeok use.) Pins and xrays are not considered by this see routine.

So far, the delta is more effective in the limited testing. There was
a problem with the overnight testing so it will return tonight with
the fixed bug. Also the timing took too long so I'll just run the longer
30 second test since there are 4 tests of about 2 hours each.

Stuart

>>  quiesce
>>  :
>>  baseval = eval();
>>  :
>>  while next capture move available
>>    if (value_of_captured_piece + (2*maxpositionalscoresofar) + baseval
>>           < alpha)
>>       continue;
>>    else
>>       makemove
>>       see or mvv/pva, etc.
>>       decide whether to search further
>>       unmakemove
>>    fi
>>  endloop
>>  :
>>  :

nosee300.log
**** 6.78/27.52 67% 202/300 266.45 63525832 211753/1/238419 0/0/3907115/0/0/0
seeboth.log
**** 6.76/27.47 67% 201/300 266.99 63400468 211335/1/237465 0/0/3878010/0/0/0
seedelta.log
**** 7.24/19.61 66% 198/300 266.27 55757128 185857/1/209401 0/0/1344309/0/0/0
seequiesce300.log
**** 6.98/23.91 68% 204/300 266.26 56881676 189606/1/213633 0/0/1925566/0/0/0





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.