On 7/13/07, Don Dailey <[EMAIL PROTECTED]> wrote:
I agree with you on this as far as etiquette is concerned. In on-line computer vs computer games resignation is "honorable" but against humans a computer should simply play fast - up the level of it's ability. A strong computer player can pass and reckon for dead stones if that's the protocol, or it can just play rapidly. I think many players like to see a "complete" game and feel as if there were just a little bit "cheated" by an early resignation. Of course a really weak computer shouldn't be expected to do more than an equally weak human. If a computer program doesn't have a feel for dead stones, who is winning and who is losing then the best it can do is play the game out and preferable it should play relatively fast if possible. In this case it's the human's turn to be "honorable" and not berate the stupidity of the programmer making condescending remarks, etc. Note that this isn't about respecting a program - it's just a machine. But behind every program is a human being who may have put some sweat into the programming.
Thankfully, nobody has ever been mean about my dumb bots. After monitoring the usage of the bots I went and added a time control similar to what you say. I'd actually be curious to hear how other people have done it. The handling of absolute time, byo-yomi time, and canadian time is non-trivial since there are some strange ways that the commands work. This may be a KGS quirk, but I think any quirks specific to KGS are because of shortcomings in GTPv2. For example, when main time expires, kgs sends time_left color 0. Below is the key portion of my time management code. I have not tested it in all situations and I'm sure there's room for improvement. + void timeLeft(color c, double seconds, int stonesToPlay){ + // note that seconds could be zero as main time for byo yomi times expire + double minTime = 1.0; + if (stonesToPlay > 0){ + // Candadian time is in effect + double lagBuffer = 2.0; + nextMoveThinkTime = max( (seconds/stonesToPlay)-lagBuffer, min(1.0,(seconds/stonesToPlay)) ); + } + else{ + // Main time or byo yomi + int safetyBuffer = 60; + int minMovesLeft = 10; + nextMoveThinkTime = max( 3*(seconds-safetyBuffer)/max(assumedMovesLeft/2,minMovesLeft), 1.0 ); + } + nextMoveThinkTime = min(maxThinkTimePerMove, nextMoveThinkTime); + debug(timing) hberr.writefln("Conclusion: next move think time should be %s (assumed moves left = %s, time left = %s, stonesToPlay = %s)", nextMoveThinkTime, assumedMovesLeft, seconds, stonesToPlay); + } + void kgsTimeSettings(char[] mode, int seconds){ + assert(mode=="absolute"); + timeLeft(singletonColorBlack, seconds, 0); + }
_______________________________________________ computer-go mailing list computer-go@computer-go.org http://www.computer-go.org/mailman/listinfo/computer-go/