by H.G.Muller » 06 Feb 2014, 10:18
Note your expression for moves-left would become invalid when you are more than a full session ahead of schedule. E.g. when the TC had 20 moves per session, but the first 25 moves were book moves, you would estimate to have 15 moves left, while in fact the remaining time was for 35 moves.
Otherwise dividing the two to get a 'target time' for a move (possibly adding the incrrement afterwards) seems a reasonable thing to do. In general it is true, however, that early moves are more important than later moves. Once you are lost, no amount of long thinking will be able to cure that situation. So there always is the trade-off between thinking longer now, in the hope to get a decisive advantage or avoid a decisive disadvantage, for the price of playing later moves more quickly. This is why human GMs get into time trouble so often. So you could allocate systematically more time than the equal share.
OTOH it is also important how flexible you implemented limiting of the search time to the target time. Just instantly aborting the search when the target time expires is very wasteful; allowing a little overrun to finish an iteration, is usually a good deal. (But of course this has to be payed for, e.g. by not starting iterations that you almost certainly would not be able to finish, even if your target time wasn't all used up yet.) Allowing extra time when you are facing a disastrous fail low, to see how much you can salvage, is a very good investment of time, much better than distributing that time over all subsequent moves in a badly lost position (which typically doesnt do any good at all!). To allow you to do that on the last move in the session would require you to keep some spare time. E.g. if I want to allow a factor 3 overrun of the target time in case of a fail low, I could take
targetTime = timeLeft/(movesLeft+2);
Then even 3*targetTime would never be more than timeLeft. It would give early moves even less than their fair share, however. Say you want to bias time usage towards the beginning by allowing moves 20% more than their fair share, you could use
targetTime = 1.3*timeLeft/(movesLeft+2.9);
Then at the start of a session, with (say) 40 moves left, you would assign 1/33 of the time to the move rather than 1/40. While with 1 move left the target time would be 1/3 of the time left, so you could afford a factor 3 overrun.