hgm wrote:bob wrote:I completely agree with that. Searching to some fixed depth or fixed number of nodes removes that issue, yet it influences games in significant ways that I want to observe. If I miss a move, and study shows that a little more time would help, then can I find a way to use more time there? I have two examples where I have done so.
1. Fail low triggers more time. I can recall Slate/Atkin bouncing in their chairs wondering "we just discovered this move sucks... are we going to have enough time to find that move Y is better as Levy pointed out?" I don't have that problem as when X fails low, I am going to search _hard_ to try to find Y and use a lot more time than usual to do so if possible.
2. I have an OK move, but my program is about to change its mind to a new better move. I could tell this since I display the current move being searched once every 15 seconds just to let the operator know how long I have been searching and what I am searching on. Normally the ply-1 moves go by quickly (after the first one) and the farther down the list I get, the faster they go by. Unless I run into a move that looks more promising and there it can take a lot of time to dismiss it (but it requires more nodes which triggers my ply-1 move reordering to move this near the top for the next iteration to check it more carefully earlier in the search). But once I get into searching a move that will become the new best move, if I have enough time to complete the search, I don't worry about having enough time because I never to a time abort in the middle of an iteration until all currently active ply-1 moves are completed (since I do a parallel search and also split at the root, I can have N ply-1 moves in various stages of completion).
This still does not explain in any way why you expect one version of your program to suffer _more_ from this than the other version, if you switch it of in both. So it doesn't seem much to the point. Why are you telling this at all? (For the second time...)
Because I make changes to this code from time to time as well. And I want to test those changes. I also want to exercise that code as frequently as possible so that it has a chance to break something. It is important enough that I want to make sure everything works well together.
It is also possible that a new version has a better evaluation that returns more accurate evaluations in situations that the older one was inaccurate in, and these different scores can influence time usage. If I test without time usage, and just bias all scores in one direction, I would get one result. When I play in real games, where every search fails low because of this biased score, I would see a completely different time usage pattern and hence a different result.
Again, at least in my code, all of these things interact, and changing one thing over here can affect something way over _there_ unexpectedly. If I don't have that thing way over there turned off for testing.
And you don't have the slightest idea how much Elo difference this actually causes between the same version that does or doesn't do it. It is just meaningless talk, like people saying "smoking can't be bad for you, because my uncle, who smoked all its life, lived to the age of 95".
I would say your statements are _exactly_ as meaningless, for exactly the same reason. I could probably disable something and run a big test and tell you the elo/error-bar improvement or reduction, but for some of this I really don't care. I don't care at all what the improvement is for null move, or reductions, or such. I just care that there _is_ an improvement... But I am operating much like the alpha/beta search, I just need to prove A' is better (or worse) than A. I really don't give a hoot about how much better. Better is better, and that's good enough here.