Daniel Shawul wrote:For me, a draw score is not worth much without knowing why the position is drawn. "I looked this position up in a multi-gigabyte file, and it says it's a draw" isn't a very useful explanation. I haven't looked at Timman's study, but because it's composed by a human, I suppose it is possible for a human player without the help of a computer to find the solution. If my program fails to solve such a problem, and I understood the solution, I would try to identify what knowledge my program is missing and add it to my search or evaluation function. This is harder work than simply adding tablebases, but also much more valuable: I may end up dicsovering principles and evaluation rules which can be applied to a wider range of positions with a bigger number of pieces, and I may improve my own chess knowledge at the same time.
For the engine which is about to lose the endgame,knowing about draw score is as good as a win.
Endgame studies are focused on deriving rules that are useful for _humans_ to improve their endgame
play. If you insist on knowing how the WDL is arrived , you should use DTM tablebases.
That doesn't really tell much about how the WDL is arrived. A gazillion of positions, variations and DTM counts have no interest whatsoever to me, unless the results in it can be formulated in terms of some higher-level rules.
You can't program most of what is found by some KD technique from tabelbases to benefit the engine,
especially _not so in the evaluation function_, as you seem to suggest.
I've found that you often can, and you reap the benefits even in endgames with a bigger number of pieces. Here's my favorite example from Glaurung's admittedly rather crude endgame evaluation code:
[d]8/8/8/3kq3/8/5R2/6P1/6K1 w - -
All engines using 5-piece tablebases or bitbases will instantly recognize this position as a draw, as will Glaurung. Add a white pawn on b2, however, and most programs using tablebases will think that black is winning. Playing black, they will avoid capturing the b2 pawn as long as possible, because they see that the resulting position is a tablebase draw. Glaurung, using a few lines of extremely simple endgame knowledge, recognizes that the position is still a draw.
The eval already has a good enough
predictor for the final result, so to improve it you need to do more than
weights or whatever.
Yes, but I am not talking about weights, but about new heuristics and patterns.
Most of the moves involve maneuvers (tactical) that just can't be programmed there.
Ok may be you can for some endgames with 5 or less pieces, but it is impossible for most 5 piece and
above endgames without using some sort of search. Most of what is stored in bitbases are _exceptions_, the
rest are really compressed well. Those difficult positions are for humans to discover and enjoy themselves
with. My point being, the tbs are large because they have to. That ofcourse depends on what kind of information
you want from it.
My point is that the exceptions caused by purely tactical maneuvers are not interesting. We can't learn anything from such positions, neither in terms of chess, AI or computer science in general. Because they are basically won, lost or drawn just by random chance, they can't give us any valuable knowledge.
I may end up discovering principles and evaluation rules which can be applied to a wider range of positions with a bigger number of pieces,
and I may improve my own chess knowledge at the same time.
Yes you may, but not something that would be useful for your engine.
For instance how do you program the KBBKN mate in 78 to your engine
so that it would benefit from it.
I don't have any tablebases installed on my machine, but when I have let Glaurung play against non-EGTB opponents, it has usually managed to win KBBKN endgames, IIRC. My evaluation function for this endgame is very simple, but seems to work well: The attacking side tries to keep his king close to the defending side's king, to drive the defending king towards edges and corners, and to keep the defending side's king and knight far away from each other.
Even for the much simpler KBNK we have to use some table along with _search_ to drive the king to corners. Even with that my engine used to fail mating kbnk! Most of these involve manuevers which are caught with search , and if you have to do search you loose the whole point of having bitbases.
I don't see how you can mate in KBNK without a search with bitbases. All the bitbase can tell you is that the positions where either the bishop or the knight is not captured within a move or two are won for the stronger side. How do you use this information to find a mate?
I think just blindly using tablebases as giant lookup tables during the search is quite ugly and stuipd, and likely to be counter-productive in the long run. The right way to use them is probably as a testbed for high-level evaluation routines, or even for generating new high-level endgame heuristics programmatically. Using genetic programming to develop endgame evaluators using tablebase positions as a test suite would be a very interesting project, for instance.
GAs use weighing factors to give you an approximate eval.
But I wasn't talking about genetic
algorithms, but about genetic
programming. Once again, it is not about adjusting weights, but about discovering completely new heuristics, patterns and algorithms.
By the way, in my previous posts in this thread, I have mainly been talking about tablebases, not about bitbases. I find bitbases a lot more interesting than tablebases.
Tord