gnugo-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnugo-devel] matcher_check_3_7.7b


From: Evan Berggren Daniel
Subject: [gnugo-devel] matcher_check_3_7.7b
Date: Thu, 29 Aug 2002 15:02:46 -0400 (EDT)

A new version of the --stable patch.  Fixes the bug that caused move
colors to be written to the sgf file backwards.  Also turns on
autoflushing to the sgf file, so that the partial file is visible while
the game is in progress.

Thanks

Evan Daniel

Index: matcher_check
===================================================================
RCS file: /cvsroot/gnugo/gnugo/interface/gtp_examples/matcher_check,v
retrieving revision 1.11
diff -u -r1.11 matcher_check
--- matcher_check       27 Aug 2002 13:25:43 -0000      1.11
+++ matcher_check       29 Aug 2002 18:58:36 -0000
@@ -36,7 +36,6 @@
 # be captured, and that vertex go unused until a new piece was
 # played in that spot, resulting in a false positive.  However,
 # this should be rare (?).
-# FIXME: get random seeds when an error is detected.
 # FIXME: better $verbose levels

 package TWOGTP_A;
@@ -80,7 +79,10 @@
 my $move;
 my $toplay;
 my $randseed;
-
+my $stable;
+my $pids;
+my $stable_move = "";
+my $noilcheck;

 my $helpstring = "

@@ -100,6 +102,8 @@
   --loadsgf <filename>                   (file to analyze)
   --movecount <number of moves to check>
   --randseed <number>                    (sets the random seed)
+  --stable \'<path to stable version> --mode gtp [program options]\'
+  --noilcheck                            (turns off illegal transition checks)
   --help                                  (show this)


@@ -112,10 +116,12 @@
            "handicap|h=i"           => \$handicap,
            "size|boardsize|s=i"     => \$size,
            "sgffile|o=s"            => \$sgffilename,
-          "loadsgf|o=s"            => \$loadfile,
+          "loadsgf|l=s"            => \$loadfile,
            "games=i"                => \$games,
           "movecount=i"            => \$movecount,
           "randseed=i"             => \$randseed,
+          "stable=s"               => \$stable,
+          "noilcheck"              => \$noilcheck,
            "help"                   => \$wanthelp,
 );

@@ -130,11 +136,12 @@
   warn "Defaulting program to: $program\n";
 }

-die $helpstring unless defined $program;
-
 # create FileHandles
 my $prog_in  = new FileHandle;         # stdin of program
 my $prog_out = new FileHandle;         # stdout of program
+my $stable_in  = new FileHandle;       # stdin of stable version
+my $stable_out = new FileHandle;       # stdout of stable version
+

 if ($loadfile)
 {
@@ -145,6 +152,11 @@
 ";
        exit;
     }
+
+    if (defined($stable)) {
+        warn "When loading a file, --stable is ignored.";
+    }
+
     $pidp = open2($prog_out, $prog_in, $program);
     print "program pid: $pidp\n" if $verbose;

@@ -178,6 +190,11 @@
     $pidp = open2($prog_out, $prog_in, $program);
     print "program pid: $pidp\n" if $verbose;

+    if (defined($stable)) {
+        $pids = open2($stable_out, $stable_in, $stable);
+        print "stable pid: $pids\n" if $verbose;
+    }
+
     $sgffile = rename_sgffile($games, $sgffilename) if defined $sgffilename;

     if ((defined $sgffilename) && !open(SGFFILEHANDLE, ">$sgffile")) {
@@ -185,17 +202,38 @@
        undef($sgffilename);
     }

+    #set autoflushing for sgf file
+    select(SGFFILEHANDLE);
+    $| = 1;
+
     print $prog_in  "boardsize $size\n";
     eat_no_response($prog_out);
     print $prog_in  "komi $komi\n";
     eat_no_response($prog_out);

+    if (defined($stable)) {
+        print $stable_in "komi $komi\n";
+        eat_no_response($stable_out);
+        print $stable_in "boardsize $size\n";
+        eat_no_response($stable_out);
+    }
+
     if (defined($randseed)) {
         print $prog_in "set_random_seed $randseed\n";
        eat_no_response($prog_out);
+        if (defined($stable)) {
+           print $stable_in "set_random_seed $randseed\n";
+           eat_no_response($stable_out);
+       }
     } else {
         print $prog_in "get_random_seed\n";
-       print "random seed " . eat_one_line($prog_out) . "\n";
+       my $rand = eat_one_line($prog_out);
+       print "random seed $rand\n";
+        if (defined($stable)) {
+           $rand =~ s/^= //smg;
+           print $stable_in "set_random_seed $rand\n";
+           eat_no_response($stable_out);
+       }
     }

     print SGFFILEHANDLE 
"(;GM[1]FF[4]RU[Japanese]SZ[$size]HA[$handicap]KM[$komi]"
@@ -210,6 +248,11 @@
     else {
        $toplay = 'W';
        print $prog_in "fixed_handicap $handicap\n";
+        if (defined($stable)) {
+           print $stable_in "fixed_handicap $handicap\n";
+           eat_handicap($stable_out);
+       }
+
        $handicap_stones = eat_handicap($prog_out);
        if (defined $sgffilename) {
            print SGFFILEHANDLE $handicap_stones;
@@ -220,21 +263,34 @@
     while ($pass < 2) {
         if ($toplay eq 'B') {
            print $prog_in "genmove_black\n";
+           print $stable_in "gg_genmove black\n" if defined($stable);
        } else {
            print $prog_in "genmove_white\n";
+           print $stable_in "gg_genmove white\n" if defined($stable);
        }

        $move = eat_move($prog_out);
-       print "$toplay plays $move\n" if $verbose;
+       $stable_move = eat_move($stable_out) if defined ($stable);
+       if ($move ne $stable_move and defined ($stable)) {
+           print "At move $movenum, $toplay\:\n";
+           print "Test version played   $move\n";
+           print "Stable version played $stable_move\n";
+       } else {
+           print "$toplay plays $move\n" if $verbose;
+       }
+
+       $sgfmove = standard_to_sgf($move);
+       print SGFFILEHANDLE ";$toplay\[$sgfmove\]\n" if defined $sgffilename;

        if ($toplay eq 'B') {
+           print $stable_in "black $move\n" if defined($stable);
            $toplay = 'W';
        } else {
+           print $stable_in "white $move\n" if defined($stable);
            $toplay = 'B';
        }
+       eat_no_response($stable_out) if defined($stable);

-       $sgfmove = standard_to_sgf($move);
-       print SGFFILEHANDLE ";$toplay\[$sgfmove\]\n" if defined $sgffilename;
        if ($move =~ /PASS/i) {
            $pass++;
        } else {
@@ -245,7 +301,7 @@
            eat_no_response($prog_out);
        }

-       check_matcher($prog_in, $prog_out);
+       check_matcher($prog_in, $prog_out) if !defined($noilcheck);
        $movenum++;     #next move
     }
     print $prog_in "estimate_score\n";
@@ -263,7 +319,10 @@
     #make sure gnugo dies correctly.
     close $prog_in;
     close $prog_out;
+    close $stable_in;
+    close $stable_out;
     waitpid $pidp, 0;
+    waitpid $pids, 0;

     print "games remaining: $games\n";
 }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]