[Top][All Lists]
[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";
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnugo-devel] stable option for matcher_check,
Evan Berggren Daniel <=