jorose wrote: I would prefer having general evaluation terms which are completely orthogonal and cover as many situations as possible.
There are no such terms. No 2 terms are completely orthogonal. Mobility, for example, is redundant with piece values. Outposts are redundant with psqt. Adavanced pawns are redundant with mobility to an extent. Isolated pawns are redundant with connected pawns, if you have the term. Rook on an open file is redundant with mobility to an extent.
And so on, and so forth. So everything is redundant to a bigger or lesser extent with everything else, but still the non-redundant portions of those terms provide added value even in a simple engine having just a couple of parameters.
So the requirement that you need only orthogonal terms in an engine is a myth. As such terms simply do not exist. You have more orthogonal and less orthogonal terms, but all terms contain a certain extent of unorthogonality.
jorose wrote:
In this case however you are describing two very close terms, binders and your new definition of a backward pawn right after one another and proposing we throw them on top of each other.
Binders are binders, and backward pawns are backward pawns. They both have added value in specific situations.
For example, you have, 1000 chess positions, in all 1000 of them mobility and piece values are relevant, you can not do without them, you encounter some kinds of backward pawns in 600 of those 1000 positions, and some kind of binds in, say, 150 of those positions.
If you have only mobility and piece values you will get wrong scores in 600 of the above positions because lacking backward pawn eval, and wrong scores in 150 of them because lacking bind eval. In say, 50 of those positions, you will get even wronger scores, as they will include both some kind of backward pawn and bind features.
So, overall, in 700 of those positions you will get wrong scores, because missing a real-board eval term, that influences the assessment of the position.
How do you solve the problem with those 700 positions, by just leaving mobility and piece values and tuning them to death? This is simply impossible. A larger number of terms tuned extremely well improves the situation, but does not solve all problems, as there are always more available real-board specific terms.
When you include binds and backward pawns into the eval, your engine will solve all 1000 positions satisfactorily.
So tuning does not help above a certain threshold, but introducing new real-board terms does, although they might increase non-orthogonality.
That is why chess is really complex, because there are not 100 or 500 relevant eval features influencing eval, but they run into the tens of thousand, I would say you might easily affirm that more than 100 000 eval features influence the score and outcome of the game. That is why chess is complex, and is not solved by tuning a few simple terms to death.
Adding knowledge is the way to proceed to further improve an already strong engine. Not that I suggested binders for just a few central squares on the board, while those special backward pawns are suggested for all available board squares. So very small duplication here.