Gian-Carlo Pascutto wrote:Bob, I already pointed out that there is a hard, mathematical proof that many best-first algorithms, including those relevant to chess, search an identical tree to alpha-beta with a sufficiently large hashtable. So what you say above is already proven wrong in the strictest way possible.bob wrote: Please listen again. For best first you have to store _everything_. I am not talking about UCT, minimax, alpha/beta, or anything else. The question was about best-first. It is completely unreleated to depth-first search as we use in chess programs.
Your statement is simply wrong. here is why.
For best-first, I _MUST_ store the entire tree as it is searched, because there is no way to know when you will need to come back to a lousy-looking position, simply because all the other positions eventually become worse-than-lousy.
With alpha/beta there is no such requirement at all. And, in fact, alpha/beta works with no transposition table at all if you are willing to give up the efficiency.
Yes, you can prove that they search the same tree under exceptional circumstances. But alpha/beta is still order(D) memory usage while best-first has to store the entire thing. That is a significant difference.
Proofs that consider "no bounds" on resources are not very useful. Alpha/beta works with any memory bound you care to impose, so long as you have enough memory to store state for each ply [O(D) in space]. Best-first won't give you that option.
that was, and is, my point on the difference between the two. Try to do a best-first search with enough memory to store the state for 25 nodes, and get to any remotely acceptable depth, while I do an alpha/beta search to depth=25 with that same amount of memory...
Did I say that? If so it was simply improperly worded. Certainly was not intentional.
Even if you fail to grasp this, saying that UCT is not best-first is insane. It has the exact start-at-root,pick-best-node, expand-best-node, backtrack-node-result-up-to-root cycle that characterizes best-first algorithms.
Most theory books give a proof for a 1-tape turing machine, and then an N-tape turing machine, and then they give a proof that the 1-tape TM can exactly emulate the N-tape machine, although at a huge cost.
And you know what? It can be rewritten as depth-first!
Wait, let's take another example. Proof-number-search. Another classical example of a best-first algorithm.
You know what? It's been rewritten as depth-first, too!
Notice a pattern here?
Nobody has said that you can't make BF and DF searches search the same tree. "In theory". In practice, is another issue entirely... With different issues (storage requirement is one big one).
MTD(F) has nothing to do with best-first, so I am not sure what you are talking about there. MTD(F) is simply a null-window alpha/beta (depth-first) search that requires several passes at each iteration to zero in on the best score. What on earth does that have to do with "best first"?Again, this is already proven wrong. Chinook uses MTD(f), which is best-first (again, a hard, mathematical proof is in the thesis of Aske Plaat). Cilkchess also used MTD(f). All the strongest suicide and losers chess engines (which btw has a very NARROW tree): best-first.Best-first is more human like, to be sure. But it has never approached depth-first in chess or checkers. Perhaps in GO or another game, who knows.
They are far from "one and the same" except at the theoretical level. However, I am more interested in your "MTD(F) is best-first. As I did an MTD(F) crafty years ago when Don Daily was a big proponent. It didn't work very well for me and was significantly slower. I notice he no longer uses it either.
Your "argument" about storing everything is a complete straw man.
From one side, we can make the hashtable large enough (or use a normal std::map) and just store everything, which works until we run out of memory. From another side, *practical implementations* of best-first searches have to deal with the possibility of memory running out and will do garbage-collection. There is no difference between the two.
The distinction between best-first and depth-first is an artifact of days long gone when it was not realized yet that they were one and the same.
But it was ended in 1995. It's time to move on.