Doesn't work so well in my testing. This was a MAJOR problem when I was working on DTS. If you try your trick, you will be astounded at how many times you say "ALL" when it is really "CUT". I found a better way was working back, as you back up. You know what the CURRENT node is, better than anything else. Which means that the previous node is the opposite, in general, except when move ordering back there is wrong, of course.Don wrote:Komodo uses a simple definition which seems to work extremely well. We count the number of nodes since the last PV node and go by the odd/even parity.bob wrote:Only problem is, you really don't know a node is an ALL node until you search all the moves without improving alpha. You can assume that if you get a fail high at depth D, then depth D-1 is likely to be an ALL node, but in DTS I found this to be prone to significant error, because move ordering is anything but perfect.rvida wrote:In 'All' nodes you can omit IID entirely since all moves are expected to fail low.lucasart wrote:For example, does it work to have a different min depth and reduction for IID between 'All' and 'Cut' nodes
For PERFECTLY ordered trees, yes. But a good program gets that wrong something like 10% of the time (wrong ordering). And that simply wrecks trying to categorize things forward from the root.
So the when you are in the PV nodes and do a zero window PVS search, that is a cut node and it usually will cut off. The node after it is always an ALL node and every other node swaps back and forth.
This "correct itself" implies too much. While you are in the middle of this mess, EVERYTHING is wrong, and any decisions you make are based on incorrect information.
This definition is always "correct" until a cut node does not fail or an all node does fail. When that happens, the search will unwind to some point and correct itself.
For example if an all node fails high, the parent node which is a cut node will simply have to try more moves. One of them will either produce the cut node that it should, or else none of them will. In that case the parent did not produce a cutoff and it's parent now gets involved - which is an all node. Eventually it will reset itself perfectly, or else it actually back up all the way back to a PV node and get researched as a PV node.
I agree that nulls at ALL nodes are worthless. Only NULLS at CUT nodes make any sense. But identifying which is which is error-prone. I fiddled with this "identify node types" for a year in DTS, because I REALLY want to split at ALL nodes, NEVER at CUT nodes, which is what YBW tries to do in a very simplistic way. And it, too (YBW) is wrong far more than I would like.
My objection is doing something different based on the projected type, because I REALLY want those ALL nodes to fail high when I am walking down some tactical path that I do not yet grasp. Cut/reduce/prune/etc the wrong move or moves and that ALL node won't reveal its true nature until it is too late and you are committed to a path that is going to get you killed.
But here is the beauty of that. If it gets back to PV node some of the same moves may get searched, but they will switch roles! The very same node that was considered a CUT becomes an ALL node and vice versa.
We only partially understand the repercussion of that but it seems to be a very nice quality for the search to have, especially if you want to treat the nodes differently. It essentially allows you to cheat move on some nodes by speculatively throwing t hem out or reducing them. If a research is triggered you are saved, if not you saved time.