gnugo-devel
[Top][All Lists]
Advanced

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

[gnugo-devel] Semeai progress


From: Daniel Bump
Subject: [gnugo-devel] Semeai progress
Date: Sat, 1 Dec 2001 07:17:33 -0800

This describes the state of semeai after 3.1.15 plus two patches
semeai_1_16.1, semeai_1_16.2. These are in the CVS.

The semeai module in semeai.c will be the interface between
owl_analyze_semeai() in owl mode and the engine. Currently the old
semeai code is used. But after the patch semeai_1_16.2 there is 
a rudimentary replacement for the standard semeai module in semeai.c.  
This is not invoked by the default unless you 'configure
--enable-experimental-semeai' and recompile. You can also choose the
experimental module from the command line by using the --experimental_semeai
option. The reason for making a new configure option is to allow the
regressions to be run.

I ran not the full regressions but strategy.tst with the patches semeai_1_16.1
and semeai_1_16.2 and compiling --experimental_semeai. This had the effect of
three unexpected PASSes and one unexpected FAIL. The PASSes were strategy
tests 1, 34 and 44, and the FAIL was number 37. Looking at the three PASSES it
isn't clear what happened in the first two but test 44 is a typical semeai.
Results could differ for the current CVS version because I didn't have the
patch gunnar_1_16.2 when I ran them.

The configure option substitutes a new experimental_analyze_semeai()
for the old analyze_semeai() in semeai.c. This function is very
primitive. For example if one dragon is involved in two semeais
what it does is definitely wrong.

The core of the new semeai code is the function owl_analyze_semeai() in
owl.c. I wrote the first version of this long ago but didn't really get it to
work until recently. It probably still is not working very well but well
enough to make me very optimistic.

The owl_analyze_semeai() function takes a parameter 'owl'. If owl is 0, the
semeai is considered a tactical battle involving two worms. The owl code is
not invoked. The semeai code is used in this TACTICAL MODE by the function
small_semeai(). The semeai code in OWL MODE is used by the engine only
if you use the experimental semeai configure or command line option.

Ko is not yet implemented. When it is, the declaration of owl_analyze_semeai
and do_owl_analyze_semeai will change from 'static' to 'int'. The code does
understand backfilling.

In tactical mode I think owl_analyze_semeai works reasonably well but in owl
mode it needs a lot of work. Still those strategy.tst results encourage me to
hope that even in owl mode it might be better than the existing semeai module.
My remaining comments concern the owl mode.

There are 28 tests in regression/semeai.tst. The last several
refer to the file regression/golois/Goemate990902-1.sgf which
has several semeais on the board. The most interesting is
S8/R8 which GNU Go gets right. To see the code in action run

gnugo -l Goemate990902-1.sgf --quiet --decide-semeai R8/S8 -o vars.sgf

and consult the resulting file of variations. I think you will see that the
code is promising but will need a lot of work. It often generates owl moves
when it should be filling liberties.  This is the reason it gets the R7/Q7 and
G12/G13 problems wrong.

One thing I could use help with is getting good semeai problems into the
semeai.tst. Wolfgang Manner contributed a few semeai problems and others can
be found by grepping regression/*tst for 'semeai'.

At the moment the code shuts down after 100 variations are generated. This can
be relaxed when the code is more reliable.  Another thing is that the owl mode
shuts off when no owl moves are found but we do want to be able to restart it
under certain circumstances. For example in this situation:

OOOOOOOOOOO
OXXXXXXXXXO
OXaXXX...XO
OXOObXOOOXO
-----------

After O makes atari at 'a' and B captures at 'b' then the owl code must
be turned back on so owl_determine_life can find the move to prevent X from
getting two eyes.

Dan









reply via email to

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