Ticket #110 (closed defect: fixed)

Opened 5 years ago

Last modified 5 years ago

Endgame

Reported by: sanxiyn Owned by: gnugo
Priority: normal Milestone: 3.7.9
Component: source Version:
Severity: normal Keywords:
Cc: patch: yes

Description

Black B1 is clearly better than A2.

Attachments

endgame.sgf Download (165 bytes) - added by sanxiyn 5 years ago.
gunnar_7_9.16.diff Download (2.0 KB) - added by gunnar 5 years ago.
testcase and tuning

Regression Results

Attachment Rev. PASS FAIL Nodes Status
gunnar_7_9.16.diff Download never tested

Change History

Changed 5 years ago by sanxiyn

Changed 5 years ago by gunnar

  • milestone changed from 3.8 to 3.7.9

This should be straightforward to solve.










A2 is an effective defense of the critical black dragon but indeed clearly worse than B1. Trying "gnugo -l endgame.sgf -t" shows that A2 is an owl defense, and the only move considered,

[...]
Move valuation:
  A2: owl attack/defend for B7
  A2: 27.00 - change in territory
  A2:   2.00 - total followup value, added 2.00 as territorial followup
  A2: 1.00 - added due to followup (2.00) and reverse followup values (0.00)
Move generation values A2 to 28.00
[...]
Top moves:
1. A2  28.01
Checking safety of a black move at A2
Move generation likes A2 with value 28.01
genmove() recommends A2 with value 28.01
black (X) move A2

First we check why the owl reading came up with A2 in the first place. While effective it's not really a very natural move. Do "gnugo -l endgame.sgf --decide-owl B7 -o vars.sgf" and we see in the comment for the A2 move in vars.sgf that it was generated by "D844", which we find in source:patterns/owl_defendpats.db@2332#L3800,

Pattern D844
# gf New pattern. (3.7.2)

|.OO        partition corner eyespace to avoid bent four complications
|.*.
+---

:8,-,value(40)

|.OO
|.*a
+---

;owl_proper_eye(a) && owl_big_eyespace(a)

This is indeed too general, the constraint ought to be

|bOO
|.*a
+---

;owl_proper_eye(a) && owl_proper_eye(b) && owl_big_eyespace(a)

Making this change we instead get A7 as the preferred move,

[...]
Move valuation:
  A7: owl attack/defend for B7
  A7: 29.00 - change in territory
  A7:   2.00 - total followup value, added 2.00 as territorial followup
  A7: 1.00 - added due to followup (2.00) and reverse followup values (0.00)
Move generation values A7 to 30.00
[...]
Top moves:
1. A7  30.00
Checking safety of a black move at A7
Move generation likes A7 with value 30.00
genmove() recommends A7 with value 30.00
black (X) move A7

which is fair enough. Not the best move in this position but we can't really blame the owl reading for not knowing that.

To force it to also consider B1 as a possible owl defense we can add a "d" pattern in source:patterns/patterns.db,

Pattern ED101

|oo?
|.O?
|.*X
+---

:8,Xd

|oo?
|.a?
|.*X
+---

;weak(a)

This does solve the problem,

[...]
Move valuation:
  A7: owl attack/defend for B7
  A7: 29.00 - change in territory
  A7:   2.00 - total followup value, added 2.00 as territorial followup
  A7: 1.00 - added due to followup (2.00) and reverse followup values (0.00)
Move generation values A7 to 30.00
  B1: owl attack/defend for B7
  B1:   3.83 (followup) - threatens to capture C1
  B1: 29.00 - change in territory
  B1:   11.12 - B7 strategic value already counted - B.
  B1:   7.33 - total followup value, added 3.49 as territorial followup
  B1: 3.66 - added due to followup (7.33) and reverse followup values (0.00)
  B1: 0.52 - connects strings (connect value 5, shape factor 0.104)
Move generation values B1 to 33.18
[...]
Top moves:
1. B1  33.19
2. A7  30.00
Checking safety of a black move at B1
Move generation likes B1 with value 33.19
genmove() recommends B1 with value 33.19
black (X) move B1

Changed 5 years ago by gunnar

testcase and tuning

Changed 5 years ago by gunnar

  • patch set

Changed 5 years ago by gunnar

Regression results for gunnar_7_9.16:

trevorb:100     PASS B1 [B1]
1 PASS
Total nodes: 1683322762 3320005 12609658 (+0.0033% +0.00018% +0.0035%)

Changed 5 years ago by gunnar

  • status changed from new to closed
  • resolution set to fixed
Note: See TracTickets for help on using tickets.