gnugo-devel
[Top][All Lists]
Advanced

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

[gnugo-devel] A bug somewhere


From: Gunnar Farneback
Subject: [gnugo-devel] A bug somewhere
Date: Thu, 14 Nov 2002 18:40:29 +0100
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)

The autohelper functions o_somewhere and x_somewhere have turned out
to be very useful but for technical reasons they are not appropriate
in many places where they are used.

The background is that when it was first introduced it was used in
patterns where it was only interesting to detect a stone if it was
alive, or at least not dead. Thus the function included a status
test.

It was soon realized that this was not a good idea when stackp>0 since
the dragon data are not valid then and the status test was disabled
for stackp>0.

However, this is not sufficient. When used in the owl patterns the
status is not known even when stackp==0. Still worse is that the
computation of initial influence is done before make_dragons() is
called at all, meaning that the dragon data has not been initialized
yet. Thus use of [ox]_somewhere in influence databases can cause
dependencies on earlier moves or earlier test cases.

This state of affairs is clearly not acceptable. The appended patch
splits the helper into [ox]_alive_somewhere with the old behaviour and
[ox]_somewhere without any status check. All appearances of
[ox]_somewhere in patterns.db, patterns2.db, endgame.db, and fuseki.db
have been changed into [ox]_alive_somewhere.

- somewhere() revised
- new autohelper functions [ox]_alive_somewhere
- autohelper functions [ox]_somewhere revised

This patch has no effects on the regressions.

/Gunnar

Index: engine/liberty.h
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/liberty.h,v
retrieving revision 1.128
diff -u -r1.128 liberty.h
--- engine/liberty.h    21 Oct 2002 03:31:35 -0000      1.128
+++ engine/liberty.h    21 Oct 2002 11:21:55 -0000
@@ -531,7 +531,7 @@
 int play_connect_n(int color, int do_connect, int num_moves, ...);
 int cut_possible(int pos, int color);
 int defend_against(int move, int color, int apos);
-int somewhere(int color, int num_moves, ...);
+int somewhere(int color, int check_alive, int num_moves, ...);
 
 /* Printmoyo values, specified by -m flag. */
 #define PRINTMOYO_TERRITORY         0x01
Index: engine/utils.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/utils.c,v
retrieving revision 1.59
diff -u -r1.59 utils.c
--- engine/utils.c      21 Oct 2002 03:31:35 -0000      1.59
+++ engine/utils.c      21 Oct 2002 11:22:00 -0000
@@ -181,23 +181,26 @@
  * Example: somewhere(WHITE, 2, apos, bpos, cpos).
  * 
  * Returns true if one of the vertices listed
- * satisfies board[pos]==color. Here last_move is the
- * number of moves minus one.
+ * satisfies board[pos]==color. Here num_moves is the
+ * number of moves. If check_alive is true, the dragon is not allowed
+ * to be dead. This check is only valid if stackp==0.
  */
 
 int
-somewhere(int color, int last_move, ...)
+somewhere(int color, int check_alive, int num_moves, ...)
 {
   va_list ap;
   int pos;
   int k;
+
+  gg_assert(stackp == 0 || !check_alive);
   
-  va_start(ap, last_move);
-  for (k = 0; k <= last_move; k++) {
+  va_start(ap, num_moves);
+  for (k = 0; k < num_moves; k++) {
     pos = va_arg(ap, int);
 
     if (board[pos] == color
-       && (stackp > 0 || dragon[pos].status != DEAD))
+       && (!check_alive || dragon[pos].status != DEAD))
       return 1;
   }
 
Index: patterns/endgame.db
===================================================================
RCS file: /cvsroot/gnugo/gnugo/patterns/endgame.db,v
retrieving revision 1.38
diff -u -r1.38 endgame.db
--- patterns/endgame.db 30 Sep 2002 20:09:57 -0000      1.38
+++ patterns/endgame.db 21 Oct 2002 11:22:02 -0000
@@ -183,7 +183,7 @@
 ..ac
 ----
 
-;x_somewhere(b,c) && oplay_attack(a,a) && !oplay_attack(*,?,a,a)
+;x_alive_somewhere(b,c) && oplay_attack(a,a) && !oplay_attack(*,?,a,a)
 
 
 Pattern EE4
@@ -1472,7 +1472,7 @@
 d*A
 ??b
 
-; o_somewhere(c,d) && (!weak(c) || !weak(d))
+; o_alive_somewhere(c,d) && (!weak(c) || !weak(d))
 ; && proper_eye(b) && oplay_attack(*,A)
 
 
Index: patterns/fuseki.db
===================================================================
RCS file: /cvsroot/gnugo/gnugo/patterns/fuseki.db,v
retrieving revision 1.19
diff -u -r1.19 fuseki.db
--- patterns/fuseki.db  8 Oct 2002 20:06:39 -0000       1.19
+++ patterns/fuseki.db  21 Oct 2002 11:22:04 -0000
@@ -156,7 +156,7 @@
 |..........
 +----------
 
-; x_somewhere(a,b)
+; x_alive_somewhere(a,b)
 
 
 #### High (ikken taka) kakari
@@ -208,7 +208,7 @@
 |..........
 +----------
 
-; x_somewhere(a,b)
+; x_alive_somewhere(a,b)
 
 
 #### Two space high (nikken taka) kakari
@@ -258,7 +258,7 @@
 |..........
 +----------
 
-; x_somewhere(a,b)
+; x_alive_somewhere(a,b)
 
 
 Pattern F6
@@ -884,7 +884,7 @@
 ........
 --------
 
-; o_somewhere(a,b)
+; o_alive_somewhere(a,b)
 
 
 Pattern F307
@@ -905,7 +905,7 @@
 ........
 --------
 
-; o_somewhere(a,b,c,d,e,f)
+; o_alive_somewhere(a,b,c,d,e,f)
 
 
 #################
@@ -929,7 +929,7 @@
 .......??
 ---------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern F402
@@ -1077,7 +1077,7 @@
 ?xx.......
 ----------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern F410b
@@ -1099,7 +1099,7 @@
 x.........?
 -----------
 
-; x_somewhere(a,b)
+; x_alive_somewhere(a,b)
 
 
 Pattern F410c
@@ -1124,7 +1124,7 @@
 x...........
 ------------
 
-; x_somewhere(a,b,c,d,e,f)
+; x_alive_somewhere(a,b,c,d,e,f)
 
 
 Pattern F410d
@@ -1145,7 +1145,7 @@
 .........
 ---------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern F410e
@@ -1166,7 +1166,7 @@
 .........
 ---------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern F411
@@ -1331,7 +1331,7 @@
 .........
 ---------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern F505
@@ -1403,7 +1403,7 @@
 .....
 -----
 
-;x_somewhere(a,b,c)
+;x_alive_somewhere(a,b,c)
 
 
 #####################################
@@ -1426,7 +1426,7 @@
 ............
 ------------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern F702
@@ -1445,7 +1445,7 @@
 ............
 ------------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern F703
@@ -1660,7 +1660,7 @@
 |..............
 +--------------
 
-;x_somewhere(a,b,c,d,e,f) && o_somewhere(g,h)
+;x_alive_somewhere(a,b,c,d,e,f) && o_alive_somewhere(g,h)
 
 
 Pattern F810
@@ -1681,7 +1681,7 @@
 |...............
 +---------------
 
-;x_somewhere(a,b,c,d,e,f) && o_somewhere(g,h)
+;x_alive_somewhere(a,b,c,d,e,f) && o_alive_somewhere(g,h)
 
 
 Pattern F811
@@ -1702,7 +1702,7 @@
 |..............
 +--------------
 
-;x_somewhere(a,b,c,d,e,f) && x_somewhere(g,h)
+;x_alive_somewhere(a,b,c,d,e,f) && x_alive_somewhere(g,h)
 
 
 ################
@@ -1742,7 +1742,7 @@
 .......
 -------
 
-;o_somewhere(a,b)
+;o_alive_somewhere(a,b)
 
 
 ######################################################################
@@ -1910,7 +1910,7 @@
 |...........
 +-----------
 
-;x_somewhere(a,b,c,d,e,f,g,h,i) && x_somewhere(j,k,l,m,n,p,q,r,s)
+;x_alive_somewhere(a,b,c,d,e,f,g,h,i) && x_alive_somewhere(j,k,l,m,n,p,q,r,s)
 
 
 Pattern J11
@@ -2146,7 +2146,7 @@
 |.......
 +-------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern J28
@@ -2169,7 +2169,7 @@
 |........
 +--------
 
-; x_somewhere(a,b,c,d,e,f)
+; x_alive_somewhere(a,b,c,d,e,f)
 
 
 Pattern J29
@@ -2265,7 +2265,7 @@
 |.......
 +-------
 
-; o_somewhere(a,b)
+; o_alive_somewhere(a,b)
 
 
 Pattern J34
@@ -2441,7 +2441,7 @@
 |...abcd
 |...efgh
 
-; x_somewhere(a,b,c,d,e,f,g,h)
+; x_alive_somewhere(a,b,c,d,e,f,g,h)
 
 > replace(c,*);
 > replace(d,*)
Index: patterns/mkpat.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/patterns/mkpat.c,v
retrieving revision 1.83
diff -u -r1.83 mkpat.c
--- patterns/mkpat.c    14 Oct 2002 15:41:07 -0000      1.83
+++ patterns/mkpat.c    21 Oct 2002 11:22:10 -0000
@@ -205,8 +205,12 @@
   {"legal_omove",              1, 0.05, "is_legal(%s,color)"},
   {"x_suicide",                 1, 0.05, "is_suicide(%s, OTHER_COLOR(color))"},
   {"o_suicide",                        1, 0.05, "is_suicide(%s, color)"},
-  {"x_somewhere",             -1, 0.01, "somewhere(OTHER_COLOR(color), %d"},
-  {"o_somewhere",             -1, 0.01, "somewhere(color, %d"},
+  {"x_alive_somewhere",               -1, 0.01,
+                "somewhere(OTHER_COLOR(color), 1, 1+%d"},
+  {"o_alive_somewhere",               -1, 0.01, "somewhere(color, 1, 1+%d"},
+  {"x_somewhere",             -1, 0.01,
+                "somewhere(OTHER_COLOR(color), 0, 1+%d"},
+  {"o_somewhere",             -1, 0.01, "somewhere(color, 0, 1+%d"},
   {"xmoyo",                    1, 0.01,
                "(influence_moyo_color(%s) == OTHER_COLOR(color))"},
   {"omoyo",                    1, 0.01,
Index: patterns/patterns.db
===================================================================
RCS file: /cvsroot/gnugo/gnugo/patterns/patterns.db,v
retrieving revision 1.86
diff -u -r1.86 patterns.db
--- patterns/patterns.db        10 Oct 2002 21:19:27 -0000      1.86
+++ patterns/patterns.db        21 Oct 2002 11:22:20 -0000
@@ -1436,7 +1436,7 @@
 .....
 -----
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern EC9
@@ -3905,7 +3905,7 @@
 ....?
 -----
 
-; x_somewhere(a,b)
+; x_alive_somewhere(a,b)
 
 
 Pattern EB403
@@ -3924,7 +3924,7 @@
 .....
 -----
 
-;oplay_attack(*,a,b,c,c) && x_somewhere(d,e)
+;oplay_attack(*,a,b,c,c) && x_alive_somewhere(d,e)
 
 
 Pattern EB404
@@ -4028,7 +4028,7 @@
 .....oo
 -------
 
-; o_somewhere(a,b,c,d)
+; o_alive_somewhere(a,b,c,d)
 
 
 Pattern EB412
@@ -5197,7 +5197,7 @@
 ofcb*g
 ------
 
-;!weak(h) && x_somewhere(A,B) && o_somewhere(C,D,E)
+;!weak(h) && x_alive_somewhere(A,B) && o_alive_somewhere(C,D,E)
 ;&& xplay_attack(d,c,f,f) == WIN
 ;&& !oplay_attack_either(*,d,c,h,c)
 ;&& !oplay_attack(*,a,b,c,d,e,f,g,c,h)
@@ -7044,7 +7044,7 @@
 xXO.
 xxXO
 
-; x_somewhere(a,b,c)
+; x_alive_somewhere(a,b,c)
 
 
 ######################################
@@ -7763,7 +7763,7 @@
 ; lib(c)>1
 ; && !oplay_attack(*,b)
 ; && oplay_defend_both(*,A,*,b)
-; && (oplay_attack(*,A,e) || !x_somewhere(D,F))
+; && (oplay_attack(*,A,e) || !x_alive_somewhere(D,F))
 
 
 Pattern CB246
@@ -8061,7 +8061,7 @@
 ..*b
 ????
 
-; o_somewhere(a,b)
+; o_alive_somewhere(a,b)
 ; || oplay_attack(*,c,d,e,b,a)
 ; || oplay_attack(*,c,d,e,a,b)
 
@@ -8674,7 +8674,7 @@
 ??....?
 ??.ooo?
 
-;!xterri(*) && weak(A) && o_somewhere(b,c,d,e,f,g)
+;!xterri(*) && weak(A) && o_alive_somewhere(b,c,d,e,f,g)
 
 
 Pattern CB323
@@ -8884,7 +8884,7 @@
 ......
 ------
 
-; oplay_attack(a,b,*,c) || x_somewhere(d,e)
+; oplay_attack(a,b,*,c) || x_alive_somewhere(d,e)
 > replace(a,*)
 
 
@@ -8919,7 +8919,7 @@
 c*g
 abh
 
-;(x_somewhere(d,e,f,g,h) || xarea(f))
+;(x_alive_somewhere(d,e,f,g,h) || xarea(f))
 ;&& !oplay_disconnect(*,b,*,a) && !oplay_disconnect(*,c,*,a)
 
 
@@ -9001,7 +9001,7 @@
 .......
 -------
 
-;x_somewhere(a,b)
+;x_alive_somewhere(a,b)
 
 
 Pattern ED6
@@ -9710,7 +9710,7 @@
 .......
 -------
 
-;weak(a) && o_somewhere(b,c,d,e)
+;weak(a) && o_alive_somewhere(b,c,d,e)
 
 
 Pattern ED50
@@ -11025,7 +11025,7 @@
 X...abcd
 ?.O..???
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 Pattern CD95
@@ -11240,7 +11240,7 @@
 ; does_defend(*,A)
 
 > replace(a,*);
-> if (!o_somewhere(b)) replace(b,*)
+> if (!o_alive_somewhere(b)) replace(b,*)
 
 
 Pattern CD107
@@ -11973,7 +11973,7 @@
 ...........
 -----------
 
-; x_somewhere(a,b,c,d)
+; x_alive_somewhere(a,b,c,d)
 
 
 # Compare EJ42. This gives a bonus if there's additional empty
@@ -12014,7 +12014,7 @@
 .....
 -----
 
-;o_somewhere(c,d)
+;o_alive_somewhere(c,d)
 
 >replace(a,*);
 >replace(b,*)
@@ -12134,7 +12134,7 @@
 .....c.
 -------
 
-; x_somewhere(a,b,c)
+; x_alive_somewhere(a,b,c)
 
 
 Pattern EJ56
@@ -12155,7 +12155,7 @@
 ........
 --------
 
-; o_somewhere(a,b,c,d)
+; o_alive_somewhere(a,b,c,d)
 
 
 Pattern EJ57
@@ -12454,7 +12454,7 @@
 .....
 -----
 
-; o_somewhere(a,b)
+; o_alive_somewhere(a,b)
 
 
 Pattern EJ76
@@ -12487,7 +12487,7 @@
 e?.....
 -------
 
-; o_somewhere(a,b) && x_somewhere(c,d,e)
+; o_alive_somewhere(a,b) && x_alive_somewhere(c,d,e)
 
 
 Pattern EJ78
@@ -12525,7 +12525,7 @@
 |......
 |..cdx?
 
-; x_somewhere(a,b) && x_somewhere(c,d)
+; x_alive_somewhere(a,b) && x_alive_somewhere(c,d)
 
 
 Pattern EJ80
@@ -12634,7 +12634,7 @@
 ?.....
 ------
 
-; o_somewhere(a,b,c,d)
+; o_alive_somewhere(a,b,c,d)
 
 
 Pattern EJ87
@@ -12726,7 +12726,7 @@
 ...........
 -----------
 
-; o_somewhere(a,b,c,d,e,f,g)
+; o_alive_somewhere(a,b,c,d,e,f,g)
 > replace(h,*);
 > replace(i,*)
 
@@ -12835,7 +12835,7 @@
 ......
 ------
 
-; o_somewhere(a,b,c,d,e)
+; o_alive_somewhere(a,b,c,d,e)
 
 
 Pattern EJ98
@@ -13439,7 +13439,7 @@
 ?a...X
 ?..O??
 
-; omoyo(a) && !(o_somewhere(b) && o_somewhere(c,d))
+; omoyo(a) && !(o_alive_somewhere(b) && o_alive_somewhere(c,d))
 
 
 Pattern LE8
Index: patterns/patterns2.db
===================================================================
RCS file: /cvsroot/gnugo/gnugo/patterns/patterns2.db,v
retrieving revision 1.47
diff -u -r1.47 patterns2.db
--- patterns/patterns2.db       4 Oct 2002 09:14:12 -0000       1.47
+++ patterns/patterns2.db       21 Oct 2002 11:22:22 -0000
@@ -1450,8 +1450,8 @@
 .X.
 
 ; lib(e) > 1 && lib(f) > 1
-; && (o_somewhere(c) + o_somewhere(C) + o_somewhere(d) <= 1)
-; && !(o_somewhere(d) && (o_somewhere(b) || o_somewhere(B)))
+; && (o_alive_somewhere(c) + o_alive_somewhere(C) + o_alive_somewhere(d) <= 1)
+; && !(o_alive_somewhere(d) && (o_alive_somewhere(b) || o_alive_somewhere(B)))
 
 
 Pattern Shape9b
@@ -1473,8 +1473,8 @@
 eOf
 .XX
 
-; (o_somewhere(c) + o_somewhere(C) + o_somewhere(d) <= 1)
-; && !(o_somewhere(d) && (o_somewhere(b) || o_somewhere(B)))
+; (o_alive_somewhere(c) + o_alive_somewhere(C) + o_alive_somewhere(d) <= 1)
+; && !(o_alive_somewhere(d) && (o_alive_somewhere(b) || o_alive_somewhere(B)))
 ; && !attack(e) && !attack(f)
 
 
@@ -1493,8 +1493,8 @@
 eOA
 .fO
 
-; (o_somewhere(c) + o_somewhere(C) + o_somewhere(d) <= 1)
-; && !(o_somewhere(d) && (o_somewhere(b) || o_somewhere(B)))
+; (o_alive_somewhere(c) + o_alive_somewhere(C) + o_alive_somewhere(d) <= 1)
+; && !(o_alive_somewhere(d) && (o_alive_somewhere(b) || o_alive_somewhere(B)))
 ; && !attack(A) && !attack(e) && !attack(f)
 
 
@@ -2051,7 +2051,7 @@
 ....
 ----
 
-;!same_dragon(a,b) || x_somewhere(C,D,E)
+;!same_dragon(a,b) || x_alive_somewhere(C,D,E)
 
 
 Pattern Shape46
@@ -2314,7 +2314,7 @@
 aO..
 ----
 
-;o_somewhere(a,b)
+;o_alive_somewhere(a,b)
 
 
 Pattern Shape66
@@ -2483,7 +2483,7 @@
 ....
 ----
 
-;(x_somewhere(D) || oplay_attack(*,?,D,D)) && !oplay_defend(*,a,b,c,*)
+;(x_alive_somewhere(D) || oplay_attack(*,?,D,D)) && !oplay_defend(*,a,b,c,*)
 
 
 Pattern Shape76
@@ -2939,7 +2939,7 @@
 eOC
 fg*
 
-;lib(a)>1 && o_somewhere(e,f,g) && !attack(B) && !attack(C)
+;lib(a)>1 && o_alive_somewhere(e,f,g) && !attack(B) && !attack(C)
 ;&& !oplay_defend_both(*,?,d,B,C)
 
 
@@ -3410,7 +3410,7 @@
 .......
 -------
 
-;!weak(G) && x_somewhere(a,b,c,d,e,f)
+;!weak(G) && x_alive_somewhere(a,b,c,d,e,f)
 
 >antisuji(*);
 




reply via email to

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