How much time should a program spend on each move?

I think this is one of the most important and also difficult questions in game programming. Much effort is done to speed up the node-count by 10%, but a good time control is a much more effective speedup.

If my program has t milliseconds left to use in a game, and there are an estimated m moves left on the board (e.g., this many vacant spaces), one reasonable choice is t / m.

One should at least use t/(m+1). There is also a locial reason for this. If m is very small, especially m==1 one should have some extra time if the programm recognizes a problem. In this case it should search deeper. Generally this t/(m+k) should only be a target time. The final decision should be based on the results of the search. It is important to recognize trivial/forced moves and to stop in this cases search earlier. If the programm sees a problem than it should search longer. I have made recently a simple (but strong) UCT backgammon programm. UCT gives much better information for time-control than Alpha-Beta. E.g. if almost all search effort is concentrated on the best move, one can reasonable conclude that its a trivial/forced move. If the eval of the best moves decreases in the last period constantly and there are some chances that the second best becomes best, one should search on....

In practice, this seems to spend too much time on early moves, which (under UCT/MC) is largely wasted time. Would it be better to use something like t / m**k, for some constant k? (Looking at graphs of such functions, k = 1.5 seems reasonable.)

Go-Programmers like it complicated.

It would also be interesting to look at the graphs of how much time humans spend on each move; is it usually less for the opening moves than for middle / endgame moves? Is there a smooth curve, or is there a relatively abrupt shift from joseki to analysis?

One should forget human behaviour. If I would have to make a Turing test - is the player human or a programm - I would not look at the moves but on the time behaviour. The fundamental difference is that (good) humans know when the position is difficult and when its easy. Programms have no understanding of this at all. Humans play Chess/Go, programm make chess/Go moves. Consequently humans think for a few moves very long, and play other moves rather fast. But I think that the time-control of humans is not at all optimal. Its very human to try to solve an urgent problem even at the risk that it makes solving a further problem more difficult. Humans tend therefore to get into Zeitnot. When playing against GM Adams I proposed 40 Moves in 2 hours. He proposed 40 Moves in 1 hour 40 minutes plus 30 sek/move. In the first moment I could not see the difference. In both cases one has 2 hours for 40 moves. But at move 30 its different. The flag is falling there already at 1h 55 minutes. Its a psychological trick to avoid extreme Zeitnot. But if the human would have a good time-control "algorithm" there is no need for this trick. He could save this 30 seks for himself.

Chrilly

Note: One should forget human behaviour generally. A programm is a programm is a programm.

_______________________________________________
computer-go mailing list
[email protected]
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to