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/

Reply via email to