The point is that I do nothing special to make progress, just the usual routine any engine would follow under normal circumstances.Evert wrote:I suspect it's probably more complicated than that. It is sufficient to just add the evaluation term if aiming for a position with that term makes you statistically more likely to find a way to make progress. If it doesn't, it just leads to a dead-end and doesn't help to add Elo.Lyudmil Tsvetkov wrote: Very difficult question.
It is a matter of tuning of eval and search terms.
Let me clarify where I'm coming from. We'll need to make an excursion into chess-variant territory, specifically Shogi.
In Shogi, an important strategy is to build a castle for the king. There are a number of ways to do this, and several different strategies to attack different castle formations. My chess variant program plays Shogi, but it knows nothing about building good castles, it just tries to defend the area around its king as best it can.
Here's where it gets interesting: HGM once told me that strong Shogi programs will build "proper" castles, and will follow the correct strategy to attack (and dismantle) properly build castles. However, if you don't build a proper castle, they will penalise you for doing a shoddy job (by giving themselves a healthy positional bonus), and subsequently fail to exploit that weakness effectively. In other words, they have an evaluation term that tells them that their position is better, but they lack an evaluation term that allows them to make progress.
Now, Chess is not Shogi, in a way chess is far more material driven: if you can eventually win a piece, or simplify the game, the trading gradient will indicate that you have made progress to winning the game. Nevertheless, a similar situation can occur.
Two examples: if you award a bonus for having a passed pawn, but not for advancing it, the program will produce passed pawns and tries to hang on to them, but it will not advance them unless it can find a promotion within the search horizon.
Second example: if an engine doesn't know how to make progress in KBNK, it will not find the mate. Even KRK is difficult to win if you don't know to drive the lone king to a corner.
Right, which could have to do with the point I made above: it's not enough to have a term that tells the engine that a particular positional feature is good or bad, it also needs to have the knowledge to help it make progress.So far none of the strictly positional eval features I have suggested has passed successful tests and been implemented, as far as I know.
Neither backward-fated pawns, nor apex pawns, nor bimders, nor KID structures, nor using the knowledge of existing closed sides on the board.
But those are the real positional elements that all top human grandmasters possess, and even only stronger players.
They are long-term elements and are a vital feature of high-quality chess.
So perhaps your ideas would be more successful if you could add something from that angle? In other words: I suspect the problem you cite with play in closed positions is that you need to formulate an evaluation term that allows the engine to make progress in a closed position, rather than just terms that allows it to evaluate it more accurately.
Perhaps you could annotate the game and indicate what you do to make progress?I can not add much more about binders: below is a game I just played against latest SF 6.
You're more qualified to do that than I am, I'm afraid.Nothing more to add, just look carefully at the game and how the respective binds mainly brought white the victory.
The key is that the existing binds upon vital squares prevent the opponent from having adequate counterplay. So I use the available time while the opponent shuffles or makes useless moves to develop more attack, just that.
There is an e5 bind, I put my knight there, on an active square, just like any engine would do. The point is that, as the knight is defended twice, this is a stronghold, and any capture would lead to the square still remaining a stronghold.
There is an f6 bind, I use the fact that the 2 white g5 and e5 binders prevent black to break free with f7-f5, so black just does not have counterplay where it should, and bring 2 more rooks to attack the king. Absolutely the usual stuff: just bring more attackers to attack the king, something any engine would do and see.
And of course, using existing binds, I push more pawns to attack the king, something any respectable engine would do. Absolutely the usual stuff.
So nothing special here, it is just that the existing binds (that is why they are called binds, because they bind you) prevent the opponent from having sufficient and timely counterplay.
So this is a bit in the vein of prophylaxis, but engines do not seem to be very prophylactic, do they?
Again, I say the problem is not to see how progress is made, you see it and achieve it in the usual way, by strengthening pawn storms and piece attacks and by improving your mobility and psqt, but to have your eval and search terms tuned as whole with the respective new eval terms.
For me, a new term, especially if a bit non-standard, should always be tuned as a whole with all existing search terms. I am quite certain that is the main problem, though I am just a layman.
When I play SF, I observe this very peculiar phenomenon: SF extremely easily sees some quite difficult and complex mates, following a certain pattern, and fully fails to notice other, much less complex mates, that however follow a different pattern.
So this is a problem of approach, SF, as any other engine, is biassed, it sees only what its hard-coded patterns allow it to see, only what its search and eval patterns would suggest. It ignores the rest, thinking it is unimportant, but that might not be the case.
So you introduce a new, strange-looking, positional eval term, test it desperately, as you maybe find it a bit interesting, and it never works, but really never.
Then you also decide to change some search parameters that might influence the behaviour of the new eval term, and ..., oh, God, suddenly it works!
But maybe you will have to change a whole lot of search parameters before you have even the slightest success with such positional terms, as the whole seacrh of modern engines (and they more or less follow the same pattern) is tuned to work within the framework of normal/non-positional terms.