gnugo-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [gnugo-devel] another semeai patch


From: Paul Pogonyshev
Subject: Re: [gnugo-devel] another semeai patch
Date: Wed, 14 Jan 2004 13:39:06 +0000
User-agent: KMail/1.5.94

Dan wrote:
> The critical move is 280. But Paul's patch doesn't
> solve it. The reason is that in the critical variation,
> after:
>
> B:S17 W:S16 B:L12 W:P10 B:K9 W:S10
>
> the new module is never called because the test at
> line 933 of owl.c is not matched.
>
>    if (min_eyes(&probable_eyes_b) == 1) {
>      int move = semeai_propose_eyespace_filling_move(owla, owlb);
>
> If this test is taken down, the problem is fixed. The
> move found by the semeai code at B:S17 is an unnecessary
> cut but does save the B group and the semeai is read out
> correctly.
>
>    if (1 || min_eyes(&probable_eyes_b) == 1) {
>      int move = semeai_propose_eyespace_filling_move(owla, owlb);

In this semeai position, min_eyes(&probable_eyes_b) happens to be 13.
This is due to tactical attack on the first dragon.  So, instead of
taking the test down, i propose to replace "==" with ">=".  The test
is actually there for performance reason: no need to try filling dead
eyeshapes if there are none.

I initially wrote "==", because there is no sense in filling dead
eyeshapes if the opponent has 2 or more certain eyes.  However, now
it is not clear how to check for that, having seen those 13 "certain"
eyes.  If anyone can come up with something smarter, please do.  This
will save some semeai nodes.  One possible solution is to reenable
this piece of code:

#if 0
    for (k = 0; k < MAX_LUNCHES; k++) {
      if (owlb->lunch[k] != NO_MOVE 
          && owla->goal[owlb->lunch[k]]) {
        owlb->lunch[k] = NO_MOVE;
      }
    }
#endif

Paul




reply via email to

[Prev in Thread] Current Thread [Next in Thread]