Łukasz Lew,

I'm trying to implement this now.   I think I see why our average moves
per game do not match.

First of all, suicide is illegal in my program, I do not allow it.  

On Thu, 2006-12-07 at 16:05 +0100, Łukasz Lew wrote:
> I really do randomize a whole vector of empty intersections before the 
> playout.
> When I get new empty intersection I just pick random place in vector,
> move it to the end,
> and use the place for new intersection.
> 
> Here is the code:
> 
>   void add_rnd (v::t v) {
>     int ii;
> 
>     empty_v_cnt++;
> 
>     ii = pm::rand () % empty_v_cnt;         // TODO improve speed "%"
>     tab[empty_v_cnt-1] = tab[ii];
>     tab[ii] = v;
>     assertc (mc_legal_ac, empty_v_cnt <= max_size*max_size);
>   }
> 
> I play the playout until there are no more legal moves. I allow ko
> recapture and large suicides. I have problem with signle stone
> suicides.
> So when one happens (I can only detect it by actually playing the
> stone), I just take next empty intersection.
> 
> "Circular" reduces frequency of such wasteful events.
> It means that I check next empty intersection in the vector starting
> from the place I finished last time.
> 
> I hope this is clear now. If not, just ask :)
> 
> Lukasz Lew
> 
> On 12/6/06, Don Dailey <[EMAIL PROTECTED]> wrote:
> > On Mon, 2006-12-04 at 18:32 +0100, Łukasz Lew wrote:
> > > I deal with eyes by randomizing list of empty intersections before the
> > > playout, and while searching non-eye I go through them in circular
> > > manner.
> >
> > What do you mean by circular and what does this have to do with eyes?
> > I'm looking to speed my random player up a little bit more.   Here is
> > what I've been doing for the last year or two:
> >
> > I collect all the empty intersections into an array and I randomize them
> > as I go.   When a capture happens, it screws up your list - you must
> > either add those intersections back to the pool of empty intersections
> > or just reinitialize the list.   Right now I'm just reinitializing the
> > list from scratch again - probably not the fastest way.
> >
> > I could of course randomize the list of empty intersections with a
> > Fisher-Yates shuffle FIRST and then traverse the list in order till
> > there is a capture but I think this is more work on the average because
> > if you scramble a big list and the next move is a capture,  you have to
> > rework the list anyway and randomize again.    I guess you might call
> > what I do a "lazy" shuffle - you don't do the work unless you need to.
> > (However, if I knew I would always need the whole list, it probably
> > produces a little bit faster code to scramble them all at once in a
> > tight little shuffle loop.)
> >
> > The actually procedure for "incremental randomization" is that I pick
> > randomly from the empty list and then "fix the list back up" by swapping
> > this out of the way with the first element in the list (which gets moved
> > out of the picture because I bump up the "list start" pointer.)
> >
> > - Don
> >
> >
> >
> >
> > _______________________________________________
> > computer-go mailing list
> > computer-go@computer-go.org
> > http://www.computer-go.org/mailman/listinfo/computer-go/
> >

_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to