Ticket #92 (closed enhancement: fixed)

Opened 6 years ago

Last modified 5 years ago

Unconditionally meaningless moves

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

Description (last modified by gunnar) (diff)

This patch identifies unconditionally meaningless moves. From the code comments:

By unconditional status analysis we can statically find some moves
which there is never any need to play. Those belong to three
different categories:

1. A move on a vertex which is already unconditional territory for
   either color.
2. A move which after having been made ends up as unconditional
   territory for the opponent.
3. If a move at vertex A makes vertex B become unconditional
   territory, there is no need to consider a move at B, since A has
   all the positive effects that B would have.

Moves in categories 1 and 2 are never any better than passing and
often worse (with territory scoring always worse). Moves in
category three can be either better or worse than passing, but it's
always true that a move at A is at least as good as a move at B.
Occasionally they are identically good (A makes B unconditional
territory and B makes A unconditional territory) but there is never
any need to analyze both.

Example of category 2:







Black plays in the corner, making white unconditionally alive and itself unconditionally dead. Effectively black would lose a ko threat in gote that way.

Example of category 3:








White can save its stones in three ways. Two of them leave a ko threat behind, whereas playing in the middle of the tree-space eye makes the white stones unconditionally alive.

Categories 1 and 2 generate antisuji moves reasons and category 3 generates replacement move reasons.

This is only occasionally useful in practice but it does solve seki:1002. While this analysis doesn't consume reading nodes of any kind it does take a small amount of time. Moreover this time is independent of search depth settings so it's relatively more expensive at low levels. Therefore it should be disabled for sufficiently low levels. I'm not sure where to put the cut, however, and would be thankful if some people could measure the time penalty on their machines.

Attachments

gunnar_7_9.4.diff Download (7.9 KB) - added by gunnar 6 years ago.

Regression Results

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

Change History

Changed 6 years ago by gunnar

comment:1 Changed 5 years ago by gunnar

  • Milestone changed from 3.8 to 3.7.11

I measure a 0.9% slowdown at level 10.

comment:2 follow-up: ↓ 3 Changed 5 years ago by gunnar

I propose activating this from level 10 and up. Any other opinions?

comment:3 in reply to: ↑ 2 Changed 5 years ago by nando

Replying to gunnar:

I propose activating this from level 10 and up. Any other opinions?

FWIW, I agree.

comment:4 Changed 5 years ago by gunnar

  • Description modified (diff)

Examples of category 2 and 3 moves added to the description.

comment:5 Changed 5 years ago by gunnar

Current regression results are:

thrash:27       FAIL G3 [J6]
thrash:28       FAIL G3 [A2]
thrash:29       FAIL G3 [D3]
seki:1002       PASS B2 [B2]

The seki:1002 pass is real but the three failures are bogus. All three of those should allow G3 and H2 as well, unconditionally settling the whole board, alternatively be restricted_genmove for the ko moves.

comment:6 Changed 5 years ago by gunnar

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