However, with best first, you can not get rid of those. Suppose the "good" branches drop like a rock at some key depth because of a tactical issue that is not visible at shallow depths. If you "threw those other positions away" you are beyond screwed. Best first keeps them all "open" even if they are not being expanded, so that they can be expanded if things go wrong along the primary pathways.Gian-Carlo Pascutto wrote:With depth-first, you have to store the entire tree searched so far, except for those few positions you can classify as too good or too bad (and hence are reduced heavily = low depth).bob wrote: With best first you have to store the entire tree searched so far, except for those few positions you can classify as won or lost.
Nothing you can do about that if you start off down the wrong path and discover after significant effort that it is no good.Otherwise, your move ordering sucks and you will search a much bigger tree than minimal.Otherwise, how will you ever have the "best node" to search.
At some depth, all the "best moves" can appear to suck, which leaves some very undeep and under-explored move as the next thing to search to full depth. Common terminology is to call this a "fail-low". Because the open-list, err, hashtable will not have a lot of information in this case, the branching factor tends to suck.At some depth, all the "best moves" can appear to suck, which leaves some very old and unexplored move as the next thing to search. Common terminology is an "open list" containing nodes that have not been completed so far.
there is no "fail low" in best-first. The score for the previous "best move" simply drops enough so that it is no longer best and another move is expanded instead...
The terminology for minimax/alpha-beta doesn't apply here. It is a completely different approach to searching. Yes, you could say that unexpanded nodes are pruned, but that is wrong, because they can still be expanded if they bubble to the top as others drop down. But that would again be mangling the usual definition of the word.
[/quote]
As for your latter comment, it is best to pick up AI research papers written after your AI book was and note the proofs of equivalence.[/quote]As far as your latter comment, it is best to first pick up an AI book and look at the classic definition of "best-first search."
"proof of equivalence" is nothing new. But it doesn't change the fact that the two search methodologies, while producing the same answer, do it in _completely_ different ways. And that only in a theoretical sense is there any true equivalence in final result. If you force a bunch of assumptions that don't apply in real chess positions...
There are plenty of new AI books that cover the topic. But the search paradigms are completely different.
There is a world of difference between "can't work at all" (throwing things out of best-first) as opposed to "can't work well" (overwriting in hash table). Again, more AI references: the benefit of depth-first is reduced storage requirement compared to breadth-first or best-first. They can, optimally, search and find the same solution. They won't search the same tree in the same order, however. And they won't have the same storage requirement.Then you see you don't actually "prune" anything, you just keep searching good, non-reduced moves deeper and let the LMR-ed nodes sit and collect dust in the hashtable. Unless the score suddenly drops below that of the LMR-ed nodes.Then you see why you don't actually "prune" anything, you just keep expanding the most promising nodes and let the others sit and collect dust, unless everything else slowly drops enough to look worse than some of those dust collectors...
If you throw some things out of your hashtable, alpha-beta cannot work well, because you can't know the best move to search first in each position and your branching factor starts to explode to pure minimax.If you throw things away, it can't be true best-first, because you can't know what will be best at some point in the future, so you just keep expanding the best nodes until you have to make a move.