gnugo-devel
[Top][All Lists]
Advanced

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

[gnugo-devel] arend_1_22.4: experimental influence, first step


From: Arend Bayer
Subject: [gnugo-devel] arend_1_22.4: experimental influence, first step
Date: Sat, 19 Jan 2002 20:10:14 +0100 (CET)

- experimental-influence: new_value_territory, enhanced debug output

Below is a first regression breakage of --experimental-influence (+unrevised
version of arend_1_22.2) which does not seem too bad. So although I will
probably revise this soon, this might already be worth adding for 3.1.22
if others want to try it out. (The enhanced influence debug output is
barely needed in testing the territory valuation.)

If I could get a clear net improvement soon so that new_value_territory
could replace value_territory unconditionally, this might save me some
effort in avoiding the need to do experimental-influence dependent
influence pattern tuning. 

Arend

make third_batch
./regress.sh . nicklas1.tst
1206 unexpected FAIL: Correct 'C15', got 'N10'
./regress.sh . nicklas2.tst
./regress.sh . nicklas3.tst
./regress.sh . nicklas4.tst
1201 unexpected FAIL: Correct 'Q9', got 'D9'
./regress.sh . nicklas5.tst
./regress.sh . manyfaces.tst
1 unexpected FAIL: Correct 'S13', got 'O7'
2 unexpected FAIL: Correct 'S16', got 'H6'
./regress.sh . niki.tst
./regress.sh . trevor.tst
380 unexpected PASS!
411 unexpected PASS!
./regress.sh . tactics.tst
./regress.sh . buzco.tst
1 unexpected FAIL: Correct 'P2', got 'R9'
./regress.sh . nngs.tst
Possible crash!: expected 157 results, got 156. Last succesful test was 2020.
120 unexpected PASS!
310 unexpected PASS!
320 unexpected FAIL: Correct 'B15|B16', got 'D17'
330 unexpected FAIL: Correct 'B15|B16', got 'D15'
420 unexpected PASS!
610 unexpected PASS!
700 unexpected PASS!
890 unexpected PASS!
900 unexpected FAIL: Correct 'Q15', got 'R6'
930 unexpected FAIL: Correct 'S8', got 'O3'
950 unexpected FAIL: Correct 'F1', got 'G3'
1030 unexpected PASS!
1040 unexpected PASS!
1250 unexpected PASS!
1320 unexpected FAIL: Correct 'O18', got 'Q6'
1500 unexpected FAIL: Correct 'R16', got 'Q17'
1550 unexpected PASS!
1660 unexpected PASS!
1790 unexpected PASS!
1940 unexpected PASS!
1950 unexpected PASS!
1980 unexpected PASS!
./regress.sh . strategy3.tst
137 unexpected FAIL: Correct 'F5', got 'J15'


Index: engine/influence.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/influence.c,v
retrieving revision 1.28
diff -u -r1.28 influence.c
--- engine/influence.c  15 Jan 2002 07:26:06 -0000      1.28
+++ engine/influence.c  19 Jan 2002 18:52:37 -0000
@@ -32,6 +32,7 @@
 #include "patterns.h"
 
 static void value_territory(struct influence_data *q);
+static void new_value_territory(struct influence_data *q);
 static void add_influence_source(int pos, int color, float strength,
                                  float attenuation,
                                  struct influence_data *q);
@@ -928,6 +929,50 @@
   return EMPTY;
 }
 
+static void
+new_value_territory(struct influence_data *q)
+{
+  int i, j;
+  for (i = 0; i < board_size; i++)
+    for (j = 0; j < board_size; j++) {
+      q->territory_value[i][j] = 0.0;
+
+      if (q->p[i][j] == EMPTY
+         || (q->black_strength[i][j] == 0 && q->white_strength[i][j] == 0)) {
+        float diff = ( q->white_influence[i][j] - q->black_influence[i][j] )
+                    /( q->white_influence[i][j] + q->black_influence[i][j] );
+        q->territory_value[i][j] = diff * diff * diff;
+       /* Dead stone, upgrade to territory. Notice that this is not
+         * the point for a prisoner, which is added later. Instead
+         * this is to make sure that the vertex is not regarded as
+         * moyo or area. Also notice that the non-territory
+         * degradation below may over-rule this decision.
+        */
+       if (BOARD(i, j) == BLACK)
+         q->territory_value[i][j] = 1.0;
+       else if (BOARD(i, j) == WHITE)
+         q->territory_value[i][j] = -1.0;
+
+       /* If marked as non-territory for the color currently owning
+         * it, reset the territory value.
+        */
+       if (q->territory_value[i][j] > 0.0
+           && (q->non_territory[i][j] & WHITE))
+         q->territory_value[i][j] = 0.0;
+
+       if (q->territory_value[i][j] < 0.0
+           && (q->non_territory[i][j] & BLACK))
+         q->territory_value[i][j] = 0.0;
+       
+       /* Dead stone, add one to the territory value. */
+       if (BOARD(i, j) == BLACK)
+         q->territory_value[i][j] += 1.0;
+       else if (BOARD(i, j) == WHITE)
+         q->territory_value[i][j] -= 1.0;
+      }
+    }
+}
+
 /* Give territorial value to each vertex.
  *
  * A vertex with a lively stone has territorial value of 0.
@@ -1181,7 +1226,10 @@
   int i, j;
   compute_influence(&initial_influence, OTHER_COLOR(color), -1, -1,
                    dragons_known, NULL, NULL);
-  value_territory(&initial_influence);
+  if (experimental_influence)
+    new_value_territory(&initial_influence);
+  else
+    value_territory(&initial_influence);
   compute_influence(&initial_opposite_influence, color, -1, -1,
                    dragons_known, NULL, NULL);
   /* Invalidate information in move_influence. */
@@ -1221,7 +1269,10 @@
                      NULL, saved_stones);
     decrease_depth_values();
     popgo();
-    value_territory(&move_influence);
+    if (experimental_influence)
+      new_value_territory(&move_influence);
+    else
+      value_territory(&move_influence);
   }
   else {
     gprintf("Computing influence for illegal move %m (move number %d)\n",
@@ -1330,7 +1381,8 @@
        old_value = -old_value;
       }
       
-      if (new_value != old_value) {
+      if (( new_value - old_value > 0.01)
+          || ( old_value - new_value > 0.01)) {
        DEBUG(DEBUG_TERRITORY, "  %1m:   - %m territory change %f (%f -> %f)\n",
                pos, i, j, new_value - old_value, old_value, new_value);
        delta += new_value - old_value;
@@ -1500,6 +1552,14 @@
   compute_initial_influence(color, dragons_known);
   print_influence(&initial_influence, (dragons_known ? "dragons_known"
                                       : "dragons_unknown"));
+  if ((printmoyo & PRINTMOYO_VALUE_TERRITORY)
+       && dragons_known) {
+    fprintf(stderr, "territory valuation (initial influence):\n");
+    print_numeric_influence(&initial_influence,
+                            initial_influence.territory_value,
+                            "%1.2f", 4, 0);
+  }
+
   print_influence(&initial_opposite_influence,
                  dragons_known ? "dragons_known, opposite color"
                  : "dragons_unknown, opposite color");
@@ -1514,6 +1574,13 @@
 {
   compute_move_influence(I(pos), J(pos), color, saved_stones);
   print_influence(&move_influence, "after move, dragons known");
+
+  if (printmoyo & PRINTMOYO_VALUE_TERRITORY) {
+    fprintf(stderr, "territory valuation (after move):\n");
+    print_numeric_influence(&initial_influence,
+                            initial_influence.territory_value,
+                            "%1.2f", 4, 0);
+  }
 }
 
 /* Print influence for debugging purposes. */
@@ -1549,20 +1616,29 @@
   if (printmoyo & PRINTMOYO_NUMERIC_INFLUENCE) {
     /* Print the white influence values. */
     fprintf(stderr, "white influence (%s):\n", info_string);
-    print_numeric_influence(q, q->white_influence, "%3.0f", 1, 1);
-    
+    if (experimental_influence)
+      print_numeric_influence(q, q->white_influence, "%3.2f", 6, 0);
+    else
+      print_numeric_influence(q, q->white_influence, "%3.0f", 3, 1);
     /* Print the black influence values. */
     fprintf(stderr, "black influence (%s):\n", info_string);
-    print_numeric_influence(q, q->black_influence, "%3.0f", 1, 1);
+    if (experimental_influence)
+      print_numeric_influence(q, q->black_influence, "%3.2f", 6, 1);
+    else
+      print_numeric_influence(q, q->black_influence, "%3.0f", 3, 1);
   }
 
   if (printmoyo & PRINTMOYO_PRINT_INFLUENCE) {
     fprintf(stderr, "influence regions (%s):\n", info_string);
     print_influence_areas(q);
   }
+
 }
 
-/* Print numeric influence values. */
+/* Print numeric influence values.
+ * If draw_stones is not zero, then it denotes the lenght (in characters)
+ * of the numeric output fields.
+ */ 
 static void
 print_numeric_influence(struct influence_data *q,
                        float values[MAX_BOARD][MAX_BOARD],
@@ -1571,6 +1647,11 @@
                        int mark_epsilon)
 {
   int i, j;
+  char spaces[10] = "";
+  if (draw_stones) {
+    for (i = 0; i < draw_stones; i++)
+      strcat(spaces, " ");
+  }
   for (i = 0; i < board_size; i++) {
     for (j = 0; j < board_size; j++) {
       if (draw_stones && q->p[i][j] == WHITE)
Index: engine/liberty.h
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/liberty.h,v
retrieving revision 1.69
diff -u -r1.69 liberty.h
--- engine/liberty.h    19 Jan 2002 16:11:16 -0000      1.69
+++ engine/liberty.h    19 Jan 2002 18:52:41 -0000
@@ -456,6 +456,7 @@
 #define PRINTMOYO_PERMEABILITY      0x40
 #define PRINTMOYO_STRENGTH          0x80
 #define PRINTMOYO_ATTENUATION       0x100
+#define PRINTMOYO_VALUE_TERRITORY   0x200
 
 /* These values are used to communicate whether stones have been
  * saved, captured, or neither, when computing the influence effects




reply via email to

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