Well, yes. Adaptive indeed. But this looks at the problem the wrong way round. To adapt the value requires chess knowledge. If you have a knowledge based polynomial evaluation function then you can account for sidetomove within the particular elemenst of the polynomial - rhather than add in some global value kludge at the end.michiguel wrote:In other words, the perfect bonus is one that is adaptive. Sometimes positive, sometimes negative. Most of eval terms are gambling terms. This is one of them. If you set it fixed to zero, you are actually wrong when it should be positive and wrong when it should be negative. You are gambling that zero will be the best compromise. So, technically, everybody has a sidetomove bonus, many of them set to 0. I really doubt that is the best number.chrisw wrote:Well, a strong chess player uses a good quiescence function. As in search until position quiet and evaluate.Don wrote:Who uses a good quiescence function now days? The biggest development over the past few years is to make the quies fast and stupid so if you are right, then it does matter. I don't know of any evaluation function that smooths out positional scores.chrisw wrote:with a good quiescence function it ought not to matter too much. With a lousy quiesence function it will matter a lot, but also vary massively depending on position.Don wrote:I noticed that some people have suggested that a "having the move bonus" is beneficial to their program. I believe that too and have always used one in my programs. How to set it correctly seems to be a bit of a black art, but I have a suggestion that I would like others to try and report back.
You should start with a large timing test set. I use 100 positions to measure the general effects of performance tuning on my program. This is not a "find the solution" set, it is just a set of random positions from games to measure general search speed, node counts, etc, and I don't care what move is returned.
The basic idea is to TIME your program using various stand pat bonuses. The theory is that the most correct values will produce the fastest searches because there will be less "turbulence" in move choices, odd/even scores, etc. All of these things hurt the search.
It's just a theory I admit, but I tried it and I get reasonable values. Since the values are reasonable and you are just guessing anyway, why not use the values that produce the fastest search?
My program is very new and has a very primitive evaluation function that is not aggressive at all about positional values - so I would thus expect the stand pat bonus needed to be relatively low. That's what I get here, a value of 0.10 works best of the ones I tried. Here are the times for my 100 position timing set at various stand pat bonus values:
[/color]Code: Select all
BONUS AVE TIME AVE NODES ----- -------- --------- 0.00 5.312 3,443,479 0.05 4.734 3,119,767 0.10 4.247 2,780,342 0.15 4.692 2,938,563 0.20 4.684 2,901,375 0.30 5.862 3,310,455
As you can see, 0.10 appears to be best for me right now. 0.15 and 0.20 are non-optimal and I put 0.30 to get one that is obviously wrong but not totally ridiculous.
I would be curious about the results others get with such a test.
There's no reason why tuning on search time reduction is going to optimise for strength, is there? You might try tuning on either a huge test set, or on speed to find actual move chosen by winning side in a set of high-ELO games.
So, assuming you have good quiescence, I would be inclined to suggest also modifying your idea for the sidetomovebonus by pieces left on the board. KQRBN different to KRBN etc
- Don
Anything less than that is a downwards compromise based on inability to create a quiescence function that approximates it, and traditionally excused on the basis that bean-counting gives results.
I find the sidetomove bonus a kind of nonsense forced on the beancounting program as a kludge to cover its inherently problematical design.
You've heard of the concept of the coiled spring in chess? Perhaps in relation to some variations of the Sicilian. Black is forced back onto defending some weakness. But if white actually tries to do something and overextends, then, suddenly, all blacks pieces uncoil forwards from their defensive positions and white is in trouble.
My guess is that sidetomove bonus in that kind of situation is probably counterproductive.
Fact is this: the advantage of having the move is either positive, negative or neutral depending on the situation. Period.
For instance, it is difficult to find positions in the opening in which is convenient that the opponent moves.
Miguel
For example. Pair of bishops is worth something and sideonmove is probably unimportant.
Runningpawn evaluation - well, side on move should be taken into account there and then - could be a game winner. Pair of pawns on 5th or 6th vs Rook, again side on move very important - account for it during the sub-evaluation.
King attack - makes a big difference if on move or not. Account for it then.
Attack on piece, makes if big difference if exectuble immediately or need to wait for other side to move. Account for it there.
It's only the beancounter which has compromised away much evaluation that will be needing a global kludge value, isn't it? And will it work, be appropriate or even marginally accurate? I don't think so.