
www.Usenet.com
| <-- __Chronological__ | <-- __Thread__ --> |
[snip]
However, this is not strictly mandated by alpha/beta; the algorithm basically needs valuations (scores) from a set S, and comparison operators to compare any two members of the set. I.e., mathematically, it has to be a poset.
There I don't follow. Alpha/Beta is specifically formulated to back up
(and compare) a _single_ score, not a set of values.
The classical metric used (e.g. centipawns) is essentially the evaluator's estimate yielded for one of the leaf nodes in its search tree, with the special property that it is on the most "conservative" move path found (assuming best play by me and the opponent).
Now suppose instead that I would express valuation of a position as a two-tuple (a,b), where 'a' is this classical metric, but 'b' is the distance of the selected leaf node (having valuation a) from the current position.
Now if we define comparison of two valuations (a1,b1) and (a2,b2) as follows (here I define arbitrarily that a1 high means "good for me":
Sure, but look at what you are doing. You have just made the entire
search much more complicated. All the search needs to do is find the
move that leads to the best score, _period_. It doesn't care if it
is a draw by repetition after this immediate move, or a 50-move-rule
draw, or anything else. That's not something the engine needs to care
about at all.
The GUI (or UI if you don't have graphics) is concerned with interfacing with the human, which means it is the right place to detect actual drawn games...
(a1,b1)<(a2,b2), if a1<a2 (a1,b1)>(a2,b2), if a1>a2 (a1,b1)=(a2,b2), if a1==b1 and a2==b2 (a1,b1)<(a2,b2), if a1==a2>0, b1<b2 (a1,b1)>(a2,b2), if a1==a2>0, b1>b2 (a1,b1)<(a2,b2), if a1==a2<0, b2>b1 (a1,b1)>(a2,b2), if a1==a2<0, b2<b1
Again, that is not alpha/beta. Or, if you think about it, you are collapsing all that data into one value. But it adds no new functionality into the engine that doesn't already exist naturally in the GUI...
Effectively, the whole score system is augmented with a "in ... plies" metric, which does allow you to distinguish between different wins, losses, and draws.
Not quite. Endgame tables don't say "draw in N plies". Endgame tables say this position is a draw, _period_. Maybe drawn by stalemate, or by repetition, or by 50 move rule, or by insufficient material... So you don't have that information everywhere. The transposition has this same problem. It stores scores and positions, but no information about the path to that position, because it would be too big to store. And again you run into the _same_ problem.
Best of all, the entire alpha/beta framework is intact.
No. See above. You wreck endgame tables, hash tables, to name two.
You need to carefully study the alpha/beta algorithm. All we get from
> the search is a best move, and a score we expect if we play that move.
I know this, but the concept of "score" could easily be extended as per above.
Again, you are not really that familiar with a real working search it seems. The hashing problem drives us all nuts because of the problem you are trying to solve...
We don't get information like "this is a draw _NOW_." or "This will end in a 3-fold repetition 30 moves in the future" or whatever.
But that's because current engines don't do this; it's quite conceivable that they will in the future. I think this could make the basis of a fine engine (it wouldn't be too different from current algorithms).
Not if they continue to use hashing. That is a big problem.
In such a scheme, there is no need to have a layer on top of the alpha/beta algorithm responsible for claiming draws (be it the engine or the GUI); this in fact could be handled by the engine.
Therefore your idea is simply impossible within the alpha/beta framework. The engine simply decides "the best I can do is to take one of these moves that leads to a 0.00 score."
I hope to have shown that this claim depends on the premise that scores are currently represented by just a single scalar value (which is not a necessity).
I hope I have shown that it is an impossibility to do it otherwise unless you lop off endgame tables, and lop off the hash table completely.
[snip]
The problem is that mate and draw are different. Draws already have a known problem with respect to hashing... I even tried to do the thing
you mention a few years ago (See The draw heuristic in Cray Blitz, in the
JICCA). However, it has lots of "artifacts" and the GUI _still_ has to
be the one to say absolutely "this is a drawn position."
[snip]
Yes (neat trick, by the way). I think (apart from tablebases, that do not contain information on the drawn positions other than that they are a draw) you would find that you would get swindling for free using the augmented score metric.
Yes, as I tried that. But as I said, it is not exact due to hashing, which means that the engine can not absolutely say "draw in 23 moves" as it might be more or less because of the hashing issue. That's why the GUI needs to make the real decision, to avoid pissing an arbiter off in a real event. :)
| <-- __Chronological__ | <-- __Thread__ --> |