My depth=1 is a frontier node. For heinz it was depth=0 so far as I remember. In any case, when I am at depth=1, i do full-width, but always call quiesce unless the move I search is a check which extends depth by 1, which leaves it at 1 for the next ply.Gerd Isenberg wrote:I think you are wrong here, see Heinz' "Extended Futility Pruning" paper:bob wrote: depth = remaining plies before calling Quiesce(). In Ken's original post of the negamax algorithm, he did this:
if (depth > 0)
v = -Search(..., ply+1, depth-1)
else
v = -Quiesce(..., ply+1, depth-1)
And most have written their code that way.
But Heinz did this:
if (depth >= 0)
v = -Search(..., ply+1, depth-1)
else
v = -Quiesce(..., ply+1, depth-1)
http://people.csail.mit.edu/heinz/dt/node18.html
http://people.csail.mit.edu/heinz/dt/node22.htmlAs far as I remember, your problem with Heinz was calling depth=1 nodes frontier nodes ...The well-known technique of futility pruning at frontier nodes (depth = 1) exploits the peculiarities of ``standing pat'' at horizon nodes (depth = 0). ``Standing pat'' means to compute the static evaluation score of a node in order to test it against the upper search bound for a possible fail-high beta cutoff without further lookahead. Thus, ``standing pat'' implements the null-move assumption during the quiescence search with static node evaluations serving as null-move scores of zero depth. The following two sections describe the theory and practice of futility pruning at frontier nodes in detail because they provide the foundations for our new pruning scheme.
http://www.stmintz.com/ccc/index.php?id=387518
I discovered the difference in our programs not by reading his paper, but by looking at his code.