Bill wrote:
KGS does indeed implement free handicaps for Chinese and New Zealand rule sets and players are using it. It seems to me that the GTP handicap system is both complex and restrictive. Why not just have a "handicap <n>" command, which specifies the handicap; then for fixed handicap, follow that with a series of "play b <location>" commands; for free handicap, follow the "handicap" command with a series of "genmove b" commands?
It may look simpler but in reality it just exchanges extra commands for higher complexity in other commands. With this construction one would need to have a state keeping track of the number of remaining handicap stones and also specify how to handle, alternatively explicitly forbid, surprising things like mixing play and genmove commands while doing handicap or undoing a couple of handicap stones.
That seems simpler to implement and more flexible,
I don't agree. Both when I consider implementation for engines (in particular GNU Go) and controllers, I prefer to handle the whole set of handicap stones as a unit.
because now the arbiter in a game can do the handicap any way it seems right, the protocol no longer forces a particular handicap placement system.
I don't see where this additional flexibility comes in, except maybe that the controller would be able to place white stones and call them handicap stones. Please give an interesting scenario which my proposal doesn't handle.
The only real need of the "handicap <n>" command at all is so that programs can (if they choose) move differently for the 1st handicap stone of 5 vs. the 1st move of a non-handicap game.
Yes, or place 13 handicap stones entirely different from 5 handicap stones.
Another thing that really stood out to me as troublesome (other than the protocol telling you where your handicap stones have to be) is the "time_settings" command. It only supports canadian time and it is not very extensible. Canadian is AFAIK only common on the IGS/NNGS/etc. go servers, nowhere else in the world is it the dominant go clock system, so making it the only time system for GTP seems bizarre.
I can say with certainty that Canadian byo yomi is used in all Swedish tournaments. From google searches I get the impression that it is also the dominating time system in the rest of Europe and North and South America. Maybe someone else can comment on that. It is also used at the World Amateur Go Championship.
At the very least shouldn't there be an argument specifying the time system? For example "time_settings canadian 30 10 25". Then in later versions of the GTP spec if necessary we can add "time_settings japanese" or "time_settings ing" or whatever and it will cleanly fit alongside the older canadian system.
If needed this can be solved anyway, in the worst case by deprecating "time_settings" and introducing one or more new commands. But one should think twice before adding more time systems. As an engine writer I'm not thrilled by the prospects of implementing and maintaining multiple clock systems. Maybe this is easier if the engine is designed to handle time issues from the beginning, but for GNU Go time management is quite complex.
/Gunnar