Several issues that are not worth arguing. You can believe this or not, at your own peril, which is ok.hgm wrote:Well, if the good capture move is proven do be a blunder at lower depth, I would think that on the average it is a waste of time to search it first. The move is first searched in QS, and my experience is that if a capture is bad in QS, it usually gets a really low upper bound. Captures typically need a very specific refutation E.g. if a NxB is bad because the N was pinned on Q, so that NxB is refuted by RxQ, then RxQ is usually the only move that refutes it, and almost always the move that is first tried to refute it. So you get an upper bound of -600, even when alpha was at +200.bob wrote:What if you start with a good capture move instead, which is actually the best move most of the time anyway. And you have not proven that the move you store is not a blunder. ...
It seems a bit foolhardy to search a move that scores < -600 at d=0 first at higher depths, in the hope it will give you a cutoff > +200. Even when I knew nothing at all about the other moves, I would still bet my money on one of those blindly rather than stick with the -600.
I can see that it might not always be good to search the move with the highest upper bound first. But I would expect that there is some merit in postponing moves that have upper bounds that fall more than a piece short of alpha And making the frst move with a reasonable upper bound hash move would achieve that. If that move doesn't do the trick becaus ethe upper bound was too optimistic, not much would be lost.
In a _normal_ position, a capture is generally the best refutation move. In most positions, the move at the previous ply hangs a piece because this is an exhaustive search that tries everything. And capturing the hung piece is a quick way out. In many other positions, we are winning, and an even exchange (capture) is good enough to fail high as well.
In a _few_ cases, there might be a better move to try. And you are saying "let's try a completely random move, rather than the type of move that is best in the big majority of the cases."
You can _not_ use the score returned to a fail-low (ALL) node for anything useful. The score is a bound from the search below that position. It is not an _accurate_ bound. It is just a score that caused a cutoff. The true score could be _much_ worse. Why you would want to use this kind of score is a mystery. Ed used to do this in Rebel. We had this discussion years ago. He removed it and found it was significantly faster.
There is no "best" move at a fail-low node. There is no "good" move at a fail-low node. It is just the way alpha/beta works. Alpha/Beta is designed _only_ to find the best move at a root position and prove that all others are worse. It does _not_ prove how much worse they are. Unfortunately.
It simply does not work. Use it if you want, but it is a non-working idea, regardless of what you believe. Once you think about it for a while, you will begin to see why it just doesn't work. You are comparing random lower bounds (actually fail-high bounds from the next level down in the tree) when they are incomparable.
These "bad bounds" occur every other ply, by the time you get one back to ply-2, say, the bound is an approximation at ply 3, 5, 7, 9, ..., 51 or however deep this variation happened to go.
The simple solution is to test with and without over several thousand games to see what happens. You might have some success if you can somehow remember that some move appears to be very bad (particularly if it is a capture that SEE says is good which would order it early in a non-hashmove position, but how do you store that and where? We are talking about the "best move" at any given ply, and finding that at a fail-low node is hopeless, and that is the move we store as the best move. It had better be right or the search efficiency will go in the tank.