No, this is not the same. You apply inv-fn and fn after one another on (alpha,beta) before doing anything with it, which would be a no-op.Chan Rasjid wrote:Is it the same as Muller's?
What I do is this:
Code: Select all
for relevant ranges of the integer domain:-
fn(x) = x +1;
inv-fn(x) = x -1;
int search(alpha, beta){
alpha = inv-fn(alpha);
beta = inv-fn(beta);
for (moves){
score = -search(-beta, -alpha);
score = fn(score);
//etc...
}
return whatever;
}
The new axis is needed, because we are deeper in the tree. So mates-in-N that we find, are longer checkmates than mates-in-N that we found at a lower level.
The scores found in the new reference system are translated back to the previous reference system when passing them to the root. If we would do fail-hard, and the node above us returns alpha (the alpha with which it was called, as it is not aware of any other) to indicate a fail low, it actually returns inv-fn(alpha) as score. And applying fn(score) then transforms that back to the alpha in this node.
What makes you think this can have problems? I have been using this since 1980. I would think that it is a lot simpler for a novice to add 3 measly lines of code (simple conditional increments / decrements). Pseudo-code for the other system seems to involve much more.And Muller recommends this to a novice new to alpha-beta! Just propose the silly 10000 - D stuff which cannot have problems. Also is it certain those who use the ply-independent mate scoring do it correctly?