-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Jason House wrote:
> On Sun, 2007-09-30 at 12:41 -0400, Don Dailey wrote:
>>>>   4. correctness of random move selection strategy.
>>> Pick a random empty position.  If illegal or eye-filling, remove from
>>> consideration the list and repeat.
>> Same basic idea.   I start by taking all filled points and removing them
>> from consider but I reinitialize after a capture.
> 
> The wording sounds like it may be wrong, and the implementation may be
> tricky.  You start will all points and remove the filled points?  If a
> selected move is illegal due to suicide, will you consider it again on
> later moves prior to a capture?  Rejecting eye-filling moves from future
> consideration seems ok, but only if it's rejected for only a single move
> color... It could be the key capture play later.

Hi Jason,

My description was greatly simplified, but I do it correctly.  Here is
the deal:

Essentially I have 3 lists, but they are all subsets of 1 master list
and maintained together as 1 list.

The master list is all 81 points (on 9x9 board that is.)

The 3 sub-lists appear in this order:

 1.  A list of occupied points - always unplayable
 2.  A list of unoccupied points that have been tried on a given move
 3.  The rest of the unoccupied points

These 3 lists are constantly being maintained.  They are all part of the
 large 81 point master list and 2 pointers track where one ends and the
next one begins.

To make a random legal move, list 2 starts out as a null list and I
choose a point randomly from list 3.    Most of these moves are
playable, but if one of these moves is illegal due to ko, or eye-filling
then I "put the move away" temporarily and do the required swap and bump
housekeeping to add this move to list 2 (which reduces list 3 by 1 point
via a pointer increment.)

In this way, I only try any move 1 time, and I only try moves of
unoccupied points.   When I run out of unoccupied points to try, then a
pass move is generated for this side.  However, the opponent may still
have moves so after 2 consecutive passes, the game is over.

Please note that once a legal move is found and executed, the pointer is
reset so that list 2 is once again NULL and list 3 contains ALL
unoccupied points so that all unoccupied points once again come under
consideration, even if they were previously rejected.    But any
occupied points are considered permanently unusable and never again
considered (until a capture move changes this that is.)

When a capture move is made,  the list has to reorganized because some
of the occupied points are now unoccupied.   I do this the "hard" way, I
traverse the whole list and rebuild.   Even with this expensive
operation the program is 2X faster than the more naive approach of not
maintaining a separate list of unoccupied points.

- - Don



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHARYBDsOllbwnSikRAvovAJ98xpop2o100mncuvdAYVUSgGzbGgCeO6qB
R7HG0v2keJd+wLMxQ4AVIKU=
=cZrT
-----END PGP SIGNATURE-----
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to