mcostalba wrote:Sven Schüle wrote: In contrast to Marco's remark above "it is not the same thing" I have the impression that both ways are possible in general, albeit under different conditions and viewpoints:
I don't think so, when you prune a move you always have an upper bound of what you can expect from that move, for instance if it is a capture you always knwow in advance (with somewhat good approsimation) what is the maximum gain of the move that you can expect, even without trying it, hence the possibility to prune without a qsearch() verification if the possible max gain is anyhow not enough to reach beta. In case of razoring a node the qsearch() is instead mandatory to avoid terrible mistakes due to possible opponent's hanging pieces.
Let me first react directly (1) on your statement above, before digging deeper into the topic further down (2).
1) I support what you say, but is that an argument for razoring not being applicable in both ways? You just say that in one case you need to do it differently than in the other, not that you can't do it at all.
Furthermore, the same information, like possible maximum gain, could be made available also at the node level since you are dealing just with the previous move of the opponent that had been made before entering the node.
2) After thinking and reading more about razoring I can now also imagine that Bob and you are actually talking about two really different ways of razoring. Both of you may of course correct me if I am wrong. Here is what I understood:
In your version, also implemented in Stockfish, razoring means to skip a node that seems to be bad enough to likely score well below alpha, i.e. razoring leads to failing LOW.
In the version Bob is talking about, and had also implemented in older Crafty versions, razoring means to reduce (or, as tried experimentally, possibly even skip) a move that seems to be bad enough to likely score well below alpha, which in turn means that, when making the recursive search call after that move (i.e. not skipping it), the opponent is left in a pretty good position that lets him fail HIGH.
For instance, in search.c of old Crafty 19.17, lines 456-458 (and essentially in subsequent versions up to 22.1) we find:
Code: Select all
else if (depth >= 3 * INCPLY && depth < 5 * INCPLY &&
(Material + RAZOR_MARGIN) <= alpha)
extended -= 60;
within the move loop of Search(), in the non-PV part after MakeMove() has been performed, meaning roughly that a likely weak move is reduced.
Both versions have in common that they are not applied in PV nodes, but both are in fact looking quite different, and yet both were called "razoring" for some reason.
@Marco + Bob: Is my view correct?
Sven