gnugo-devel
[Top][All Lists]
Advanced

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

Re: [gnugo-devel] semeai question


From: Gunnar Farneback
Subject: Re: [gnugo-devel] semeai question
Date: Sat, 31 May 2003 11:23:41 +0200
User-agent: EMH/1.14.1 SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/20.7 (sparc-sun-solaris2.7) (with unibyte mode)

I wrote:
> What confuses me is the combination of defense_move and
> attack_certain. Why should the last line not be defense_certain?

After changing this and analyzing the regression delta (see below) I'm
definitely convinced that the code is wrong.

Dan wrote:
> Looks like this code was added in the patch gunnar_3_18.9d. It was
> not present in the original patch gunnar_3_18.9a. So it is a very
> recent change. 

Yes, it's from Arend's revision of my semeai patch.

> It seems to me that it might be correct. A case where
> attack_certain gets changed with this code is if best_result==DEAD
> and the semeai result doesn't change it, but the current read is
> certain. So it is the attack that is certain, not the defense.

That doesn't seem like a very interesting case and besides there
should be a certain semeai attack detected in semeai_results_second
from the reverse semeai read in that case.


Appended is a patch which takes the ko awareness of the semeai code a
step further out. It also reverses the attack/defense certainty logic
discussed above. If somebody strongly feels that the old logic was
correct you're welcome to submit a patch to change it back.

The regression delta is 2 PASS and 3 FAIL. The analysis below shows
that all the changes are consistent with the semeai reading results
(which sometimes are wrong) and the intentions of the code in
new_semeai(). 

strategy2:80    FAIL S7 [P4|Q4|Q3|S8]
The semeai reading finds a certain semeai defense of R5 and semeai
attack of R4 at S7. Choosing this move is consistent with the reading.

buzco:5         PASS C10 [C10|C11|E9|A4|F10]
The semeai reading finds a semeai defense of B8 and semeai attack of
D8 at A9, but the result is uncertain. After the patch it prefers the
certain owl attack of D8 at C10.

13x13:36        FAIL B2 [C5]
Certain owl attack of E6 at B2 but only uncertain semeai attack at C5.
Playing B2 is consistent with the reading.

nngs4:210       FAIL S5 [!S5]
While this gives a regression failure it is in reality an improvement.
The only change in valuation is that K8, a bogus semeai attack on N12,
is no longer valued highest with 61.62 points.

arend2:60       PASS N8 [N8|M7|L7|M9|L9|N7|O9|N10]
Certain semeai attack of P13 and semeai defense of R9 at N8 is
preferred over certain owl attack of P13 at R14. The reason why this
failed before the patch is that the semeai result is uncertain when
black moves first, but that's not really relevant.

- ko result codes no longer discarded in owl_analyze_semeai()
- new_semeai() revised
- decide_semeai() in sgfdecide.c revised
- gtp_owl_analyze_semeai() revised
- all owl_analyze_semeai regression test cases revised for new result format

Another conclusion of my analysis of the regression failures is that
we could do much better if we had semeai analogues to the
owl_does_defend() and owl_does_attack() functions. A
find_more_semeai_moves() function in value_moves.c should also be
beneficial.

/Gunnar

Index: engine/owl.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/owl.c,v
retrieving revision 1.165
diff -u -r1.165 owl.c
--- engine/owl.c        27 May 2003 08:48:24 -0000      1.165
+++ engine/owl.c        31 May 2003 09:06:24 -0000
@@ -355,24 +355,6 @@
 
   if (semeai_result_certain)
     *semeai_result_certain = result_certain;
-
-  /* FIXME: We throw away information about ko results here. We need
-   * to do this until the callers are prepared to deal with ko
-   * results.
-   */
-  if (resulta) {
-    if (*resulta != 0)
-      *resulta = ALIVE;
-    else
-      *resulta = DEAD;
-  }
-
-  if (resultb) {
-    if (*resultb != 0)
-      *resultb = DEAD;
-    else
-      *resultb = ALIVE;
-  }
 }
 
 /* It is assumed that the 'a' player moves first, and
Index: engine/semeai.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/semeai.c,v
retrieving revision 1.55
diff -u -r1.55 semeai.c
--- engine/semeai.c     22 Apr 2003 02:48:05 -0000      1.55
+++ engine/semeai.c     31 May 2003 09:06:26 -0000
@@ -176,20 +176,20 @@
            apos, bpos);
       owl_analyze_semeai(apos, bpos,
                         &(semeai_results_first[d1][d2]), 
-                        &(semeai_results_second[d2][d1]),
+                        &(semeai_results_second[d1][d2]),
                         &(semeai_move[d1][d2]), 1, &result_certain);
       DEBUG(DEBUG_SEMEAI, "results if %s moves first: %s %s, %1m%s\n",
            board[apos] == BLACK ? "black" : "white",
-           safety_to_string(semeai_results_first[d1][d2]),
-           safety_to_string(semeai_results_second[d2][d1]),
+           result_to_string(semeai_results_first[d1][d2]),
+           result_to_string(semeai_results_second[d1][d2]),
            semeai_move[d1][d2], result_certain ? "" : " (uncertain)");
       semeai_certain[d1][d2] = result_certain;
     }
   
   for (d1 = 0; d1 < num_dragons; d1++) {
     int semeai_found = 0;
-    int best_result = UNKNOWN;
-    int worst_result = UNKNOWN;
+    int best_defense = 0;
+    int best_attack = 0;
     int defense_move = PASS_MOVE;
     int attack_move = PASS_MOVE;
     int defense_certain = 0;
@@ -201,40 +201,33 @@
       gg_assert(semeai_results_second[d1][d2] != -1);
       semeai_found = 1;
 
-      if (best_result == DEAD
-         || best_result == UNKNOWN
-         || (best_result == ALIVE_IN_SEKI 
-             && semeai_results_first[d1][d2] != DEAD)
-         || (best_result == semeai_results_first[d1][d2]
-             && semeai_certain[d1][d2] > attack_certain)) {
-       best_result = semeai_results_first[d1][d2];
+      if (best_defense < semeai_results_first[d1][d2]
+         || (best_defense == semeai_results_first[d1][d2]
+             && defense_certain < semeai_certain[d1][d2])) {
+       best_defense = semeai_results_first[d1][d2];
        defense_move = semeai_move[d1][d2];
-       attack_certain = semeai_certain[d1][d2];
+       defense_certain = semeai_certain[d1][d2];
       }
-      if (worst_result == ALIVE
-         || worst_result == UNKNOWN
-         || (worst_result == ALIVE_IN_SEKI 
-             && semeai_results_second[d1][d2] != ALIVE)
-         || (worst_result == semeai_results_second[d1][d2]
-             && semeai_certain[d2][d1] > defense_certain)) {
-       worst_result = semeai_results_second[d1][d2];
+      if (best_attack < semeai_results_second[d2][d1]
+         || (best_attack == semeai_results_second[d2][d1]
+             && attack_certain < semeai_certain[d2][d1])) {
+       best_attack = semeai_results_second[d2][d1];
        attack_move = semeai_move[d2][d1];
-       defense_certain = semeai_certain[d2][d1];
+       attack_certain = semeai_certain[d2][d1];
       }
     }
+    
     if (semeai_found) {
       dragon2[d1].semeai = 1;
-      if (best_result != DEAD && worst_result == DEAD) {
+      if (best_defense != 0 && best_attack != 0) {
        update_status(DRAGON(d1).origin, CRITICAL, CRITICAL);
        dragon2[d1].semeai_defense_point = defense_move;
        dragon2[d1].semeai_defense_certain = defense_certain;
        dragon2[d1].semeai_attack_point = attack_move;
        dragon2[d1].semeai_attack_certain = attack_certain;
       }
-      else if (worst_result == ALIVE_IN_SEKI)
-       update_status(DRAGON(d1).origin, ALIVE, ALIVE_IN_SEKI);
-      else if (worst_result != UNKNOWN)
-       update_status(DRAGON(d1).origin, worst_result, worst_result);
+      else if (best_attack == 0 && attack_certain)
+       update_status(DRAGON(d1).origin, ALIVE, ALIVE);
     }
   }
 }
@@ -262,12 +255,13 @@
        DEBUG(DEBUG_SEMEAI, "Adding semeai defense move for %1m at %1m\n",
              DRAGON(d).origin, dragon2[d].semeai_defense_point);
       }
-      else if (DRAGON(d).color == other && dragon2[d].semeai_attack_point
+      else if (DRAGON(d).color == other
+              && dragon2[d].semeai_attack_point
               && (dragon2[d].owl_attack_point == NO_MOVE
                   || dragon2[d].semeai_attack_certain >= 
                      dragon2[d].owl_attack_certain)) {
        add_semeai_move(dragon2[d].semeai_attack_point, dragon2[d].origin);
-       DEBUG(DEBUG_SEMEAI, "Adding owl attack move for %1m at %1m\n",
+       DEBUG(DEBUG_SEMEAI, "Adding semeai attack move for %1m at %1m\n",
              DRAGON(d).origin, dragon2[d].semeai_attack_point);
       }
     }
@@ -877,7 +871,7 @@
    */
 
   owl_analyze_semeai(apos, bpos, &resulta, &resultb, &move, 0, &dummy);
-  if (resulta != DEAD
+  if (resulta != 0
       && worm[apos].defense_codes[0] == 0
       && move != NO_MOVE) {
     if (save_verbose)
Index: engine/sgfdecide.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/sgfdecide.c,v
retrieving revision 1.49
diff -u -r1.49 sgfdecide.c
--- engine/sgfdecide.c  22 Apr 2003 02:48:05 -0000      1.49
+++ engine/sgfdecide.c  31 May 2003 09:06:26 -0000
@@ -335,24 +335,27 @@
   if (*outfilename)
     sgffile_begindump(&tree);
 
+  gprintf("Analyzing semeai between %1m and %1m, %C moves first\n",
+         apos, bpos, board[apos]);
   owl_analyze_semeai(apos, bpos, &resulta, &resultb, &move, 1,
                     &result_certain);
-  gprintf("After %s at %1m, %1m is %s, %1m is %s (%d nodes)%s\n",
-         color == BLACK ? "black" : "white",
-         move,
-         apos, safety_to_string(resulta),
-         bpos, safety_to_string(resultb),
-         count_variations,
-         result_certain ? "" : ", uncertain");
+  gprintf("Semeai defense of %1m: result %s %1m\n",
+         apos, result_to_string(resulta), move);
+  gprintf("Semeai attack of %1m: result %s %1m\n",
+         bpos, result_to_string(resultb), move);
+  gprintf("%d nodes%s\n\n", count_variations,
+         result_certain ? "" : ", uncertain result");
+  
+  gprintf("Analyzing semeai between %1m and %1m, %C moves first\n",
+         bpos, apos, board[bpos]);
   owl_analyze_semeai(bpos, apos, &resultb, &resulta, &move, 1,
                     &result_certain);
-  gprintf("After %s at %1m, %1m is %s, %1m is %s (%d nodes)%s\n",
-         color == BLACK ? "white" : "black",
-         move,
-         apos, safety_to_string(resulta),
-         bpos, safety_to_string(resultb),
-         count_variations,
-         result_certain ? "" : ", uncertain");
+  gprintf("Semeai defense of %1m: result %s %1m\n",
+         bpos, result_to_string(resultb), move);
+  gprintf("Semeai attack of %1m: result %s %1m\n",
+         apos, result_to_string(resulta), move);
+  gprintf("%d nodes%s\n", count_variations,
+         result_certain ? "" : ", uncertain result");
 
   sgffile_enddump(outfilename);
   count_variations = 0;
Index: engine/value_moves.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/value_moves.c,v
retrieving revision 1.95
diff -u -r1.95 value_moves.c
--- engine/value_moves.c        29 May 2003 04:13:47 -0000      1.95
+++ engine/value_moves.c        31 May 2003 09:06:26 -0000
@@ -607,14 +607,14 @@
        }
       }
       else if (move_reasons[r].type == CONNECT_MOVE
-             && cut_possible(pos, OTHER_COLOR(color))) {
+              && cut_possible(pos, OTHER_COLOR(color))) {
        int worm1 = conn_worm1[move_reasons[r].what];
        int worm2 = conn_worm2[move_reasons[r].what];
        int pos2;
-       for (pos2 = BOARDMIN; pos2 < BOARDMAX; pos2++)
+       for (pos2 = BOARDMIN; pos2 < BOARDMAX; pos2++) {
          if (ON_BOARD(pos2) && board[pos2] == EMPTY
              && cut_possible(pos2, OTHER_COLOR(color))
-             && square_dist(pos, pos2) <= 5)
+             && square_dist(pos, pos2) <= 5) {
            for (j = 0; j < 8; j++) {
              int pos3 = pos2 + delta[j];
              if (ON_BOARD(pos3) && board[pos3] == color
@@ -624,18 +624,20 @@
                            worm1, EMPTY, NO_MOVE)) {
                  if (!disconnect(pos3, worm1, NULL)) {
                    add_connection_move(pos, pos3, worm1);
-                   DEBUG(DEBUG_MOVE_REASONS, "Connection at %1m induced for 
%1m/%1m due to connection at %1m/%1m",
+                   DEBUG(DEBUG_MOVE_REASONS, "Connection at %1m induced for 
%1m/%1m due to connection at %1m/%1m\n",
                          pos, worm1, worm2, pos3, worm1);
                  }
                  if (!disconnect(pos3, worm2, NULL)) {
                    add_connection_move(pos, pos3, worm2);
-                   DEBUG(DEBUG_MOVE_REASONS, "Connection at %1m induced for 
%1m/%1m due to connection at %1m/%1m",
+                   DEBUG(DEBUG_MOVE_REASONS, "Connection at %1m induced for 
%1m/%1m due to connection at %1m/%1m\n",
                          pos, worm1, worm2, pos3, worm2);
                  }
                  popgo();
                }
              }
            }
+         }
+       }
       }
     }
   }
Index: interface/play_gtp.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/interface/play_gtp.c,v
retrieving revision 1.118
diff -u -r1.118 play_gtp.c
--- interface/play_gtp.c        27 May 2003 07:46:59 -0000      1.118
+++ interface/play_gtp.c        31 May 2003 09:06:27 -0000
@@ -1676,10 +1676,10 @@
   owl_analyze_semeai(dragona, dragonb, &resulta, &resultb, &move, 1,
                     &result_certain);
   gtp_start_response(GTP_SUCCESS);
-  gtp_mprintf("%s %s %m", 
-             safety_to_string(resulta),
-             safety_to_string(resultb),
-             I(move), J(move));
+  gtp_print_code(resulta);
+  gtp_printf(" ");
+  gtp_print_code(resultb);
+  gtp_mprintf(" %m", I(move), J(move));
   if (!result_certain && report_uncertainty)
     gtp_printf(" uncertain");
 
Index: regression/auto01.tst
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/auto01.tst,v
retrieving revision 1.9
diff -u -r1.9 auto01.tst
--- regression/auto01.tst       13 May 2003 03:22:53 -0000      1.9
+++ regression/auto01.tst       31 May 2003 09:06:27 -0000
@@ -38,5 +38,5 @@
 # This is a difficult semeai problem.
 loadsgf games/auto_gen/auto006.sgf 99
 15 owl_analyze_semeai S9 S10
-#? [ALIVE DEAD S6]*
+#? [1 1 S6]*
 
Index: regression/auto_handtalk.tst
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/auto_handtalk.tst,v
retrieving revision 1.9
diff -u -r1.9 auto_handtalk.tst
--- regression/auto_handtalk.tst        22 Apr 2003 02:49:01 -0000      1.9
+++ regression/auto_handtalk.tst        31 May 2003 09:06:27 -0000
@@ -17,10 +17,10 @@
 #? [1 (N18|O17)]*
 
 7 owl_analyze_semeai Q17 P19
-#? [ALIVE DEAD (O18|N18|O17|P17)]
+#? [1 1 (O18|N18|O17|P17)]
 
 8 owl_analyze_semeai P19 Q17
-#? [ALIVE DEAD (N18|O17|S15)]*
+#? [1 1 (N18|O17|S15)]*
 
 loadsgf games/handtalk/handtalk2.sgf 134
 9 owl_attack r8
Index: regression/semeai.tst
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/semeai.tst,v
retrieving revision 1.38
diff -u -r1.38 semeai.tst
--- regression/semeai.tst       13 May 2003 03:22:53 -0000      1.38
+++ regression/semeai.tst       31 May 2003 09:06:27 -0000
@@ -86,88 +86,88 @@
 
 loadsgf games/semeai/semeai6.sgf
 1 owl_analyze_semeai C1 E1
-#? [ALIVE ALIVE (F1|F2|F3|F4|F5|PASS)]
+#? [1 0 (F1|F2|F3|F4|F5|PASS)]
 
 2 owl_analyze_semeai E1 C1
-#? [ALIVE ALIVE (B5|B4|B3|PASS)]
+#? [1 0 (B5|B4|B3|PASS)]
 
 3 owl_analyze_semeai L1 N1
-#? [ALIVE ALIVE (O5|O4|O3|P3|Q2|Q1|PASS)]
+#? [1 0 (O5|O4|O3|P3|Q2|Q1|PASS)]
 
 4 owl_analyze_semeai N1 L1
-#? [ALIVE ALIVE (H2|J3|K3|PASS)]
+#? [1 0 (H2|J3|K3|PASS)]
 
 5 owl_analyze_semeai A14 A12
-#? [ALIVE DEAD (A13|B13|C13|D13)]
+#? [1 1 (A13|B13|C13|D13)]
 
 6 owl_analyze_semeai A12 A14
-#? [ALIVE DEAD (A15|B15|C15|D15|E15)]
+#? [1 1 (A15|B15|C15|D15|E15)]
 
 loadsgf games/semeai/semeai7.sgf
 7 owl_analyze_semeai C1 E1
-#? [ALIVE ALIVE (F1|F2|F3|F4|F5|PASS)]
+#? [1 0 (F1|F2|F3|F4|F5|PASS)]
 
 8 owl_analyze_semeai E1 C1
-#? [ALIVE DEAD (B2|B3)]
+#? [1 1 (B2|B3)]
 
 9 owl_analyze_semeai L1 N1
-#? [ALIVE ALIVE (O5|O4|O3|P3|Q2|Q1)]
+#? [1 0 (O5|O4|O3|P3|Q2|Q1)]
 
 10 owl_analyze_semeai N1 L1
-#? [ALIVE DEAD (H2|K3)]
+#? [1 1 (H2|K3)]
 
 11 owl_analyze_semeai A14 A12
-#? [ALIVE DEAD (A13|B13|D13|PASS)]
+#? [1 1 (A13|B13|D13|PASS)]
 
 12 owl_analyze_semeai A12 A14
-#? [DEAD ALIVE PASS]
+#? [0 0 PASS]
 
 loadsgf games/semeai/semeai8.sgf
 13 owl_analyze_semeai C1 E1
-#? [DEAD ALIVE PASS]
+#? [0 0 PASS]
 
 14 owl_analyze_semeai E1 C1
-#? [ALIVE DEAD (B5|PASS)]
+#? [1 1 (B5|PASS)]
 
 15 owl_analyze_semeai L1 N1
-#? [DEAD ALIVE PASS]
+#? [0 0 PASS]
 
 16 owl_analyze_semeai N1 L1
-#? [ALIVE DEAD (K5|PASS)]
+#? [1 1 (K5|PASS)]
 
 17 owl_analyze_semeai A14 A12
-#? [DEAD ALIVE PASS]
+#? [0 0 PASS]
 
 18 owl_analyze_semeai A12 A14
-#? [ALIVE DEAD (A15|B15|D15|E15|PASS)]
+#? [1 1 (A15|B15|D15|E15|PASS)]
 
 loadsgf games/semeai/semeai9.sgf
 
 19 owl_analyze_semeai J1 L1
-#? [ALIVE DEAD (M3|N3|O3|P3|Q1)]
+#? [1 1 (M3|N3|O3|P3|Q1)]
 
 20 owl_analyze_semeai L1 J1
-#? [ALIVE DEAD (H1|H2|H3|H4|H5|H6|H7|H8)]
+#? [1 1 (H1|H2|H3|H4|H5|H6|H7|H8)]
 
 21 owl_analyze_semeai N19 O19
-#? [ALIVE DEAD (T17|T19)]
+#? [1 1 (T17|T19)]
 
 22 owl_analyze_semeai O19 N19
-#? [ALIVE DEAD (L16|L17|L18|M19)]
+#? [1 1 (L16|L17|L18|M19)]
 
 loadsgf golois/Goemate990902-1.sgf
 
 23 owl_analyze_semeai G12 G13
-#? [ALIVE DEAD (F15|G15|H15|E13|F13|PASS)]
+#? [1 1 (F15|G15|H15|E13|F13|PASS)]
 
 24 owl_analyze_semeai G13 G12
-#? [DEAD ALIVE PASS]
+#? [0 0 PASS]
 
 25 owl_analyze_semeai S8 R8
-#? [ALIVE DEAD S9]
+#? [1 1 S9]
 
 26 owl_analyze_semeai R8 S8
-#? [ALIVE DEAD S9]
+#? [1 1 S9]
 
 # If this semeai is treated as a strictly local
 # problem (ignoring the R8 dragon) then R7 can't live.
@@ -176,83 +176,82 @@
 # should be.  A similar remark holds with problem 28.
 
 27 owl_analyze_semeai Q7 R7
-#? [ALIVE DEAD S9]
+#? [1 1 S9]
 
 28 owl_analyze_semeai R7 Q7
-#? [ALIVE DEAD S9]
+#? [1 1 S9]
 
 loadsgf games/strategy11.sgf 127
 30 owl_analyze_semeai B3 G4
-#? [ALIVE DEAD C1]
+#? [1 1 C1]
 
 loadsgf games/strategy11.sgf 127
 31 owl_analyze_semeai G4 B3
-#? [ALIVE DEAD C1]
+#? [1 1 C1]
 
 loadsgf games/nicklas/nicklas14.sgf 55
 32 owl_analyze_semeai B8 D9
-#? [ALIVE ALIVE B6]*
+#? [1 0 B6]*
 
 loadsgf games/nicklas/nicklas14.sgf 55
 33 owl_analyze_semeai D9 B8
-#? [ALIVE DEAD B7]
+#? [1 1 B7]
 
 # S18 produces a favorable ko. T18 makes seki.
 loadsgf games/bretz.sgf 130
 34 owl_analyze_semeai N18 Q18
-#? [ALIVE DEAD S18]
+#? [1 1 S18]
 
 # ab added (3.1.22)
 loadsgf games/mertin13x13/gnugo-goliath2.W+38.sgf 61
 35 owl_analyze_semeai M13 M11
-#? [ALIVE DEAD (PASS|N13|N10|H11)]
+#? [1 1 (PASS|N13|N10|H11)]
 
 # See also reading:166
 loadsgf games/nngs/Lazarus-gnugo-3.1.19-200201092246.sgf 66
 36 owl_analyze_semeai S9 R11
-#? [ALIVE DEAD R12]*
+#? [1 1 R12]*
 
 loadsgf games/semeai/semeai10.sgf
 37 owl_analyze_semeai B11 L7
-#? [ALIVE DEAD B12]
+#? [1 1 B12]
 
 loadsgf games/semeai/semeai11.sgf
 38 owl_analyze_semeai B9 B8
-#? [ALIVE DEAD (PASS|B1|A9)]
+#? [1 1 (PASS|B1|A9)]
 
 # See also global:3.
 loadsgf golois/Aya991113-13.sgf
-# Correct answer is ko dependent (2 2 H4).
 39 owl_analyze_semeai R12 H9
-#? [!ALIVE DEAD J4]
+#? [2 2 H4]
 
 40 owl_analyze_semeai H9 R12
-#? [ALIVE DEAD (J4|H4)]
+#? [1 1 (J4|H4)]
 
 loadsgf games/semeai/semeai9.sgf
 41 owl_analyze_semeai A3 A5
-#? [ALIVE DEAD (PASS|B3|A6|B6|C5|D4|E3|E2|E1)]
+#? [1 1 (PASS|B3|A6|B6|C5|D4|E3|E2|E1)]
 42 owl_analyze_semeai A5 A3
-#? [DEAD ALIVE PASS]
+#? [0 0 PASS]
 43 owl_analyze_semeai A16 A12
-#? [ALIVE DEAD (A15|A11|B11|C14|C13|D12|D11|D10|D9|B9|A9)]
+#? [1 1 (A15|A11|B11|C14|C13|D12|D11|D10|D9|B9|A9)]
 44 owl_analyze_semeai A12 A16
-#? [ALIVE DEAD (A17|B17|C16|D16|E15|E14|F13|F12|F11|F10|F9|F8|B9|A9)]
+#? [1 1 (A17|B17|C16|D16|E15|E14|F13|F12|F11|F10|F9|F8|B9|A9)]
 
 loadsgf games/semeai/semeai12.sgf
 45 owl_analyze_semeai B5 A9
-#? [ALIVE DEAD C1]*
+#? [1 1 C1]*
 
 loadsgf games/semeai/semeai9.sgf
 46 owl_analyze_semeai Q12 S11
-#? [ALIVE ALIVE (PASS|R8|R9|T11|T9|R11|R10)]
+#? [1 0 (PASS|R8|R9|T11|T9|R11|R10)]
 47 owl_analyze_semeai S11 Q12
-#? [ALIVE ALIVE (PASS|T11|T9|R9|T10|R10|R11)]*
+#? [1 0 (PASS|T11|T9|R9|T10|R10|R11)]*
 
 # The opposite semeai is not very interesting (black clearly can kill white).
 loadsgf games/nngs/jypower-gnugo-3.3.17-200304150031.sgf 166
 50 owl_analyze_semeai O7 L7
-#? [ALIVE DEAD (J5|J6|K7|J4|G5|G6|H7)]
+#? [1 1 (J5|J6|K7|J4|G5|G6|H7)]
 
 
 ########### end of semeai tests #################
Index: regression/semeai_rot.tst
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/semeai_rot.tst,v
retrieving revision 1.2
diff -u -r1.2 semeai_rot.tst
--- regression/semeai_rot.tst   22 Apr 2003 02:48:05 -0000      1.2
+++ regression/semeai_rot.tst   31 May 2003 09:06:27 -0000
@@ -3,20 +3,20 @@
 orientation 1
 loadsgf games/semeai/semeai6.sgf
 6 owl_analyze_semeai A12 A14
-#? [ALIVE DEAD (A15|B15|C15|D15)]*
+#? [1 1 (A15|B15|C15|D15)]*
 
 orientation 1
 loadsgf games/semeai/semeai8.sgf
 18 owl_analyze_semeai A12 A14
-#? [ALIVE DEAD (A15|B15|D15|PASS)]*
+#? [1 1 (A15|B15|D15|PASS)]*
 
 orientation 2
 loadsgf games/semeai/semeai9.sgf
 22 owl_analyze_semeai O19 N19
-#? [ALIVE DEAD (L15|L17|L18)]*
+#? [1 1 (L15|L17|L18)]*
 
 orientation 1
 loadsgf games/nicklas/nicklas14.sgf 55
 32 owl_analyze_semeai B8 D9
-#? [ALIVE ALIVE B6]*
+#? [1 0 B6]*
 




reply via email to

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