gnugo-devel
[Top][All Lists]
Advanced

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

[gnugo-devel] stable option for matcher_check


From: Evan Berggren Daniel
Subject: [gnugo-devel] stable option for matcher_check
Date: Wed, 28 Aug 2002 12:17:59 -0400 (EDT)

This patch implements a --stable option for matcher_check.  If the option
is set, matcher_check opens an extra process for the stable version, makes
sure the random seeds are the same, and then plays the version under test
against itself, comparing the moves to the ones the stable version makes.
If they disagree, then matcher_check outputs the move number and both
moves.

Does not currently work with --loadfile.

There is also a --noilcheck option, which turns off the illegal transition
change checking.

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       28 Aug 2002 16:14:52 -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,
 );

@@ -135,6 +141,9 @@
 # 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 +154,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 +192,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")) {
@@ -187,15 +206,36 @@

     print $prog_in  "boardsize $size\n";
     eat_no_response($prog_out);
+    if (defined($stable)) {
+        print $stable_in "boardsize $size\n";
+        eat_no_response($stable_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);
+    }

     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 $stable_in "get_random_seed\n";
+       #print "Stable random seed " . eat_one_line($stable_out) . "\n";
     }

     print SGFFILEHANDLE 
"(;GM[1]FF[4]RU[Japanese]SZ[$size]HA[$handicap]KM[$komi]"
@@ -210,6 +250,11 @@
     else {
        $toplay = 'W';
        print $prog_in "fixed_handicap $handicap\n";
+        if (defined($stable)) {
+           print $stable_in "fixed_handicap $handicap\n";
+           eat_no_response($stable_out);
+       }
+
        $handicap_stones = eat_handicap($prog_out);
        if (defined $sgffilename) {
            print SGFFILEHANDLE $handicap_stones;
@@ -220,18 +265,37 @@
     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";
+
+           if ($verbose > 1) {
+               print $prog_in "showboard\n";
+               eat_no_response($prog_out);
+               print $stable_in "showboard\n";
+               eat_no_response($stable_out);
+           }
+       } else {
+           print "$toplay plays $move\n" if $verbose;
+       }

        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;
@@ -245,7 +309,9 @@
            eat_no_response($prog_out);
        }

-       check_matcher($prog_in, $prog_out);
+       if (!defined($noilcheck)) {
+           check_matcher($prog_in, $prog_out);
+       }
        $movenum++;     #next move
     }
     print $prog_in "estimate_score\n";





reply via email to

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