Ticket #158: endgame_7_11.2.diff

File endgame_7_11.2.diff, 4.7 kB (added by nando, 2 years ago)

endgame tuning (introducing the notion of "known safe move")

  • engine/liberty.h

    RCS file: /cvsroot/gnugo/gnugo/engine/liberty.h,v
    retrieving revision 1.258
    diff -u -r1.258 liberty.h
     
    408408void register_good_attack_threat(int move, int target); 
    409409int is_known_good_attack_threat(int move, int target); 
    410410 
     411void register_known_safe_move(int move); 
     412int is_known_safe_move(int move); 
     413 
    411414int get_attack_threats(int pos, int max_strings, int strings[]); 
    412415int get_defense_threats(int pos, int max_strings, int strings[]); 
    413416void get_saved_worms(int pos, signed char saved[BOARDMAX]); 
  • engine/move_reasons.c

    RCS file: /cvsroot/gnugo/gnugo/engine/move_reasons.c,v
    retrieving revision 1.135
    diff -u -r1.135 move_reasons.c
     
    7474/* Attack threats that are known to be sente locally. */ 
    7575static int known_good_attack_threats[BOARDMAX][MAX_ATTACK_THREATS]; 
    7676 
     77/* Moves that are known to be safe (in the sense that played stones can 
     78 * be captured, but opponent loses much more when attempting to do so) 
     79 */ 
     80static int known_safe_moves[BOARDMAX]; 
    7781 
    7882/* Helper functions to check conditions in discard rules. */ 
    7983typedef int (*discard_condition_fn_ptr)(int pos, int what); 
     
    20232027  return 0; 
    20242028} 
    20252029 
     2030/* Like documented in endgame:980, there are also moves which aren't 
     2031 * safe by themselves, but attempting to capture these stones would 
     2032 * result in a loss for the opponent (typically, by damezumari). 
     2033 * Simple examples include snapbacks, but more complicated ones do 
     2034 * exist. Following functions are helpers for the valuation processing 
     2035 * which deal with such special cases. 
     2036 */ 
     2037void 
     2038register_known_safe_move(int move) 
     2039{ 
     2040  ASSERT_ON_BOARD1(move); 
     2041   
     2042  known_safe_moves[move] = 1; 
     2043} 
     2044 
     2045 
     2046int 
     2047is_known_safe_move(int move) 
     2048{ 
     2049  ASSERT_ON_BOARD1(move); 
     2050   
     2051  return known_safe_moves[move]; 
     2052} 
     2053 
    20262054 
    20272055/* 
    20282056 * Local Variables: 
  • engine/value_moves.c

    RCS file: /cvsroot/gnugo/gnugo/engine/value_moves.c,v
    retrieving revision 1.170
    diff -u -r1.170 value_moves.c
     
    10681068    int tactical_safety = 0; 
    10691069    if (!ON_BOARD(pos)) 
    10701070      continue; 
     1071    tactical_safety = is_known_safe_move(pos); 
    10711072       
    10721073    for (k = 0; k < MAX_REASONS; k++) { 
    10731074      int r = move[pos].reason[k]; 
     
    24612462 
    24622463  mark_inessential_stones(OTHER_COLOR(color), safe_stones); 
    24632464 
    2464   if (move[pos].move_safety == 1 && safe_move(pos, color) != 0) { 
     2465  if (move[pos].move_safety == 1 
     2466      && (is_known_safe_move(pos) || safe_move(pos, color) != 0)) { 
    24652467    safe_stones[pos] = INFLUENCE_SAVED_STONE; 
    24662468    strength[pos] = DEFAULT_STRENGTH; 
    24672469    if (0) 
  • patterns/endgame.db

    RCS file: /cvsroot/gnugo/gnugo/patterns/endgame.db,v
    retrieving revision 1.69
    diff -u -r1.69 endgame.db
     
    444444;marginal_eye(*) && proper_eye(a) && max_eye_value(a) > 0 
    445445 
    446446 
     447Pattern EE201b 
     448 
     449?XX                     push deeper on first line. 
     450O.* 
     451--- 
     452 
     453:8,sOXe 
     454 
     455?XX 
     456Oa* 
     457--- 
     458 
     459;marginal_eye(a) && proper_eye(*) && max_eye_value(*) > 0 
     460;&& (safe_omove(*) || oplay_attack(*,a,a)) 
     461 
     462>if (!safe_omove(*)) known_safe_move(*) 
     463 
     464 
    447465Pattern EE202 
    448466 
    449467OXX.           endgame move 
     
    15821600X*X     Wedge 
    15831601O.X 
    15841602 
    1585 :8,OXe 
     1603:8,sOXe 
    15861604 
    15871605B*X 
    15881606OaX 
    15891607 
    15901608;oplay_attack_either(*,a,a,B) 
    15911609 
     1610>if (!safe_omove(*)) known_safe_move(*) 
     1611 
    15921612 
    15931613Pattern CE31 
    15941614# gf New pattern. (3.3.6) 
  • patterns/mkpat.c

    RCS file: /cvsroot/gnugo/gnugo/patterns/mkpat.c,v
    retrieving revision 1.156
    diff -u -r1.156 mkpat.c
     
    436436  {"adjacent_to_defendable_stone_in_atari", 1, 0, 1.0, 
    437437                "adjacent_to_defendable_stone_in_atari(%s)"}, 
    438438  {"good_attack_threat",        2, 0, 0.01, "register_good_attack_threat(%s, %s)"}, 
     439  {"known_safe_move",           1, 0, 0.01, "register_known_safe_move(%s)"}, 
    439440  {"break_mirror_helper",       1, 0, 0.01, "break_mirror_helper(%s, color)"} 
    440441}; 
    441442