Ticket #75 (closed defect: fixed)
Generate cut move reasons for cutting moves found during find_connections()
| Reported by: | arend | Owned by: | arend |
|---|---|---|---|
| Priority: | normal | Milestone: | 3.7.11 |
| Component: | source | Version: | |
| Severity: | normal | Keywords: | |
| Cc: | patch: | yes |
Description (last modified by arend) (diff)
When the dragons are built via find_connections(), this is mostly done via patterns such as the following:
Pattern CC503 O . O :+,C c a b ;!xcut(a) && !oplay_disconnect(b,c)
However, so far we throw away the information in case a cutting move is found. This patch changes that by introducing a disconnect_helper(): a wrapper around disconnect() that reports back in case a cutting move is found. The cutting moves are stored in a list in dragon.c, and later CUT_MOVE reasons are generated where appropriate.
The breakage is as follows:
trevorb:220 FAIL G1 [J3] Cut move reasons misevalued global:16 FAIL Q11 [O10] This is ok. 13x13:35 PASS D2 [D2] This is good though lucky. nngs3:330 FAIL F5 [P12|Q11] Very good, F5 most urgent. nngs4:260 FAIL G9 [A4] G9 is ok, increases aji in sente. nngs4:630 FAIL C5 [B6] Bad, Connection misread. nngs4:870 FAIL H9 [C3|C4|D3] Very bad, H9 doesn't do anything. olympiad2004:3 PASS P5 [!Q10] Good. Total nodes: 1690527606 3283875 12582021 Total time: 7647.19 (14078.61)
Attachments
Regression Results
| Attachment | Rev. | PASS | FAIL | Nodes | Status | |
| arend_7_9.4.diff | 2381 | 4 | 6 | +0.71% +0.11% +0.96% | details | |
| arend_7_9.4a.diff | 2381 | 4 | 6 | +0.71% +0.11% +0.96% | details |
Change History
comment:1 Changed 6 years ago by nando
Two comments.
First a nitpick: I would have found more logical to implement this feature as part of find_cuts(). Was it easier this way ?
Otherwise, it took me more than an instant to understand the reason behind those lines in disconnect_helper()
if (dragon[apos].origin == dragon[bpos].origin)
return 1;
Am I correct that it's just an optimization ? If yes, there should probably be some comment in the source code.
comment:2 Changed 6 years ago by arend
You are of course right about the optimization, I should add a comment or throw it out.
About find_cuts(): The name of this function is a little misleading, since it is actually trying to find intransitivities. Whereas find_connections() is the place where we test whether pairs of strings are connected. When testing this, we automatically find out about cuttig moves.
Changed 6 years ago by arend
-
attachment
arend_7_9.4a.diff
added
Removed unnecessary optimization pointed out by Nando.
comment:7 Changed 5 years ago by arend
Analysis of the breakage as of r2381:
trevorb:220 FAIL G1 [J3] bad, move evaluation problems global:16 FAIL Q11 [O10] ok 13x13:35 PASS D2 [D2] good nngs3:330 FAIL F5 [P12|Q11] improved valuation of F5, very good nngs3:490 PASS P15 [P15] VERY good ninestones:490 FAIL S10 [R10] ok; cut move reason for r10 is missing ninestones:790 FAIL A3 [B1] random (semeai misread) arend2:210 PASS K2 [K2] very good thrash:23 PASS D7 [A5|D7] random gifu03:507 FAIL G16 [G13] I don't understand what is happening here (breakin problem) 4 PASS 6 FAIL Total nodes: 1709420526 3340006 12430447 (+0.71% +0.11% +0.96%)
It seems the patch is worth applying.
