Ticket #110 (closed defect: fixed)
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
Regression Results
| Attachment | Rev. | PASS | FAIL | Nodes | Status | |
| gunnar_7_9.16.diff | never tested |
Change History
comment:1 Changed 6 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

