That's a very interesting idea and very close to what I am thinking of. I imagine many of the evaluation positional terms that exists today as being merely "symptoms" of a more essential chess property. For instance, think about rook on 7th rank. We usually give a bonus for putting the rook on the 7th rank although at short term the engine has no clue what it is good for. A more "essential" rule would look into the distance (Chebyshev) between the rook and the opposite king, the weakness of the opposite pawn formation on that side, especially the ones composing the king shield, etc. I think almost all information needed to make a simple function out of this is based on deltas of pieces location and attacked squares. It makes more sense to me use those relations to feed the inputs of a learning system instead of trying to tune arbitrary heuristic evaluation terms.OliverUwira wrote:I'm trying to go into a similar direction. In fact I haven't written a line of code for four weeks but spent quite some time on brainstorming ideas about evaluation design.bhlangonijr wrote: IMO the problem is we are trying to fit some learning system into the current evaluation structure and all evaluation terms are combined linearly to output the static evaluation. Having all these human-like evaluation terms is really very unlikely to come up with a good learning system to create a good balance between them.
I think a better approach would be pick many evaluation terms as we know and translate it into a more "fundamental" rule. I can imagine that for the pawn structure, for example. Then it would be more feasible to model a workable learning system.
The approach I want to try is expressing positional characteristics as functional relations.
Take e.g. bishops. Their strength increases when pawns come off and decreases with pawns blocked or hemmed on their colour. I try to model notions like this as a term V = Base * F(x). In above cases, x might be the number of pawns or, respectively, the number of blocked pawns.
In the case of blocked pawns I would use a logarithmic function, such that the penalty does not increase too aggressively. One blocked pawn on the wrong colour is often enough for giving the other side a serious advantage (e.g. in ram positions, i.e. isolated pawns on d4/d5 and light squared bishops), but if there are more the "marginal utility" is likely diminishing.
The idea I have is that if the F(x) are continuously differentiable, the feature sum will also be, which will facilitate the application of curve fitting algorithms and similar stuff, maybe even TDL.
I'm quite excited to find out how this approach is going to work out
Keep us posted about your findings!