Ł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/